@@ -823,7 +823,21 @@ func CentralKitchenForSchoolOrdList(c *gin.Context) { | |||
e.OutErr(c, e.ERR, err.Error()) | |||
return | |||
} | |||
personNum, orderCountByDay, orderCountByMonth, orderCountByTerm, consumeAmount, err := svc2.CentralKitchenForSchoolOrdStatistics(req) | |||
if err != nil { | |||
e.OutErr(c, e.ERR, err.Error()) | |||
return | |||
} | |||
e.OutSuc(c, map[string]interface{}{ | |||
"statistics": map[string]interface{}{ | |||
"person_num": personNum, | |||
"order_count_by_day": orderCountByDay, | |||
"order_count_by_month": orderCountByMonth, | |||
"order_count_by_term": orderCountByTerm, | |||
"consume_amount": consumeAmount, | |||
}, | |||
"list": resp, | |||
"total": total, | |||
"enterprise_kind_list": md.EnterpriseKindForSchool, | |||
@@ -13,6 +13,7 @@ import ( | |||
"applet/app/enum" | |||
"applet/app/utils" | |||
"encoding/csv" | |||
"encoding/json" | |||
"fmt" | |||
"github.com/360EntSecGroup-Skylar/excelize" | |||
"github.com/gin-gonic/gin" | |||
@@ -1079,7 +1080,22 @@ func SelfSupportForSchoolOrdList(c *gin.Context) { | |||
e.OutErr(c, e.ERR, err.Error()) | |||
return | |||
} | |||
personNum, count, consumeAmount, alreadyPayAmount, waitPayAmount, refundPayAmount, err := svc2.SelfSupportForSchoolOrdStatistics(req) | |||
if err != nil { | |||
e.OutErr(c, e.ERR, err.Error()) | |||
return | |||
} | |||
e.OutSuc(c, map[string]interface{}{ | |||
"statistics": map[string]interface{}{ | |||
"person_num": personNum, | |||
"order_count": count, | |||
"consume_amount": consumeAmount, | |||
"already_pay_amount": alreadyPayAmount, | |||
"wait_pay_amount": waitPayAmount, | |||
"refund_pay_amount": refundPayAmount, | |||
}, | |||
"list": resp, | |||
"total": total, | |||
"enterprise_kind_list": md.EnterpriseKindForSchool, | |||
@@ -1102,7 +1118,7 @@ func SelfSupportForSchoolOrdList(c *gin.Context) { | |||
} | |||
func SelfSupportForSchoolConsumeLimit(c *gin.Context) { | |||
var req []*md.SelfSupportForSchoolConsumeLimitReq | |||
var req md.SelfSupportForSchoolConsumeLimitReq | |||
err := c.ShouldBindJSON(&req) | |||
if err != nil { | |||
err = validate.HandleValidateErr(err) | |||
@@ -1110,6 +1126,17 @@ func SelfSupportForSchoolConsumeLimit(c *gin.Context) { | |||
e.OutErr(c, err1.Code, err1.Error()) | |||
return | |||
} | |||
//TODO::业务校验 | |||
var totalMaxConsumeTimes int | |||
for _, v := range req.RosterPeriodConsumeLimitConfigList { | |||
totalMaxConsumeTimes += v.MaxConsumeTimes | |||
} | |||
if totalMaxConsumeTimes > utils.StrToInt(req.DailyMaxConsumeTimes) { | |||
fmt.Println(utils.StrToInt(req.DailyMaxConsumeTimes)) | |||
e.OutErr(c, e.ERR_INVALID_ARGS, "单日最大消费次数,上限99(如需设置需要大于餐段次数之和,否则可能会导致餐段消费次数不足)") | |||
return | |||
} | |||
enterpriseId := utils.StrToInt(c.DefaultQuery("enterprise_id", "")) | |||
enterpriseDb := db.EnterpriseDb{} | |||
enterpriseDb.Set() | |||
@@ -1135,80 +1162,82 @@ func SelfSupportForSchoolConsumeLimit(c *gin.Context) { | |||
selfSupportForUserFaceInfoDb := db.SelfSupportForUserFaceInfoDb{} | |||
userIdentityDb := db.UserIdentityDb{} | |||
var data md2.CurlAlipayPlanetEcocampusApiRosterConsumeLimit | |||
var mm []*model.SelfSupportForUserConsumeLimit | |||
var userIdentityIds []int | |||
var data md2.CurlAlipayPlanetEcocampusApiRosterSingleConsumeLimitSync | |||
now := time.Now() | |||
for _, v := range req { | |||
selfSupportForUserFaceInfoDb.Set(v.UserIdentityId) | |||
userIdentityDb.Set(0) | |||
faceInfo, err := selfSupportForUserFaceInfoDb.GetSelfSupportForUserFaceInfo() | |||
if err != nil { | |||
e.OutErr(c, e.ERR_DB_ORM, err.Error()) | |||
return | |||
} | |||
if faceInfo == nil { | |||
e.OutErr(c, e.ERR_NO_DATA, "用户【"+utils.IntToStr(v.UserIdentityId)+"】身份未查询到一脸通行相关数据") | |||
return | |||
} | |||
identity, err := userIdentityDb.GetUserIdentity(v.UserIdentityId) | |||
if err != nil { | |||
e.OutErr(c, e.ERR_DB_ORM, err.Error()) | |||
return | |||
} | |||
if identity == nil { | |||
e.OutErr(c, e.ERR_NO_DATA, "用户【"+utils.IntToStr(v.UserIdentityId)+"】身份未查询到") | |||
return | |||
} | |||
data.SchoolCode = selfSupportForSchoolInfo.SchoolCode | |||
data.SchoolName = selfSupportForSchoolInfo.SchoolName | |||
data.ConsumeLimitSyncInfo = append(data.ConsumeLimitSyncInfo, md2.ConsumeLimitSyncInfo{ | |||
FaceUid: faceInfo.UserId, | |||
OutRosterCode: utils.IntToStr(v.UserIdentityId), | |||
RosterName: identity.Name, | |||
DailyConsumeLimit: v.DailyConsumeLimit, | |||
DailyConsumeLimitSwitch: v.DailyConsumeLimitSwitch, | |||
SingleConsumeLimit: v.SingleConsumeLimit, | |||
SingleConsumeLimitSwitch: v.SingleConsumeLimitSwitch, | |||
DailyConsumeNumber: v.DailyConsumeNumber, | |||
DailyConsumeNumberSwitch: v.DailyConsumeNumberSwitch, | |||
}) | |||
mm = append(mm, &model.SelfSupportForUserConsumeLimit{ | |||
EnterpriseId: enterpriseId, | |||
UserIdentityId: v.UserIdentityId, | |||
DailyConsumeLimit: v.DailyConsumeLimit, | |||
DailyConsumeLimitSwitch: v.DailyConsumeLimitSwitch, | |||
SingleConsumeLimit: v.SingleConsumeLimit, | |||
SingleConsumeLimitSwitch: v.SingleConsumeLimitSwitch, | |||
DailyConsumeNumber: v.DailyConsumeNumber, | |||
DailyConsumeNumberSwitch: v.DailyConsumeNumberSwitch, | |||
CreateAt: now.Format("2006-01-02 15:04:05"), | |||
UpdateAt: now.Format("2006-01-02 15:04:05"), | |||
}) | |||
userIdentityIds = append(userIdentityIds, v.UserIdentityId) | |||
selfSupportForUserFaceInfoDb.Set(req.UserIdentityId) | |||
userIdentityDb.Set(0) | |||
faceInfo, err := selfSupportForUserFaceInfoDb.GetSelfSupportForUserFaceInfo() | |||
if err != nil { | |||
e.OutErr(c, e.ERR_DB_ORM, err.Error()) | |||
return | |||
} | |||
if faceInfo == nil { | |||
e.OutErr(c, e.ERR_NO_DATA, "用户【"+utils.IntToStr(req.UserIdentityId)+"】身份未查询到一脸通行相关数据") | |||
return | |||
} | |||
identity, err := userIdentityDb.GetUserIdentity(req.UserIdentityId) | |||
if err != nil { | |||
e.OutErr(c, e.ERR_DB_ORM, err.Error()) | |||
return | |||
} | |||
if identity == nil { | |||
e.OutErr(c, e.ERR_NO_DATA, "用户【"+utils.IntToStr(req.UserIdentityId)+"】身份未查询到") | |||
return | |||
} | |||
err, resp := svc.CurlAlipayPlanetEcocampusApiRosterConsumeLimit(data) | |||
data.SchoolCode = selfSupportForSchoolInfo.SchoolCode | |||
data.FaceUid = faceInfo.UserId | |||
data.RosterName = identity.Name | |||
data.DailyConsumeLimit = req.DailyConsumeLimit | |||
data.SingleConsumeLimit = req.SingleConsumeLimit | |||
data.DailyMaxConsumeTimes = req.DailyMaxConsumeTimes | |||
data.RosterPeriodConsumeLimitConfigList = req.RosterPeriodConsumeLimitConfigList | |||
err, resp := svc.CurlAlipayPlanetEcocampusApiRosterSingleConsumeLimitSync(data) | |||
fmt.Println(">>>>>>>>>>>>>>>>>!!!<<<<<<<<<<<<<<<<", data, err) | |||
if err != nil { | |||
e.OutErr(c, e.ERR, err.Error()) | |||
return | |||
} | |||
//TODO::记录到表中 | |||
_, err = db.Db.In("user_identity_id", userIdentityIds).Delete(model.SelfSupportForUserConsumeLimit{}) | |||
if err != nil { | |||
return | |||
} | |||
selfSupportForUserConsumeLimitDb := db.SelfSupportForUserConsumeLimitDb{} | |||
selfSupportForUserConsumeLimitDb.Set(0) | |||
_, err = selfSupportForUserConsumeLimitDb.BatchAdd(mm) | |||
selfSupportForUserConsumeLimitDb.Set(req.UserIdentityId) | |||
m, err := selfSupportForUserConsumeLimitDb.GetSelfSupportForUserConsumeLimit() | |||
if err != nil { | |||
e.OutErr(c, e.ERR, err.Error()) | |||
e.OutErr(c, e.ERR_DB_ORM, err.Error()) | |||
return | |||
} | |||
if m == nil { | |||
m = &model.SelfSupportForUserConsumeLimit{ | |||
EnterpriseId: enterpriseId, | |||
UserIdentityId: req.UserIdentityId, | |||
DailyConsumeLimit: req.DailyConsumeLimit, | |||
SingleConsumeLimit: req.SingleConsumeLimit, | |||
DailyMaxConsumeTimes: req.DailyMaxConsumeTimes, | |||
RosterPeriodConsumeLimitConfigList: utils.SerializeStr(req.RosterPeriodConsumeLimitConfigList), | |||
CreateAt: now.Format("2006-01-02 15:04:05"), | |||
UpdateAt: now.Format("2006-01-02 15:04:05"), | |||
} | |||
_, err1 := selfSupportForUserConsumeLimitDb.SelfSupportForUserConsumeLimitInsert(m) | |||
if err1 != nil { | |||
e.OutErr(c, e.ERR_DB_ORM, err1.Error()) | |||
return | |||
} | |||
} else { | |||
m.EnterpriseId = enterpriseId | |||
m.UserIdentityId = req.UserIdentityId | |||
m.DailyConsumeLimit = req.DailyConsumeLimit | |||
m.SingleConsumeLimit = req.SingleConsumeLimit | |||
m.DailyMaxConsumeTimes = req.DailyMaxConsumeTimes | |||
m.RosterPeriodConsumeLimitConfigList = utils.SerializeStr(req.RosterPeriodConsumeLimitConfigList) | |||
m.UpdateAt = now.Format("2006-01-02 15:04:05") | |||
_, err1 := selfSupportForUserConsumeLimitDb.SelfSupportForUserConsumeLimitUpdate(m, | |||
"enterprise_id", "user_identity_id", "daily_consume_limit", "single_consume_limit", "daily_consume_number", "roster_period_consume_limit_config_list") | |||
if err1 != nil { | |||
e.OutErr(c, e.ERR_DB_ORM, err1.Error()) | |||
return | |||
} | |||
} | |||
e.OutSuc(c, resp, nil) | |||
return | |||
@@ -1273,21 +1302,6 @@ func SelfSupportForSchoolConsumeLimitList(c *gin.Context) { | |||
if req.DailyConsumeLimit != "" { | |||
sess.And("self_support_for_user_consume_limit.daily_consume_limit = ?", req.DailyConsumeLimit) | |||
} | |||
if req.DailyConsumeLimitSwitch != "" { | |||
sess.And("self_support_for_user_consume_limit.daily_consume_limit_switch = ?", req.DailyConsumeLimitSwitch) | |||
} | |||
if req.SingleConsumeLimit != "" { | |||
sess.And("self_support_for_user_consume_limit.single_consume_limit = ?", req.SingleConsumeLimit) | |||
} | |||
if req.SingleConsumeLimitSwitch != "" { | |||
sess.And("self_support_for_user_consume_limit.single_consume_limit_switch = ?", req.SingleConsumeLimitSwitch) | |||
} | |||
if req.DailyConsumeNumber != "" { | |||
sess.And("self_support_for_user_consume_limit.daily_consume_number = ?", req.DailyConsumeNumber) | |||
} | |||
if req.DailyConsumeNumberSwitch != "" { | |||
sess.And("self_support_for_user_consume_limit.daily_consume_number_switch = ?", req.DailyConsumeNumberSwitch) | |||
} | |||
if req.Name != "" { | |||
sess.And("user_identity.name like ?", "%"+req.Name+"%") | |||
} | |||
@@ -1316,67 +1330,34 @@ func SelfSupportForSchoolConsumeLimitList(c *gin.Context) { | |||
var list []md.SelfSupportForSchoolConsumeLimitListResp | |||
for _, v := range m { | |||
var dailyConsumeLimitSwitch, singleConsumeLimitSwitch, dailyConsumeNumberSwitch = "off", "off", "off" | |||
if v.SelfSupportForUserConsumeLimit.DailyConsumeLimitSwitch != "" { | |||
dailyConsumeLimitSwitch = v.SelfSupportForUserConsumeLimit.DailyConsumeLimitSwitch | |||
} | |||
if v.SelfSupportForUserConsumeLimit.SingleConsumeLimitSwitch != "" { | |||
singleConsumeLimitSwitch = v.SelfSupportForUserConsumeLimit.SingleConsumeLimitSwitch | |||
} | |||
if v.SelfSupportForUserConsumeLimit.DailyConsumeNumberSwitch != "" { | |||
dailyConsumeNumberSwitch = v.SelfSupportForUserConsumeLimit.DailyConsumeNumberSwitch | |||
var rosterPeriodConsumeLimitConfigList []md.RosterPeriodConsumeLimitConfig | |||
if v.SelfSupportForUserConsumeLimit.DailyMaxConsumeTimes != "" { | |||
err = json.Unmarshal([]byte(v.SelfSupportForUserConsumeLimit.DailyMaxConsumeTimes), &rosterPeriodConsumeLimitConfigList) | |||
if err != nil { | |||
e.OutErr(c, e.ERR, err.Error()) | |||
return | |||
} | |||
} | |||
list = append(list, md.SelfSupportForSchoolConsumeLimitListResp{ | |||
UserIdentityId: v.UserIdentity.Id, | |||
Name: v.UserIdentity.Name, | |||
GradeId: v.Grade.Id, | |||
GradeName: v.Grade.Name, | |||
ClassId: v.Class.Id, | |||
ClassName: v.Class.Name, | |||
Phone: v.User.Phone, | |||
DailyConsumeLimit: v.SelfSupportForUserConsumeLimit.DailyConsumeLimit, | |||
DailyConsumeLimitSwitch: dailyConsumeLimitSwitch, | |||
SingleConsumeLimit: v.SelfSupportForUserConsumeLimit.SingleConsumeLimit, | |||
SingleConsumeLimitSwitch: singleConsumeLimitSwitch, | |||
DailyConsumeNumber: v.SelfSupportForUserConsumeLimit.DailyConsumeNumber, | |||
DailyConsumeNumberSwitch: dailyConsumeNumberSwitch, | |||
UserIdentityId: v.UserIdentity.Id, | |||
Name: v.UserIdentity.Name, | |||
GradeId: v.Grade.Id, | |||
GradeName: v.Grade.Name, | |||
ClassId: v.Class.Id, | |||
ClassName: v.Class.Name, | |||
Phone: v.User.Phone, | |||
DailyConsumeLimit: v.SelfSupportForUserConsumeLimit.DailyConsumeLimit, | |||
SingleConsumeLimit: v.SelfSupportForUserConsumeLimit.SingleConsumeLimit, | |||
DailyMaxConsumeTimes: v.SelfSupportForUserConsumeLimit.DailyMaxConsumeTimes, | |||
RosterPeriodConsumeLimitConfigList: rosterPeriodConsumeLimitConfigList, | |||
}) | |||
} | |||
e.OutSuc(c, map[string]interface{}{ | |||
"list": list, | |||
"enterprise_kind_list": md.EnterpriseKindForSchool, | |||
"daily_consume_limit_switch_list": []map[string]string{ | |||
{ | |||
"name": "开启", | |||
"value": "ON", | |||
}, | |||
{ | |||
"name": "关闭", | |||
"value": "OFF", | |||
}, | |||
}, | |||
"single_consume_limit_switch_list": []map[string]string{ | |||
{ | |||
"name": "开启", | |||
"value": "ON", | |||
}, | |||
{ | |||
"name": "关闭", | |||
"value": "OFF", | |||
}, | |||
}, | |||
"daily_consume_number_switch_list": []map[string]string{ | |||
{ | |||
"name": "开启", | |||
"value": "ON", | |||
}, | |||
{ | |||
"name": "关闭", | |||
"value": "OFF", | |||
}, | |||
}, | |||
"total": count, | |||
"total": count, | |||
}, nil) | |||
return | |||
} | |||
@@ -503,47 +503,47 @@ type SelfSupportForSchoolOrdListReq struct { | |||
} | |||
type SelfSupportForSchoolConsumeLimitReq struct { | |||
UserIdentityId int `json:"user_identity_id" label:"用户身份id"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" label:"单日金额上限"` | |||
DailyConsumeLimitSwitch string `json:"daily_consume_limit_switch" label:"单日金额上限 功能开关"` | |||
SingleConsumeLimit string `json:"single_consume_limit" label:"单笔金额上限"` | |||
SingleConsumeLimitSwitch string `json:"single_consume_limit_switch" label:"单笔金额上限 功能开关"` | |||
DailyConsumeNumber string `json:"daily_consume_number" label:"单日笔数上限"` | |||
DailyConsumeNumberSwitch string `json:"daily_consume_number_switch" label:"单日笔数上限 功能开关"` | |||
UserIdentityId int `json:"user_identity_id" label:"用户身份id"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" label:"单日金额上限"` | |||
SingleConsumeLimit string `json:"single_consume_limit" label:"单笔金额上限"` | |||
DailyMaxConsumeTimes string `json:"daily_max_consume_times" label:"单日最大消费次数"` | |||
RosterPeriodConsumeLimitConfigList []RosterPeriodConsumeLimitConfig `json:"roster_period_consume_limit_config_list" label:"餐段设置"` | |||
} | |||
type RosterPeriodConsumeLimitConfig struct { | |||
PeriodDesc string `json:"period_desc" label:"餐段时间描述"` | |||
StartTime string `json:"start_time" label:"餐段开始时间,格式为:xx:xx"` | |||
EndTime string `json:"end_time" label:"餐段结束时间,格式为:xx:xx"` | |||
MaxConsumeTimes int `json:"max_consume_times" label:"餐段内最大消费次数,默认值1,最大9"` | |||
} | |||
type SelfSupportForSchoolConsumeLimitListReq struct { | |||
EnterpriseId int `json:"enterprise_id" binding:"required" label:"企业id"` | |||
EnterpriseKind int `json:"enterprise_kind" label:"企业类型"` | |||
Limit int `json:"limit" binding:"required"` | |||
Page int `json:"page" binding:"required"` | |||
Name string `json:"name" label:"姓名"` | |||
GradeId int `json:"grade_id" label:"年级id"` | |||
ClassId int `json:"class_id" label:"班级id"` | |||
Phone string `json:"phone" label:"用户电话"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" label:"单日金额上限"` | |||
DailyConsumeLimitSwitch string `json:"daily_consume_limit_switch" label:"单日金额上限 功能开关"` | |||
SingleConsumeLimit string `json:"single_consume_limit" label:"单笔金额上限"` | |||
SingleConsumeLimitSwitch string `json:"single_consume_limit_switch" label:"单笔金额上限 功能开关"` | |||
DailyConsumeNumber string `json:"daily_consume_number" label:"单日笔数上限"` | |||
DailyConsumeNumberSwitch string `json:"daily_consume_number_switch" label:"单日笔数上限 功能开关"` | |||
IsTeacher int `json:"is_teacher" label:"是否教师"` | |||
EnterpriseId int `json:"enterprise_id" binding:"required" label:"企业id"` | |||
EnterpriseKind int `json:"enterprise_kind" label:"企业类型"` | |||
Limit int `json:"limit" binding:"required"` | |||
Page int `json:"page" binding:"required"` | |||
Name string `json:"name" label:"姓名"` | |||
GradeId int `json:"grade_id" label:"年级id"` | |||
ClassId int `json:"class_id" label:"班级id"` | |||
Phone string `json:"phone" label:"用户电话"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" label:"单日金额上限"` | |||
SingleConsumeLimit string `json:"single_consume_limit" label:"单笔金额上限"` | |||
DailyMaxConsumeTimes string `json:"daily_max_consume_times" label:"单日最大消费次数"` | |||
IsTeacher int `json:"is_teacher" label:"是否教师"` | |||
} | |||
type SelfSupportForSchoolConsumeLimitListResp struct { | |||
UserIdentityId int `json:"user_identity_id" label:"用户身份id"` | |||
Name string `json:"name" label:"姓名"` | |||
GradeId int `json:"grade_id" label:"年级id"` | |||
GradeName string `json:"grade_name" label:"年级名称"` | |||
ClassId int `json:"class_id" label:"班级id"` | |||
ClassName string `json:"class_name" label:"班级名称"` | |||
Phone string `json:"phone" label:"用户电话"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" label:"单日金额上限"` | |||
DailyConsumeLimitSwitch string `json:"daily_consume_limit_switch" label:"单日金额上限 功能开关"` | |||
SingleConsumeLimit string `json:"single_consume_limit" label:"单笔金额上限"` | |||
SingleConsumeLimitSwitch string `json:"single_consume_limit_switch" label:"单笔金额上限 功能开关"` | |||
DailyConsumeNumber string `json:"daily_consume_number" label:"单日笔数上限"` | |||
DailyConsumeNumberSwitch string `json:"daily_consume_number_switch" label:"单日笔数上限 功能开关"` | |||
UserIdentityId int `json:"user_identity_id" label:"用户身份id"` | |||
Name string `json:"name" label:"姓名"` | |||
GradeId int `json:"grade_id" label:"年级id"` | |||
GradeName string `json:"grade_name" label:"年级名称"` | |||
ClassId int `json:"class_id" label:"班级id"` | |||
ClassName string `json:"class_name" label:"班级名称"` | |||
Phone string `json:"phone" label:"用户电话"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" label:"单日金额上限"` | |||
SingleConsumeLimit string `json:"single_consume_limit" label:"单笔金额上限"` | |||
DailyMaxConsumeTimes string `json:"daily_max_consume_times" label:"单日最大消费次数"` | |||
RosterPeriodConsumeLimitConfigList []RosterPeriodConsumeLimitConfig `json:"roster_period_consume_limit_config_list" label:"餐段设置"` | |||
} | |||
type SelfSupportForSchoolArrearsOrdListReq struct { | |||
@@ -718,6 +718,154 @@ func CentralKitchenForSchoolOrdList(req md.CentralKitchenForSchoolOrdListReq) (r | |||
return | |||
} | |||
func CentralKitchenForSchoolOrdStatistics(req md.CentralKitchenForSchoolOrdListReq) (personNum, orderCountByDay, orderCountByMonth, orderCountByTerm int64, consumeAmount float64, err error) { | |||
var classWithUserIdentityIdsOne []int | |||
var classWithUserIdentityIdsTwo []int | |||
classWithUserDb := db.ClassWithUserDb{} | |||
classWithUserDb.Set() | |||
if req.ClassId != 0 { | |||
classWithUsers, err2 := classWithUserDb.FindUserIdentity(req.ClassId) | |||
if err2 != nil { | |||
return 0, 0, 0, 0, 0, err2 | |||
} | |||
for _, v := range *classWithUsers { | |||
classWithUserIdentityIdsOne = append(classWithUserIdentityIdsOne, v.UserIdentityId) | |||
} | |||
} | |||
if req.GradeId != 0 { | |||
classDb := db.ClassDb{} | |||
classDb.Set(req.GradeId) | |||
classes, err3 := classDb.FindClass() | |||
if err3 != nil { | |||
return 0, 0, 0, 0, 0, err3 | |||
} | |||
var classesId []int | |||
for _, v := range *classes { | |||
classesId = append(classesId, v.Id) | |||
} | |||
classWithUsers, err4 := classWithUserDb.FindUserIdentity(classesId) | |||
if err4 != nil { | |||
return 0, 0, 0, 0, 0, err4 | |||
} | |||
for _, v := range *classWithUsers { | |||
classWithUserIdentityIdsTwo = append(classWithUserIdentityIdsTwo, v.UserIdentityId) | |||
} | |||
} | |||
sess := db.Db.Desc("central_kitchen_for_school_package_ord.id") | |||
if req.EnterpriseId != 0 { | |||
sess.And("central_kitchen_for_school_package_ord.enterprise_id =?", req.EnterpriseId) | |||
} | |||
if req.IsTeacher != 0 { | |||
if req.IsTeacher == 1 { | |||
sess.And("user_identity.identity =?", enum2.UserIdentityForCentralKitchenForTeacher) | |||
} | |||
if req.IsTeacher == 2 { | |||
sess.And("user_identity.identity !=?", enum2.UserIdentityForCentralKitchenForTeacher) | |||
} | |||
} | |||
if req.StartDate != "" { | |||
sess.And("central_kitchen_for_school_package_ord.create_at >= ?", req.StartDate) | |||
} | |||
if req.EndDate != "" { | |||
sess.And("central_kitchen_for_school_package_ord.create_at <= ?", req.EndDate) | |||
} | |||
if req.Kind != 0 { | |||
sess.And("central_kitchen_for_school_package_ord.kind = ?", req.Kind) | |||
} | |||
if req.Sate != -1 { | |||
sess.And("central_kitchen_for_school_package_ord.state = ?", req.Sate) | |||
} | |||
if req.OrdSate != -1 { | |||
sess.And("central_kitchen_for_school_package_ord.ord_state = ?", req.OrdSate) | |||
} | |||
if req.OutTradeNo != "" { | |||
sess.And("central_kitchen_for_school_package_ord.out_trade_no like ?", "%"+req.OutTradeNo+"%") | |||
} | |||
if req.Name != "" { | |||
sess.And("user_identity.name like ?", "%"+req.Name+"%") | |||
} | |||
if req.Phone != "" { | |||
sess.And("user.phone like ?", "%"+req.Phone+"%") | |||
} | |||
if req.EnterPriseKind != 0 { | |||
sess.And("enterprise.kind = ?", req.EnterPriseKind) | |||
} | |||
if len(classWithUserIdentityIdsOne) > 0 { | |||
sess.In("user_identity.id", classWithUserIdentityIdsOne) | |||
} | |||
if len(classWithUserIdentityIdsTwo) > 0 { | |||
sess.In("user_identity.id", classWithUserIdentityIdsTwo) | |||
} | |||
var sess1, sess2, sess3, sess4, sess5 = sess, sess, sess, sess, sess | |||
var m []*db.CentralKitchenForSchoolPackageOrdWithUserIdentity | |||
personNum, err = sess1. | |||
Join("LEFT", "user_identity", "central_kitchen_for_school_package_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
GroupBy("central_kitchen_for_school_package_ord.user_identity_id"). | |||
FindAndCount(&m) | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, err | |||
} | |||
orderCountByTerm, err = sess2.And("central_kitchen_for_school_package_ord.kind = ?", 1). | |||
Join("LEFT", "user_identity", "central_kitchen_for_school_package_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
FindAndCount(&m) | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, err | |||
} | |||
orderCountByMonth, err = sess3.And("central_kitchen_for_school_package_ord.kind = ?", 2). | |||
Join("LEFT", "user_identity", "central_kitchen_for_school_package_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
FindAndCount(&m) | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, err | |||
} | |||
orderCountByDay, err = sess4.And("central_kitchen_for_school_package_ord.kind = ?", 3). | |||
Join("LEFT", "user_identity", "central_kitchen_for_school_package_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
FindAndCount(&m) | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, err | |||
} | |||
var mm db.CentralKitchenForSchoolPackageOrdWithUserIdentity | |||
consumeAmount, err = sess5. | |||
Join("LEFT", "user_identity", "central_kitchen_for_school_package_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
Sum(mm, "central_kitchen_for_school_package_ord.total_price") | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, err | |||
} | |||
return | |||
} | |||
func CentralKitchenForSchoolReserveList(req md.CentralKitchenForSchoolReserveListReq) (resp []md.CentralKitchenForSchoolReserveListResp, count int64, err error) { | |||
var classWithUserIdentityIdsOne []int | |||
var classWithUserIdentityIdsTwo []int | |||
@@ -669,6 +669,160 @@ func SelfSupportForSchoolOrdList(req md.SelfSupportForSchoolOrdListReq) (resp [] | |||
return | |||
} | |||
func SelfSupportForSchoolOrdStatistics(req md.SelfSupportForSchoolOrdListReq) (personNum, count int64, consumeAmount, alreadyPayAmount, waitPayAmount, refundPayAmount float64, err error) { | |||
var classWithUserIdentityIdsOne []int | |||
var classWithUserIdentityIdsTwo []int | |||
classWithUserDb := db.ClassWithUserDb{} | |||
classWithUserDb.Set() | |||
if req.ClassId != 0 { | |||
classWithUsers, err2 := classWithUserDb.FindUserIdentity(req.ClassId) | |||
if err2 != nil { | |||
return 0, 0, 0, 0, 0, 0, err2 | |||
} | |||
for _, v := range *classWithUsers { | |||
classWithUserIdentityIdsOne = append(classWithUserIdentityIdsOne, v.UserIdentityId) | |||
} | |||
} | |||
if req.GradeId != 0 { | |||
classDb := db.ClassDb{} | |||
classDb.Set(req.GradeId) | |||
classes, err3 := classDb.FindClass() | |||
if err3 != nil { | |||
return 0, 0, 0, 0, 0, 0, err | |||
} | |||
var classesId []int | |||
for _, v := range *classes { | |||
classesId = append(classesId, v.Id) | |||
} | |||
classWithUsers, err4 := classWithUserDb.FindUserIdentity(classesId) | |||
if err4 != nil { | |||
return 0, 0, 0, 0, 0, 0, err | |||
} | |||
for _, v := range *classWithUsers { | |||
classWithUserIdentityIdsTwo = append(classWithUserIdentityIdsTwo, v.UserIdentityId) | |||
} | |||
} | |||
sess := db.Db.Desc("self_support_for_school_ord.id") | |||
if req.EnterpriseId != 0 { | |||
sess.And("self_support_for_school_ord.enterprise_id =?", req.EnterpriseId) | |||
} | |||
if req.StartDate != "" { | |||
sess.And("self_support_for_school_ord.face_time >= ?", req.StartDate) | |||
} | |||
if req.EndDate != "" { | |||
sess.And("self_support_for_school_ord.face_time <= ?", req.EndDate) | |||
} | |||
if req.OrderStatus != 0 { | |||
sess.And("self_support_for_school_ord.order_status = ?", req.OrderStatus) | |||
} | |||
if req.OutTradeNo != "" { | |||
sess.And("self_support_for_school_ord.out_order_no like ?", "%"+req.OutTradeNo+"%") | |||
} | |||
if req.EnterpriseKind != 0 { | |||
sess.And("enterprise.kind = ?", req.EnterpriseKind) | |||
} | |||
if req.IsTeacher != 0 { | |||
if req.IsTeacher == 1 { | |||
sess.And("user_identity.identity =?", enum2.UserIdentityForCentralKitchenForTeacher) | |||
} | |||
if req.IsTeacher == 2 { | |||
sess.And("user_identity.identity !=?", enum2.UserIdentityForCentralKitchenForTeacher) | |||
} | |||
} | |||
if req.Name != "" { | |||
sess.And("user_identity.name like ?", "%"+req.Name+"%") | |||
} | |||
if req.Phone != "" { | |||
sess.And("user.phone like ?", "%"+req.Phone+"%") | |||
} | |||
if len(classWithUserIdentityIdsOne) > 0 { | |||
sess.In("user_identity.id", classWithUserIdentityIdsOne) | |||
} | |||
if len(classWithUserIdentityIdsTwo) > 0 { | |||
sess.In("user_identity.id", classWithUserIdentityIdsTwo) | |||
} | |||
var sess1, sess2, sess3, sess4, sess5, sess6 = sess, sess, sess, sess, sess, sess | |||
var m []*db.SelfSupportForSchoolOrdWithUserIdentity | |||
personNum, err = sess1. | |||
Join("LEFT", "user_identity", "self_support_for_school_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
GroupBy("self_support_for_school_ord.user_identity_id"). | |||
FindAndCount(&m) | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, 0, err | |||
} | |||
count, err = sess2. | |||
Join("LEFT", "user_identity", "self_support_for_school_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
FindAndCount(&m) | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, 0, err | |||
} | |||
var mm db.SelfSupportForSchoolOrdWithUserIdentity | |||
consumeAmount, err = sess3. | |||
Join("LEFT", "user_identity", "self_support_for_school_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
Sum(mm, "self_support_for_school_ord.trade_amount") | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, 0, err | |||
} | |||
waitPayAmount, err = sess4.And("self_support_for_school_ord.order_status = ?", enum2.SelfSupportForSchoolOrdOrderStatusForWait). | |||
Join("LEFT", "user_identity", "self_support_for_school_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
Sum(mm, "self_support_for_school_ord.trade_amount") | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, 0, err | |||
} | |||
alreadyPayAmount, err = sess5.And("self_support_for_school_ord.order_status = ?", enum2.SelfSupportForSchoolOrdOrderStatusForSuccess). | |||
Join("LEFT", "user_identity", "self_support_for_school_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
Sum(mm, "self_support_for_school_ord.trade_amount") | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, 0, err | |||
} | |||
refundPayAmount, err = sess6.And("self_support_for_school_ord.order_status = ?", enum2.SelfSupportForSchoolOrdOrderStatusForSuccess). | |||
Join("LEFT", "user_identity", "self_support_for_school_ord.user_identity_id = user_identity.id"). | |||
Join("LEFT", "enterprise", "enterprise.id = user_identity.enterprise_id"). | |||
Join("LEFT", "user", "user.id = user_identity.uid"). | |||
Join("LEFT", "class_with_user", "class_with_user.user_identity_id = user_identity.id"). | |||
Join("LEFT", "class", "class_with_user.class_id = class.id"). | |||
Join("LEFT", "grade", "class.grade_id = grade.id"). | |||
Sum(mm, "self_support_for_school_ord.trade_amount") | |||
if err != nil { | |||
return 0, 0, 0, 0, 0, 0, err | |||
} | |||
return | |||
} | |||
func SelfSupportForSchoolOrdListExport(req md.SelfSupportForSchoolOrdListReq) (resp []md.SelfSupportForSchoolOrdListResp, err error) { | |||
var classWithUserIdentityIdsOne []int | |||
var classWithUserIdentityIdsTwo []int | |||
@@ -1,5 +1,7 @@ | |||
package md | |||
import "applet/app/admin/md" | |||
type CurlAesDecrypt struct { | |||
AesKey string `json:"aes_key" label:"支付宝开放平台-小程序-接口内容加密-aesKey"` | |||
Content string `json:"content" binding:"required" label:"解密内容"` | |||
@@ -151,20 +153,12 @@ type CurlAlipayPlanetEcocampusApiDebtCancel struct { | |||
MerchantCode string `json:"merchant_code" label:"商户编号"` | |||
} | |||
type CurlAlipayPlanetEcocampusApiRosterConsumeLimit struct { | |||
ConsumeLimitSyncInfo []ConsumeLimitSyncInfo `json:"consume_limit_sync_info" label:"外部订单号"` | |||
SchoolCode string `json:"school_code" label:"学校内标"` | |||
SchoolName string `json:"school_name" label:"学校名称"` | |||
} | |||
type ConsumeLimitSyncInfo struct { | |||
FaceUid string `json:"face_uid" label:"学生刷脸编号"` | |||
OutRosterCode string `json:"out_roster_code" label:"外部花名册编号"` | |||
RosterName string `json:"roster_name" label:"花名册名称"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" label:"单日金额上限"` | |||
DailyConsumeLimitSwitch string `json:"daily_consume_limit_switch" label:"单日金额上限 功能开关"` | |||
SingleConsumeLimit string `json:"single_consume_limit" label:"单笔金额上限"` | |||
SingleConsumeLimitSwitch string `json:"single_consume_limit_switch" label:"单笔金额上限 功能开关"` | |||
DailyConsumeNumber string `json:"daily_consume_number" label:"单日笔数上限"` | |||
DailyConsumeNumberSwitch string `json:"daily_consume_number_switch" label:"单日笔数上限 功能开关"` | |||
type CurlAlipayPlanetEcocampusApiRosterSingleConsumeLimitSync struct { | |||
SchoolCode string `json:"school_code" label:"学校内标"` | |||
FaceUid string `json:"face_uid" label:"学生刷脸编号"` | |||
RosterName string `json:"roster_name" label:"花名册名称"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" label:"单日金额上限"` | |||
SingleConsumeLimit string `json:"single_consume_limit" label:"单笔金额上限"` | |||
DailyMaxConsumeTimes string `json:"daily_max_consume_times" label:"单日笔数上限"` | |||
RosterPeriodConsumeLimitConfigList []md.RosterPeriodConsumeLimitConfig `json:"roster_period_consume_limit_config_list" label:"餐段设置"` | |||
} |
@@ -857,9 +857,9 @@ func CurlAlipayPlanetEcocampusApiDebtCancel(args md.CurlAlipayPlanetEcocampusApi | |||
return nil, result.Data | |||
} | |||
func CurlAlipayPlanetEcocampusApiRosterConsumeLimit(args md.CurlAlipayPlanetEcocampusApiRosterConsumeLimit) (err error, resp interface{}) { | |||
url := cfg.SmartCanteenPay + "/alipay/bPass/alipayPlanetEcocampusApiRosterConsumeLimit" | |||
utils.FilePutContents("CurlAlipayPlanetEcocampusApiRosterConsumeLimit", utils.SerializeStr(map[string]interface{}{ | |||
func CurlAlipayPlanetEcocampusApiRosterSingleConsumeLimitSync(args md.CurlAlipayPlanetEcocampusApiRosterSingleConsumeLimitSync) (err error, resp interface{}) { | |||
url := cfg.SmartCanteenPay + "/alipay/bPass/alipayPlanetEcocampusApiRosterSingleConsumeLimitSync" | |||
utils.FilePutContents("CurlAlipayPlanetEcocampusApiRosterSingleConsumeLimitSync", utils.SerializeStr(map[string]interface{}{ | |||
"args": args, | |||
})) | |||
bytes, err := utils.CurlPost(url, utils.Serialize(args), nil) | |||
@@ -871,7 +871,7 @@ func CurlAlipayPlanetEcocampusApiRosterConsumeLimit(args md.CurlAlipayPlanetEcoc | |||
Msg string `json:"msg"` | |||
Data interface{} `json:"data"` | |||
} | |||
utils.FilePutContents("CurlAlipayPlanetEcocampusApiRosterConsumeLimit", utils.SerializeStr(result)) | |||
utils.FilePutContents("CurlAlipayPlanetEcocampusApiRosterSingleConsumeLimitSync", utils.SerializeStr(result)) | |||
err = json.Unmarshal(bytes, &result) | |||
if err != nil { | |||
return | |||
@@ -1,15 +1,13 @@ | |||
package model | |||
type SelfSupportForUserConsumeLimit struct { | |||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||
EnterpriseId int `json:"enterprise_id" xorm:"not null default 0 comment('单位id') INT(11)"` | |||
UserIdentityId int `json:"user_identity_id" xorm:"not null default 0 comment('用户身份id') INT(11)"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" xorm:"not null default '' comment('单日金额上限') CHAR(50)"` | |||
DailyConsumeLimitSwitch string `json:"daily_consume_limit_switch" xorm:"not null default '' comment('单日金额上限 功能开关') CHAR(50)"` | |||
SingleConsumeLimit string `json:"single_consume_limit" xorm:"not null default '' comment('单笔金额上限') CHAR(50)"` | |||
SingleConsumeLimitSwitch string `json:"single_consume_limit_switch" xorm:"not null default '' comment('单日金额上限 功能开关') CHAR(50)"` | |||
DailyConsumeNumber string `json:"daily_consume_number" xorm:"not null default '' comment('单日笔数上限') CHAR(50)"` | |||
DailyConsumeNumberSwitch string `json:"daily_consume_number_switch" xorm:"not null default '' comment('单日笔数上限 功能开关') CHAR(50)"` | |||
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"` | |||
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"` | |||
Id int `json:"id" xorm:"not null pk autoincr INT(11)"` | |||
EnterpriseId int `json:"enterprise_id" xorm:"not null default 0 comment('单位id') INT(11)"` | |||
UserIdentityId int `json:"user_identity_id" xorm:"not null default 0 comment('用户身份id') INT(11)"` | |||
DailyConsumeLimit string `json:"daily_consume_limit" xorm:"not null default '' comment('单日金额上限,上限999') CHAR(50)"` | |||
SingleConsumeLimit string `json:"single_consume_limit" xorm:"not null default '' comment('单笔金额上限,上限99') CHAR(50)"` | |||
DailyMaxConsumeTimes string `json:"daily_max_consume_times" xorm:"not null default '' comment('单日最大消费次数,上限99(如需设置需要大于餐段次数之和,否则可能会导致餐段消费次数不足)') CHAR(50)"` | |||
RosterPeriodConsumeLimitConfigList string `json:"roster_period_consume_limit_config_list" xorm:"not null comment('餐段设置,如需设置支持2-4个餐段。餐段时间不能有重叠') TEXT"` | |||
CreateAt string `json:"create_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"` | |||
UpdateAt string `json:"update_at" xorm:"not null default 'CURRENT_TIMESTAMP' DATETIME"` | |||
} |