You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

160 lines
6.1 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package service
import (
"cu-helper/cus-eng-con-sys/config"
"cu-helper/cus-eng-con-sys/cryptokit"
"cu-helper/cus-eng-con-sys/model"
"cu-helper/cus-eng-con-sys/util"
"strings"
"github.com/go-resty/resty/v2"
"github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/service/logkit"
"github.com/spf13/cast"
"github.com/tidwall/gjson"
)
// ReqAccConfirm 验收确认请求
/*
验收确认分3个步骤进行
1、判断五达标
2、更新ACC信息
3、提交验收确认
*/
// ReqAccConfirm parenProcInsId=processInstanceId
func ReqAccConfirm(ctx *model.Ctx) {
//判断五达标是否有已废弃
parenProcInsId := ctx.Data.Get("processInstanceId").String()
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewSearchAccSendList(parenProcInsId)
form := f.GenReqParam()
client := ctx.RestyClient
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/acceptanceComfirmController/searchAccSendList")
if err != nil {
panic(exception.New(err.Error()))
}
data := strings.Trim(resp.String(), `"`)
decrypt := cryptokit.Decrypt(data)
ok := gjson.Get(decrypt, "data").Array()
// ===================== 核心逻辑开始 =====================
// 只要有一个状态 不是空 也不是 ABANDON → 直接退出整个函数,不往下走
hasInvalid := false
for _, v := range ok {
deliveryStatus := gjson.Get(v.String(), "deliveryStatus").String()
if deliveryStatus != "" && deliveryStatus != "ABANDON" {
hasInvalid = true
break
}
}
// 有无效状态 → 直接结束函数,后面两个方法不调用
if hasInvalid {
logkit.Info("已分发五达标,无需再分发五达标")
return
}
// ===================== 核心逻辑结束 =====================
// ↓↓↓↓ 只有 全空 / 全ABANDON / 混合ABANDON 才会走到这里 ↓↓↓↓
//更新ACC信息
actOrgName, accInvestment := updateAccInfo(ctx)
processDefinitionName := ctx.Data.Get("processDefinitionName").String()
switch processDefinitionName {
case config.ProcessNameXQXJ:
//如果是小区新建,一定要进行五达标
saveProAndStart(ctx, actOrgName)
case config.ProcessNameKR:
if cast.ToInt64(accInvestment) >= 3000 {
//大于等于3000才进行五达标
logkit.Info("accInvestment=" + accInvestment + " 需要进行五达标!")
saveProAndStart(ctx, actOrgName)
}
}
}
func updateAccInfo(ctx *model.Ctx) (string, string) {
processDefinitionName := ctx.Data.Get("processDefinitionName").String()
processDefinitionKey := ctx.Data.Get("processDefinitionKey").String()
remandId := getRemandId(ctx)
html1 := toAcceptanceConfirm(ctx, remandId)
token := getToken(ctx.RestyClient)
html2 := toRemandShowCommon(ctx.RestyClient, remandId)
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewUpdateAccInfo(token, remandId, html1, html2, processDefinitionName, processDefinitionKey)
form := f.GenReqParam()
client := ctx.RestyClient
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/acceptanceController/udpateAccInfo.action")
if err != nil {
panic(exception.New(err.Error()))
}
data := strings.Trim(resp.String(), `"`)
logkit.Info("updateAccInfo:" + cryptokit.Decrypt(data))
return util.HTMLContentFindFirst(html2, "actOrgName"), cryptokit.Decrypt(f.AccInvestment)
}
func saveProAndStart(ctx *model.Ctx, actOrgName string) {
parenProcInsId := ctx.Data.Get("processInstanceId").String()
client := ctx.RestyClient
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewSaveProAndStart(parenProcInsId, actOrgName)
form := f.GenReqParam()
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/acceptanceComfirmController/saveProAndStart")
if err != nil {
panic(exception.New(err.Error()))
}
data := strings.Trim(resp.String(), `"`)
logkit.Info("saveProAndStart:" + cryptokit.Decrypt(data))
}
func getToken(client *resty.Client) string {
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewGetToken()
form := f.GenReqParam()
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/commonController/getToken?T=" + form["timestamp"])
if err != nil {
panic(exception.New(err.Error()))
}
data := strings.Trim(resp.String(), `"`)
decrypt := cryptokit.Decrypt(data)
token := gjson.Get(decrypt, "token").String()
logkit.Debug("拿到了Token:" + token)
return token
}
// businessKey=remandId,taskId=id
func toAcceptanceConfirm(ctx *model.Ctx, businessKey string) string {
processInstId := ctx.Data.Get("processInstanceId").String()
taskId := ctx.Data.Get("id").String()
taskDefinitionKey := ctx.Data.Get("taskdefinitionKey").String()
client := ctx.RestyClient
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
query := model.NewCommonFormGetHtml(businessKey, processInstId, taskDefinitionKey, taskId)
resp, err := client.R().
SetHeaders(header).Get(config.UrlPrefix + "/zjgd/frm/acceptanceComfirmController/toAcceptanceComfirm?businessKey=" + query.BusinessKey + "&processInstanceId=" + query.ProcessInstanceId + "&taskId=" + query.TaskId + "&startLink=" + query.StartLink + "&endLink=" + query.EndLink + "&taskflag=" + query.TaskFlag + "&ranstr=" + query.Ranstr + "&timestamp=" + query.Timestamp + "&_=" + query.TimestampPro)
if err != nil {
panic(exception.New(err.Error()))
}
return resp.String()
}
func toRemandShowCommon(client *resty.Client, remandId string) string {
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
query := model.NewToRemandShowCommon(remandId)
resp, err := client.R().
SetHeaders(header).Get(config.UrlPrefix + "/zjgd/frm/remandInfoController/toRemandShowCommon?remandId=" + query.RemandId + "&ranstr=" + query.Ranstr + "&timestamp=" + query.Timestamp + "&_=" + query.TimestampPro)
if err != nil {
panic(exception.New(err.Error()))
}
return resp.String()
}