Sfoglia il codice sorgente

Merge branch 'master' into add_mode

add_mode
DengBiao 1 anno fa
parent
commit
a37615101c
8 ha cambiato i file con 235 aggiunte e 23 eliminazioni
  1. +25
    -17
      app/admin/hdl/enterprise_manage/hdl_self_support_for_school.go
  2. +21
    -0
      app/admin/hdl/hdl_device.go
  3. +3
    -1
      app/admin/svc/enterprise_manage/svc_central_kitchen_for_school.go
  4. +3
    -1
      app/admin/svc/enterprise_manage/svc_self_support_for_school.go
  5. +2
    -2
      app/admin/svc/svc_data_statisstics.go
  6. +26
    -0
      app/customer/hdl/hdl_demo.go
  7. +155
    -2
      app/customer/svc/svc_curl_smart_pay.go
  8. BIN
     

+ 25
- 17
app/admin/hdl/enterprise_manage/hdl_self_support_for_school.go Vedi File

@@ -916,6 +916,19 @@ func SelfSupportForSchoolImportTeacher(c *gin.Context) {
e.OutErr(c, e.ERR_NO_DATA, "未查询到对应记录")
return
}

selfSupportForSchoolInfoDb := db.SelfSupportForSchoolInfoDb{}
selfSupportForSchoolInfoDb.Set(enterpriseId)
selfSupportForSchoolInfo, err1 := selfSupportForSchoolInfoDb.GetSelfSupportForSchoolInfo()
if err1 != nil {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
}
if selfSupportForSchoolInfo == nil {
e.OutErr(c, e.ERR, "当前学校暂未完成《一脸通行入驻》")
return
}

