123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- package order
- import (
- "app.yhyue.com/moapp/jybase/common"
- "app.yhyue.com/moapp/jybase/date"
- "context"
- "errors"
- "fmt"
- "github.com/gogf/gf/v2/database/gdb"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/frame/g"
- "github.com/gogf/gf/v2/util/gconv"
- "jyOrderManager/internal/consts"
- "jyOrderManager/internal/jyutil"
- "jyOrderManager/internal/logic/product"
- "jyOrderManager/internal/model"
- "log"
- "strings"
- "time"
- )
- // OperateOrderRedPunch 红冲
- func OperateOrderRedPunch(ctx context.Context, params model.OrderRedPunchParams) error {
- orderData, err := g.DB().GetOne(ctx, fmt.Sprintf(`SELECT user_phone,buy_subject,company_name,signing_subject,procedures_money,order_money,commission+(select IFNULL(sum(commission),0) as return_money from moneyCorrection where orderCode= '%s') as commission,pay_money+(select IFNULL(sum(payMoney),0) as return_money from moneyCorrection where orderCode='%s') as pay_money FROM dataexport_order WHERE order_code = '%s'`, params.OrderCode, params.OrderCode, params.OrderCode))
- if err != nil || orderData.IsEmpty() {
- return errors.New("未找到订单")
- }
- isSubject := true
- updateData := map[string]interface{}{}
- var (
- insertDataArr []map[string]interface{}
- commission, proceduresMoney int
- )
- for _, param := range params.RedPunch {
- insertData := map[string]interface{}{
- "orderCode": params.OrderCode,
- "correctionReason": param.CorrectionReason,
- "createTime": date.NowFormat(date.Date_Full_Layout),
- "createPerson": jyutil.GetUserMsgFromCtx(ctx).EntUserName,
- "redType": params.RedType,
- "detail_id": param.Id,
- "activity_code": param.ActiveCode,
- }
- if strings.Contains(params.RedType, "签约主体") {
- if param.PayMoney == 0 {
- param.PayMoney = common.IntAll(orderData.Map()["pay_money"])
- }
- if param.Commission == 0 {
- param.Commission = common.IntAll(orderData.Map()["commission"])
- }
- //if param.ProceduresMoney == 0 {
- // param.ProceduresMoney = common.IntAll(orderData.Map()["procedures_money"])
- //}
- oldInsertData := map[string]interface{}{
- "payMoney": param.PayMoney * -1,
- "commission": param.Commission * -1,
- //"orderMoney": param.OrderMoney * -1,
- "orderCode": params.OrderCode,
- "correctionReason": param.CorrectionReason,
- "createTime": date.NowFormat(date.Date_Full_Layout),
- "createPerson": jyutil.GetUserMsgFromCtx(ctx).EntUserName,
- "proceduresMoney": param.ProceduresMoney * -1,
- "redType": params.RedType,
- }
- newInsertData := map[string]interface{}{
- "payMoney": param.PayMoney,
- "commission": param.Commission,
- //"orderMoney": param.OrderMoney,
- "proceduresMoney": param.ProceduresMoney,
- "orderCode": params.OrderCode,
- "correctionReason": param.CorrectionReason,
- "createTime": date.NowFormat(date.Date_Full_Layout),
- "createPerson": jyutil.GetUserMsgFromCtx(ctx).EntUserName,
- "redType": params.RedType,
- }
- var signingSubject string
- if param.SigningSubject == "北京剑鱼信息技术有限公司" {
- updateData["signing_subject"] = "h01"
- signingSubject = "北京拓普丰联信息科技股份有限公司"
- } else {
- updateData["signing_subject"] = "h02"
- signingSubject = "北京剑鱼信息技术有限公司"
- }
- oldInsertData["signingSubject"] = signingSubject
- newInsertData["newSigningSubject"] = param.SigningSubject
- insertDataArr = append(insertDataArr, oldInsertData, newInsertData)
- } else {
- commission += param.Commission
- proceduresMoney += param.ProceduresMoney
- isSubject = false
- newEnt := common.If(orderData.Map()["signing_subject"] == "h01", "北京剑鱼信息技术有限公司", "北京拓普丰联信息科技股份有限公司").(string)
- newEntData, err := g.DB().GetOne(ctx, fmt.Sprintf(`SELECT newSigningSubject FROM moneyCorrection WHERE orderCode = '%s' AND redType = '签约主体红冲' AND newSigningSubject is not null ORDER BY createTime DESC LIMIT 0,1 `, params.OrderCode))
- if err != nil && !newEntData.IsEmpty() {
- newEnt = common.InterfaceToStr(newEntData.Map()["newSigningSubject"])
- }
- var pMoney int
- if param.Id > 0 {
- activeData, _ := g.DB().GetOne(ctx, `SELECT final_price+(select IFNULL(sum(payMoney),0) as return_money from moneyCorrection where orderCode=? and detail_id = ?) as final_price FROM jy_order_detail WHERE id = ? and status =1`, params.OrderCode, param.Id, param.Id)
- if !activeData.IsEmpty() {
- pMoney = gconv.Int(activeData.Map()["final_price"])
- }
- insertData["payMoney"] = param.PayMoney - pMoney
- } else if param.ActiveCode != "" && param.PayMoney > 0 {
- activeData, _ := g.DB().GetOne(ctx, `SELECT sum(final_price)+(select IFNULL(sum(payMoney),0) as return_money from moneyCorrection where orderCode=? and activity_code = ?) as final_price FROM jy_order_detail WHERE activity_code = ? and order_code = ? and status =1`, params.OrderCode, param.ActiveCode, param.ActiveCode, params.OrderCode)
- if !activeData.IsEmpty() {
- pMoney = gconv.Int(activeData.Map()["final_price"])
- }
- insertData["payMoney"] = param.PayMoney - pMoney
- } else if param.Commission > 0 {
- insertData["commission"] = param.Commission - common.IntAll(orderData.Map()["commission"])
- }
- //}
- insertData["signingSubject"] = newEnt
- //insertData["orderMoney"] = param.OrderMoney - common.IntAll(orderData.Map()["order_money"])
- commission += param.Commission
- //proceduresMoney += param.ProceduresMoney
- //insertData["proceduresMoney"] = param.ProceduresMoney - common.IntAll(orderData.Map()["procedures_money"])
- insertDataArr = append(insertDataArr, insertData)
- }
- }
- if !isSubject {
- g.DB().Update(ctx, "contract", map[string]interface{}{"contract_money": params.PayMoney}, map[string]interface{}{"order_code": params.OrderCode})
- returnData, _ := g.DB().GetOne(ctx, fmt.Sprintf(`select IFNULL(sum(return_money),0) as return_money from return_money_record where order_code='%s' and state=1`, params.OrderCode))
- refundData, _ := g.DB().GetOne(ctx, fmt.Sprintf(`select IFNULL(sum(refund_money),0) as refund_money from refund_record where order_code='%s'`, params.OrderCode))
- return_money := common.IntAll(returnData.Map()["return_money"])
- refund_money := common.IntAll(refundData.Map()["refund_money"])
- if params.PayMoney-commission-proceduresMoney <= return_money-refund_money {
- updateData["return_status"] = 1
- } else if params.PayMoney-commission-proceduresMoney > return_money-refund_money && return_money-refund_money > 0 {
- updateData["return_status"] = 2
- }
- if return_money == refund_money && return_money > 0 {
- updateData["refund_status"] = 1
- } else if return_money > refund_money && refund_money > 0 {
- updateData["refund_status"] = 2
- }
- if refund_money >= params.PayMoney {
- updateData["refund_status"] = 1
- }
- if return_money >= params.PayMoney {
- updateData["return_status"] = 1
- productDetail, _ := g.DB().Ctx(ctx).Query(ctx, fmt.Sprintf(`SELECT * FROM jy_order_detail WHERE order_code ='%s' and returned_open =1 and is_service_open = 0 and status =1`, params.OrderCode))
- if !productDetail.IsEmpty() {
- uData, entId, userPositionId, err := jyutil.GetCreateUserData(gconv.String(orderData.Map()["user_phone"]), gconv.String(orderData.Map()["company_name"]), gconv.Int(orderData.Map()["buy_subject"]) == 2)
- if err != nil {
- return errors.New("用户创建失败")
- }
- //全额回款开通权益
- if !consts.PhoneRegex.MatchString(gconv.String(orderData["user_phone"])) {
- return errors.New("手机号格式异常")
- }
- if err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
- // 产品服务开通
- for _, m := range productDetail.List() {
- if !jyutil.IsServiceOpen(m) {
- continue
- }
- //参数注入
- m["userMap"] = map[string]interface{}{
- "userData": uData, "entId": entId, "userPositionId": userPositionId,
- }
- m["phone"] = orderData.Map()["user_phone"]
- m["order_code"] = params.OrderCode
- m["reqCompanyName"] = orderData.Map()["company_name"]
- m["amount"] = m["final_price"]
- m["reqSubject"] = orderData.Map()["buy_subject"]
- m["linked_orderId"] = m["linked_detail_id"]
- productCode := gconv.String(m["product_code"])
- pFunc, err := product.JyProFunc.GetProductInitFuncByCode(productCode)
- if err != nil {
- return err
- }
- pObj, err := pFunc(m)
- if err != nil {
- return gerror.Wrap(err, fmt.Sprintf("获取%s商品异常", productCode))
- }
- if err := pObj.OpenService(ctx, time.Now()); err != nil {
- return err
- }
- }
- if orderUserId := gconv.String(orderData.Map()["user_id"]); orderUserId == "" || orderUserId != gconv.String(uData["userId"]) {
- log.Printf("同步更新订单用户身份:orderUserId:%s,userId:%s,entId:%d\n", orderUserId, uData["userId"], entId)
- upData := g.Map{
- "user_id": uData["userId"],
- }
- if entId > 0 { //企业服务
- upData["ent_id"] = entId
- if personPhone := gconv.String(orderData.Map()["personPhone"]); personPhone != "" {
- jyutil.EndAddUser(ctx, entId, gconv.String(orderData.Map()["user_phone"]), personPhone, gconv.String(orderData.Map()["personName"]))
- }
- }
- //更新订单
- _, err = g.DB().Update(ctx, consts.OrderListTableName, upData, "order_code=?", params.OrderCode)
- if err != nil {
- return err
- }
- }
- return nil
- }); err != nil {
- log.Println(err)
- return err
- }
- }
- }
- //红冲金额新增销售业绩
- if err := OrderMoneyMakeRed(ctx, params.OrderCode, int64(params.PayMoney-proceduresMoney-commission)); err != nil {
- log.Printf("业绩红冲 %s 业绩变更异常 %v\n", params.OrderCode, err)
- return err
- }
- }
- g.DB().Update(ctx, "dataexport_order", updateData, map[string]interface{}{"order_code": params.OrderCode})
- for _, m := range insertDataArr {
- g.DB().Insert(ctx, "moneyCorrection", m)
- }
- return nil
- }
|