This commit is contained in:
doudou201703
2026-08-06 20:39:45 +08:00
parent 046fac6dc1
commit 3ff0faebb9
38 changed files with 1029 additions and 611 deletions
@@ -0,0 +1,99 @@
# Generated by Django 6.0.2 on 2026-08-04 01:28
import ulid
import wechat_数据库.雪花算法.雪花算法工具
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('django_app', '0053_alter_goods商品_id_str_alter_lucky拼团_idkey_and_more'),
]
operations = [
migrations.CreateModel(
name='wei客服账号',
fields=[
('kefu_id', models.UUIDField(default=ulid.ULID, primary_key=True, serialize=False)),
('extInfo_推广员账号链接', models.CharField(db_comment='企微客服账号链接', max_length=128)),
('extInfo_企微员工绑定的UNIONID', models.CharField(db_comment='企微客服绑定的小程序unionid', max_length=128)),
('extInfo_企微员工的名称', models.CharField(blank=True, max_length=128, null=True)),
('dateAndTime', models.DateTimeField(auto_now_add=True, db_comment='创建时间')),
('updateTime', models.DateTimeField(auto_now=True, db_comment='更新时间')),
],
options={
'db_table': 'wei客服账号',
},
),
migrations.AlterField(
model_name='goods商品',
name='id_str',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, max_length=128),
),
migrations.AlterField(
model_name='lucky拼团',
name='idKey',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='lucky拼团订单',
name='idKey',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='map地图ip转地址',
name='id_str',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, max_length=128),
),
migrations.AlterField(
model_name='minisub订阅消息模板',
name='idKey',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='order订单',
name='id_str',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, max_length=128),
),
migrations.AlterField(
model_name='order订单商品数据',
name='order_id_str',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, max_length=128),
),
migrations.AlterField(
model_name='order订单商品数据',
name='order_id商品',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, max_length=128),
),
migrations.AlterField(
model_name='wechattransferorder',
name='id_str',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, max_length=128),
),
migrations.AlterField(
model_name='wecom企微用户',
name='idKeyWecom企微用户',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='wecom企微群',
name='idKeyWecom企微群',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, primary_key=True, serialize=False),
),
migrations.AlterField(
model_name='wecom推广码',
name='id_str',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, max_length=128),
),
migrations.AlterField(
model_name='weiuser地图定位',
name='id_str',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, max_length=128),
),
migrations.AlterField(
model_name='weiuser微信用户地址',
name='id_str',
field=models.CharField(default=wechat_数据库.雪花算法.雪花算法工具.SnowflakeIDGenerator.generate_str, max_length=128),
),
]
+1 -3
View File
@@ -1,14 +1,12 @@
from django.db import models
from django_定时器 import 幸运拼团数据库
from wechat_wecom_企业微信管理.企微通讯录管理.企微通讯录管理数据库 import 企微员工数据
from wechat_数据库.企业微信数据库 import 推广二维码数据表, 企微用户表, 企微群数据库
from wechat_token import token数据库
from wechat_数据库.地图定位 import 用户定位数据库, 腾讯地图解析数据库
from wechat_数据库.小程序后端数据库 import 订阅消息
from wechat_数据库.支付数据库 import 商家转账数据库
from wechat_数据库.支付订单数据库 import 商品订单数据
from wechat_数据库.洗衣液商品数据库 import 六果洗衣液商品
from wechat_数据库.测试数据库 import 测试数据表
from wechat_数据库.用户数据库 import 小程序登陆用户, 小程序用户地址, 小程序积分数据库
from wechat_数据库.用户数据库 import 小程序登陆用户, 小程序用户地址, 小程序积分数据库,企微客服数据库
# Create your models here.
+40 -4
View File
@@ -1,3 +1,6 @@
import threading
from functools import wraps
import emoji
import orjson
import pydash
@@ -18,7 +21,20 @@ from wechat_项目工具包.微信支付工具包.微信支付类 import payment
from wechat_项目工具包.数据库的工具包.更新用户积分 import miniUser用户角色, miniUser积分
def sync_lock_接口线程锁(lock):
def decorator(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
with lock:
return fn(*args, **kwargs)
return wrapper
return decorator
class 业务订单接口ViewSets(ViewSet):
lock_接口线程锁 = threading.Lock() # 所有请求 共享这一个 lock对象
def 处理积分方法(self, 商家订单号):
pass
@@ -30,7 +46,6 @@ class 业务订单接口ViewSets(ViewSet):
def 首单自动注册成为推广员(self, out_trade_no):
pass
order对象 = order订单.objects.get(order支付商家侧订单号=out_trade_no)
user用户对象 = weiuser.objects.get(unionid=order对象.order支付者unionid)
six绑定的企微员工对象, sixBool = weiuser.objects.get_or_create(unionid=user用户对象.user_绑定企微UNIONID)
# 判断用户成为推广员的标准 成为的条件,当前用户绑定的企微员工账号, 必须是同一个区县的
@@ -40,6 +55,21 @@ class 业务订单接口ViewSets(ViewSet):
user用户对象.user_角色权限 = miniUser用户角色().推广员
user用户对象.save()
def 生成单品优惠券的数据(self, order购物车商品数据: list[dict]):
pass
准备一个空列表 = []
# 循环传递进来的数据
for item in order购物车商品数据:
# 创建对象
data_dict = {
"merchant_goods_id": "01KYNDT2KKKPZCR5G1TVG9GZ7G",
"goods_name": emoji.replace_emoji(pydash.get(obj=item, path="goods_商品标题")),
"quantity": pydash.get(obj=item, path="单个商品订单数量"),
"unit_price": pydash.get(obj=item, path="单个商品实际支付价格")
}
准备一个空列表.append(data_dict)
return 准备一个空列表
@action(detail=False, methods=["post"], url_path="mall")
def 商城订单支付接口(self, request: Request) -> Response:
"""前端小程序的用户: 发起支付订单的请求接口"""
@@ -53,13 +83,15 @@ class 业务订单接口ViewSets(ViewSet):
share订单分享者ID = request.data.get("share订单分享者ID", "六果") # 当前是否有上级对象
order订单类型 = request.data.get("order订单类型", None)
goods标题 = emoji.replace_emoji(pydash.get(obj=pydash.head(order购物车商品数据), path="goods_商品标题"))
goods_detail_支付优惠券的数据 = self.生成单品优惠券的数据(order购物车商品数据=order购物车商品数据)
print("打印一下哪里出问题了", order购物车商品数据)
out_trade_no商家侧的订单号 = f"OAT{ULID()}" # 生成商家侧的订单号
body = {
"mchid": paymentCategory.mchid, # 【直连商户号】 直连商户号
"out_trade_no": out_trade_no商家侧的订单号, # 【商户订单号】 商户系统内部订单号,只能是数字、大小写字母_-*且在同一个商户号下唯一。
"appid": paymentCategory.appid, # 【公众号 或者 小程序ID】
"description": goods标题, # 【商品描述】 商品描述要
"notify_url": "https://six.sixgou.com/six/mall_callbakc/", # 回调地址要
"notify_url": "https://xiao.sixgou.com/six/mall_callbakc/", # 回调地址要
"amount": {
# "total": order购物车商品总价, # 【总金额】 订单总金额,单位为分。
"total": 1, # 【总金额】 订单总金额,单位为分。
@@ -71,6 +103,11 @@ class 业务订单接口ViewSets(ViewSet):
# "openid": "ohQkD7A-N93kljcFmkCyG6e_D9vg", # 【用户标识】 用户在普通商户AppID下的唯一标识。 下单前需获取到用户的OpenID,详见OpenID获取
"openid": self_mini_openid, # 【用户标识】 用户在普通商户AppID下的唯一标识。 下单前需获取到用户的OpenID,详见OpenID获取
},
"detail": {
# 【商品详情】 商品详情描述,该结构去除多余空格换行压缩后,总长度不能超过6144字节。
"goods_detail": goods_detail_支付优惠券的数据
},
"support_fapiao": True, # 【电子发票入口开放标识】 传入true时,支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能,传此字段才可生效。
} # 请求的数据
wechat_data = wechatPay(payment=sixpay六果科技公司).getpay_jsapi(uri=url_pay, body_data=body, method="POST")
payData = pydash.get(obj=wechat_data, path="response")
@@ -88,13 +125,13 @@ class 业务订单接口ViewSets(ViewSet):
# httpResData = BaseResponse(resData=ResData(listData=[""], dictData={}), ).model_dump()
return Response(data=httpResData, status=status.HTTP_200_OK)
@sync_lock_接口线程锁(lock=lock_接口线程锁) # 锁住这个接口所有并发请求,
@action(detail=False, methods=["post"], url_path="mall_callbakc")
def jsapi支付回调测试接口(self, request: Request) -> Response:
""" 微信支付成功后的回调接口 """
dict_body = request.data
wechat_data支付回调数据 = wechatPay(payment=paymentCategory).callBack回调解密(headers=request.headers,
response_body=dict_body, )
print("\n 🍎 🍏 🍊 🍎 🍏 \n", wechat_data支付回调数据, )
out_trade_no商家侧支付订单号 = pydash.get(obj=wechat_data支付回调数据, path="out_trade_no") # 商家侧的订单号
trade_state_desc = pydash.get(obj=wechat_data支付回调数据, path="trade_state_desc") # 支付回调的支付状态
transaction_id = pydash.get(obj=wechat_data支付回调数据, path="transaction_id")
@@ -106,7 +143,6 @@ class 业务订单接口ViewSets(ViewSet):
order物流订单号=生成商家侧物流的订单号,
order支付微信官方订单号=transaction_id,
)
print("打印一下商家的订单号", out_trade_no商家侧支付订单号, transaction_id)
(miniUser积分(share分享者unionidID="", click点击者unionidID="")
.add添加好友助力下单返利积分(order支付商家侧订单号=out_trade_no商家侧支付订单号, share积分类型="好友下单"))
ems邮政物流工具().生成运单(out_trade_no商家侧支付订单号=out_trade_no商家侧支付订单号) # 调用方法,生成真实的物流订单号码;
+45
View File
@@ -0,0 +1,45 @@
from typing import cast
import pydash
from channels.layers import BaseChannelLayer, get_channel_layer
from django.http.response import HttpResponse
from rest_framework.decorators import action
from rest_framework.request import Request
from rest_framework.viewsets import ViewSet
from wechat_微信支付证书.江苏六果科技有限公司支付证书.江苏六果科技有限公司支付参数 import sixpay六果科技公司
from wechat_项目工具包.微信支付工具包.微信支付类 import wechatPay
default_channel_layer = cast(BaseChannelLayer, get_channel_layer(alias="default"))
from functools import wraps
import threading
def sync_lock(lock):
def decorator(fn):
@wraps(fn)
def wrapper(*args, **kwargs):
with lock:
return fn(*args, **kwargs)
return wrapper
return decorator
class 电子发票管理接口ViewSets(ViewSet):
lock = threading.Lock() # 所有请求 共享这一个 lock对象
@sync_lock(lock=lock) # 锁住这个接口所有并发请求,
@action(detail=False, methods=["get", "post", "put", "delete"], url_path="callback")
def 电子发票回调接口(self, request: Request):
""""""
print("电子发票请求进来了没有")
print(request.data)
print(request.query_params)
电子发票回调解密后的数据 = wechatPay(payment=sixpay六果科技公司).callBack回调解密(headers=request.headers, response_body=request.data)
print(电子发票回调解密后的数据, "=======================")
fapiao_apply_id = pydash.get(obj=电子发票回调解密后的数据, path="fapiao_apply_id")
return HttpResponse(content="OK")
+1 -1
View File
@@ -38,6 +38,6 @@ class 实时更新物流数据ViewSets(ViewSet):
order物流公司订单编号 = request.data.get("order物流公司订单编号", None)
order物流订单号 = request.data.get("order物流订单号", None)
print("实时更新数据请求进来了吗")
ems邮政物流工具().更新物流快递数据(order物流公司订单编号=order物流公司订单编号, order物流订单号=order物流订单号)
ems邮政物流工具().更新物流快递数据(order物流公司订单编号=order物流公司订单编号, )
httpResData = BaseResponse(resData=ResData(listData=[""], dictData={}), ).model_dump()
return Response(data=httpResData, status=status.HTTP_200_OK)
+2 -1
View File
@@ -32,7 +32,8 @@ class 小程序发优惠券到钱包接口ViewSets(ViewSet):
@action(detail=False, methods=["get", "post", "put", "delete"], url_path="生成优惠券")
def 生成优惠券(self, request: Request):
""""""
stock发券数据 = stock发送代金券功能(stock_id_代金券批次号="22512292").send发券并返回前端需要的数据()
# stock发券数据 = stock发送代金券功能(stock_id_代金券批次号="22512292").send发券并返回前端需要的数据()
stock发券数据 = stock发送代金券功能(stock_id_代金券批次号="22625737").send发券并返回前端需要的数据()
# 4. 生成签名
return Response(data=stock发券数据)