files, _ := c.FormFile("file")
dst := "./static/upload/" + files.Filename
err = c.SaveUploadedFile(files, dst)
@@ -927,13 +940,19 @@ func SelfSupportForSchoolImportTeacher(c *gin.Context) {
xlsx, err := excelize.OpenFile(dst)
rows := xlsx.GetRows("Sheet" + "1")
for key, row := range rows {
if key > 0 && (row[0] != "" && row[1] != "") {
if key > 0 && ((row[0] != "" || row[1] != "") && row[2] != "") {
idNo := row[0]
name := row[1]
certType := enum.UserIdentityCertTypeForIdCard
if idNo == "" {
idNo = row[1]
certType = enum.UserIdentityCertTypeForStudentId
}
name := row[2]

//1、查找当前身份是否已存在
userIdentityDb := db.UserIdentityDb{}
userIdentityDb.Set(0)
isHasUserIdentity, err := userIdentityDb.UserIdentityExist(enterpriseId, idNo, enum.UserIdentityCertTypeForIdCard)
isHasUserIdentity, err := userIdentityDb.UserIdentityExist(enterpriseId, idNo, certType)
if err != nil {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
@@ -948,7 +967,7 @@ func SelfSupportForSchoolImportTeacher(c *gin.Context) {
Uid: 0,
Name: name,
IdNo: idNo,
CertType: enum.UserIdentityCertTypeForIdCard,
CertType: certType,
Kind: enum.UserIdentityKindForCommon,
Identity: enum.UserIdentityForSelfSupportForTeacher,
EnterpriseId: enterpriseId,
@@ -976,17 +995,6 @@ func SelfSupportForSchoolImportTeacher(c *gin.Context) {
return
}
if info == nil {
selfSupportForSchoolInfoDb := db.SelfSupportForSchoolInfoDb{}
selfSupportForSchoolInfoDb.Set(enterpriseId)
selfSupportForSchoolInfo, err1 := selfSupportForSchoolInfoDb.GetSelfSupportForSchoolInfo()
if err1 != nil {
e.OutErr(c, e.ERR_DB_ORM, err.Error())
return
}
if selfSupportForSchoolInfo == nil {
e.OutErr(c, e.ERR, "当前学校暂未完成《一脸通行入驻》")
return
}
info = &model.SelfSupportForUserFaceInfo{
EnterpriseId: enterpriseId,
UserIdentityId: insertAffected,
@@ -1052,7 +1060,7 @@ func ImportV2(c *gin.Context) {
}

func SelfSupportForSchoolDownloadTemplateExcel(c *gin.Context) {
e.OutSuc(c, "/template/自营学校(教师信息导入模板).xls", nil)
e.OutSuc(c, "/template/自营学校(教师信息导入模板).xlsx", nil)
return
}

@@ -1464,7 +1472,7 @@ func SelfSupportForSchoolArrearsOrdListExport(c *gin.Context) {
for _, v := range resp {
totalAmount += utils.StrToFloat64(v.TotalPrice)
mealZh := svc3.JudgeSelfSupportForMealTime(v.FaceTime)
xlsx.SetSheetRow("Sheet1", "A"+strconv.Itoa(j), &[]interface{}{v.OutTradeNo, v.Phone, v.Name, v.EnterpriseName, v.Class, v.Grade, utils.StrToFloat64(v.TotalPrice),
xlsx.SetSheetRow("Sheet1", "A"+strconv.Itoa(j), &[]interface{}{v.OutTradeNo, v.Phone, v.Name, v.EnterpriseName, v.Grade, v.Class, utils.StrToFloat64(v.TotalPrice),
v.ShopName, v.DeviceSn, v.FaceTime, v.DebtBusinessMsg, mealZh})
j++
}


+ 21
- 0
app/admin/hdl/hdl_device.go Vedi File

@@ -1,8 +1,10 @@
package hdl

import (
enum2 "applet/app/admin/enum"
"applet/app/admin/lib/validate"
"applet/app/admin/md"
svc3 "applet/app/admin/svc"
"applet/app/db"
model2 "applet/app/db/model"
"applet/app/e"
@@ -27,6 +29,25 @@ func DeviceList(c *gin.Context) {
}

sess := db.Db.Desc("device.id")
admin := svc3.GetUser(c)
if admin.IsSuperAdministrator != enum2.IsSuperAdministratorTure {
adminWithEnterpriseDb := db.AdminWithEnterpriseDb{}
adminWithEnterpriseDb.Set()
adminWithEnterprise, err1 := adminWithEnterpriseDb.FindAdminWithEnterprise(admin.AdmId)
if err1 != nil {
e.OutErr(c, e.ERR_DB_ORM, err1.Error())
return
}
var enterPriseIds []int
for _, v1 := range *adminWithEnterprise {
enterPriseIds = append(enterPriseIds, v1.EnterpriseId)
}
if len(enterPriseIds) == 0 {
return
}
sess.In("device.enterprise_id", enterPriseIds)
}

if req.Name != "" {
sess.And("device.name like ?", "%"+req.Name+"%")
}


+ 3
- 1
app/admin/svc/enterprise_manage/svc_central_kitchen_for_school.go Vedi File

@@ -371,7 +371,9 @@ func CentralKitchenForSchoolStudentList(req md.CentralKitchenForSchoolStudentLis
classWithUserIdentityIdsTwo = append(classWithUserIdentityIdsTwo, v.UserIdentityId)
}
}
sess := db.Db.Where("user_identity.enterprise_id =?", req.EnterpriseId).And("identity =?", enum2.UserIdentityForCentralKitchenForStudent)
sess := db.Db.Where("user_identity.enterprise_id =?", req.EnterpriseId).
And("identity =?", enum2.UserIdentityForCentralKitchenForStudent).
And("state =?", enum2.UserIdentityStateForNormal)
if req.Name != "" {
sess.And("user_identity.name like ?", "%"+req.Name+"%")
}


+ 3
- 1
app/admin/svc/enterprise_manage/svc_self_support_for_school.go Vedi File

@@ -272,7 +272,9 @@ func SelfSupportForSchoolStudentList(req md.SelfSupportForSchoolStudentListReq)
classWithUserIdentityIdsTwo = append(classWithUserIdentityIdsTwo, v.UserIdentityId)
}
}
sess := db.Db.Where("user_identity.enterprise_id =?", req.EnterpriseId).And("identity =?", enum2.UserIdentityForSelfSupportForStudent)
sess := db.Db.Where("user_identity.enterprise_id =?", req.EnterpriseId).
And("identity =?", enum2.UserIdentityForSelfSupportForStudent).
And("state =?", enum2.UserIdentityStateForNormal)
if req.Name != "" {
sess.And("user_identity.name like ?", "%"+req.Name+"%")
}


+ 2
- 2
app/admin/svc/svc_data_statisstics.go Vedi File

@@ -539,7 +539,7 @@ func SelfSupportForSchoolDataStatisticsExport(req md.SelfSupportForSchoolDataSta

//查询出所有的设备
var deviceList []*model.Device
if req.EnterpriseId != 0 {
if req.EnterpriseId == 0 {
err := db.Db.Where("enterprise_id != 0").Find(&deviceList)
if err != nil {
logx.Error(err)
@@ -576,7 +576,7 @@ func SelfSupportForSchoolDataStatisticsExport(req md.SelfSupportForSchoolDataSta
for _, v := range deviceList {
deviceListMapping[v.DeviceSn] = *v
var m []*db.SelfSupportForSchoolOrdWithUserIdentityV2
sess := db.Db.Where("device_sn = ?", v.DeviceSn).Desc("self_support_for_school_ord.id")
sess := db.Db.Where("device_sn = ?", v.DeviceSn).And("enterprise_id =?", req.EnterpriseId).Desc("self_support_for_school_ord.id")
if req.EnterpriseId != 0 {
sess.And("self_support_for_school_ord.enterprise_id =?", req.EnterpriseId)
}


+ 26
- 0
app/customer/hdl/hdl_demo.go Vedi File

@@ -6,6 +6,7 @@ import (
"applet/app/customer/md"
"applet/app/customer/svc"
"applet/app/db"
"applet/app/db/model"
"applet/app/e"
"applet/app/enum"
svc3 "applet/app/svc"
@@ -104,6 +105,31 @@ func WxPay(c *gin.Context) {
}

func Demo(c *gin.Context) {
sysCfgDb := db.SysCfgDb{}
sysCfgDb.Set()
sysCfg := sysCfgDb.SysCfgFindWithDb(enum.OpenAppletAppid, enum.OpenAppletAppPrivateKey, enum.OpenAppletPublicKey)
err, info := svc.CurlEducateSceneTokenQueryV2(md.CurlEducateSceneTokenReq{
Config: struct {
AliAppId string `json:"ali_app_id" label:"支付宝开放平台-小程序-appid"`
AliPrivateKey string `json:"ali_private_key" label:"支付宝开放平台-小程序-应用私钥"`
AliPublicKey string `json:"ali_public_key" label:"支付宝开放平台-小程序-支付宝公钥"`
}{
AliAppId: sysCfg[enum.OpenAppletAppid],
AliPrivateKey: sysCfg[enum.OpenAppletAppPrivateKey],
AliPublicKey: sysCfg[enum.OpenAppletPublicKey],
},
CertType: "A",
CertNo: "440881201010205523",
StudentName: "龙佩滢",
OutUserId: "1001",
SchoolStdCode: "12440403MB2D752515",
}, &model.UserIdentity{}, "", "")
if err != nil {
e.OutErr(c, e.ERR, err.Error())
return
}
e.OutSuc(c, info, nil)
return
ordNo := c.DefaultQuery("ord_no", "")
svc2.JudgePackageOrdOrdState(ordNo)
e.OutSuc(c, nil, nil)


+ 155
- 2
app/customer/svc/svc_curl_smart_pay.go Vedi File

@@ -194,8 +194,8 @@ func CurlEducateSceneTokenQuery(args md.CurlEducateSceneTokenReq, userIdentity *
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
utils.FilePutContents("CurlEducateSceneTokenCreate", utils.SerializeStr(result))
err1 = json.Unmarshal(bytes, &result)
utils.FilePutContents("CurlEducateSceneTokenCreate", utils.SerializeStr(result))
if err1 != nil {
return
}
@@ -232,8 +232,158 @@ func CurlEducateSceneTokenQuery(args md.CurlEducateSceneTokenReq, userIdentity *
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
err = json.Unmarshal(bytes, &result1)
utils.FilePutContents("CurlEducateSceneTokenQuery", utils.SerializeStr(result1))
if err != nil {
return
}
if result1.Code != 0 {
if result1.Msg != "" {
err = errors.New(result1.Msg)
return
}
err = errors.New("请求智慧餐厅支付 异常/失败")
return
}
// 更新/新增 `self_support_for_user_facel_info`
selfSupportForUserFaceInfoDb := db.SelfSupportForUserFaceInfoDb{}
selfSupportForUserFaceInfoDb.Set(userIdentity.Id)
info, err := selfSupportForUserFaceInfoDb.GetSelfSupportForUserFaceInfo()
if err != nil {
return
}

now := time.Now().Format("2006-01-02 15:04:05")
var res map[string]string
utils.Unserialize([]byte(utils.SerializeStr(result1.Data)), &res)

if info == nil {
var concentrateSchoolFacePassStatus = 1
if res["school_face_pass_status"] == "OPEN" {
concentrateSchoolFacePassStatus = 3
}
info = &model.SelfSupportForUserFaceInfo{
EnterpriseId: userIdentity.EnterpriseId,
UserIdentityId: userIdentity.Id,
CollectFaceType: 1,
SchoolCode: res["school_code"],
SchoolStdCode: res["school_std_code"],
ParentUserId: res["parent_user_id"],
ParentLogonId: res["parent_logon_id"],
UserId: res["user_id"],
SchoolFacePassStatus: res["school_face_pass_status"],
SchoolFacePaymentStatus: res["school_face_payment_status"],
ConcentrateSchoolFacePassStatus: concentrateSchoolFacePassStatus,
CreateAt: now,
UpdateAt: now,
}
_, err2 := selfSupportForUserFaceInfoDb.SelfSupportForUserFaceInfoInsert(info)
if err2 != nil {
return err2, nil
}
} else {
var concentrateSchoolFacePassStatus = info.ConcentrateSchoolFacePassStatus
if res["school_face_pass_status"] == "OPEN" {
concentrateSchoolFacePassStatus = 3
}
info.ParentUserId = res["parent_user_id"]
info.ParentLogonId = res["parent_logon_id"]
info.UserId = res["user_id"]
info.SchoolFacePassStatus = res["school_face_pass_status"]
info.SchoolFacePaymentStatus = res["school_face_payment_status"]
info.ConcentrateSchoolFacePassStatus = concentrateSchoolFacePassStatus
info.UpdateAt = now
_, err2 := selfSupportForUserFaceInfoDb.SelfSupportForUserFaceInfoUpdate(info, "parent_user_id", "parent_logon_id", "user_id", "school_face_pass_status", "school_face_payment_status", "concentrate_school_face_pass_status", "update_at")
if err2 != nil {
return err2, nil
}
}

//TODO:: school_face_pass_status && school_face_payment_status 都为 open 状态,则 签约信息同步“alipay.planet.ecocampus.api.roster.signUpInfo” 至 行业云
CurlAlipayPlanetEcocampusApiRosterSignUpInfo(md.CurlAlipayPlanetEcocampusApiRosterSignUpInfoReq{
FaceUid: info.UserId,
ParentUid: info.ParentUserId,
ParentLogonId: info.ParentLogonId,
RosterName: args.StudentName,
OutRosterCode: args.OutUserId,
SchoolCode: info.SchoolCode,
SchoolName: schoolName,
ScanFacePayStatus: "ON",
FaceOpenStatus: "ON",
})
return nil, result1.Data

}

func CurlEducateSceneTokenQueryV2(args md.CurlEducateSceneTokenReq, userIdentity *model.UserIdentity, userToken, schoolName string) (err error, resp interface{}) {
utils.FilePutContents("CurlEducateSceneTokenQuery", utils.SerializeStr(map[string]interface{}{
"args": args,
}))

if userToken == "" {
//1、TODO::生成用户信息token(使用 alipay.commerce.educate.scene.token.create 接口生成用户信息token)
url := cfg.SmartCanteenPay + "/alipay/faceCollection/educateSceneTokenCreate"
bytes, err1 := utils.CurlPost(url, utils.Serialize(map[string]interface{}{
"config": map[string]string{
"ali_app_id": args.Config.AliAppId,
"ali_private_key": args.Config.AliPrivateKey,
"ali_public_key": args.Config.AliPublicKey,
},
"cert_no": args.CertNo,
"school_std_code": args.SchoolStdCode,
"student_name": args.StudentName,
"out_user_id": args.OutUserId,
"cert_type": args.CertType,
"sub_code": "SCHOOL_FACE_PASS_QUERY",
}), nil)
if err1 != nil {
return
}
var result struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
err1 = json.Unmarshal(bytes, &result)
utils.FilePutContents("CurlEducateSceneTokenCreate", utils.SerializeStr(result))
if err1 != nil {
return
}
if result.Code != 0 {
if result.Msg != "" {
err1 = errors.New(result.Msg)
return
}
err1 = errors.New("请求智慧餐厅支付 异常/失败")
return
}
resultMap, ok := result.Data.(map[string]interface{})
if !ok {
err1 = errors.New("获取 user_token 失败")
return
}
if resultMap["code"].(string) != "10000" {
return nil, resultMap
}
userToken = resultMap["token"].(string)
}

//2、TODO::查询用户一脸通行开通状态:根据获取到的用户信息token,使用 alipay.commerce.educate.scene.token.query 接口查询用户人脸采集状态
url := cfg.SmartCanteenPay + "/alipay/faceCollection/educateSceneTokenQuery"
bytes, err := utils.CurlPost(url, utils.Serialize(map[string]string{
"user_token": userToken,
}), nil)
if err != nil {
return
}

var result1 struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
err = json.Unmarshal(bytes, &result1)
utils.FilePutContents("CurlEducateSceneTokenQuery", utils.SerializeStr(result1))
if err != nil {
return
}
@@ -245,6 +395,9 @@ func CurlEducateSceneTokenQuery(args md.CurlEducateSceneTokenReq, userIdentity *
err = errors.New("请求智慧餐厅支付 异常/失败")
return
}

return nil, result1.Data

// 更新/新增 `self_support_for_user_facel_info`
selfSupportForUserFaceInfoDb := db.SelfSupportForUserFaceInfoDb{}
selfSupportForUserFaceInfoDb.Set(userIdentity.Id)
@@ -433,11 +586,11 @@ func CurlEducateSceneTokenCreateForApplet(args md.CurlEducateSceneTokenReq) (err
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
utils.FilePutContents("CurlEducateSceneTokenCreateForApplet", utils.SerializeStr(result))
err = json.Unmarshal(bytes, &result)
if err != nil {
return
}
utils.FilePutContents("CurlEducateSceneTokenCreateForApplet", utils.SerializeStr(result))
if result.Code != 0 {
if result.Msg != "" {
err = errors.New(result.Msg)


BIN
Vedi File


Caricamento…
Annulla
Salva