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.

181 lines
7.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"
"strings"
"github.com/mizuki1412/go-core-kit/class/exception"
"github.com/mizuki1412/go-core-kit/service/configkit"
"github.com/mizuki1412/go-core-kit/service/logkit"
"github.com/tidwall/gjson"
)
// ReqDesignScheme 方案确认请求
/*
验收确认分五个步骤进行
1、通过项目编号找到projectId
2、查项目剩余投资是否符合
3、绑定需求至项目
4、如果是政企零星还要此步骤因为政企零星直接就工程开工了需要从goDesignSchemeConfirm获取html信息再modifyDesignSchemeLogInfo才能提交不然会报错
5、提交方案确认
*/
func ReqDesignScheme(ctx *model.Ctx) {
projId := getProjectId(ctx)
touzi := checkProjInvest(ctx, projId)
modifyProject(ctx, projId, touzi)
if ctx.Data.Get("processDefinitionKey").String() == config.ProcessLX {
modDesignLogInfo(ctx)
}
passflow(ctx)
}
func getProjectId(ctx *model.Ctx) string {
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewSearchProjectList(getDefaultProjCode(ctx))
form := f.GenReqParam()
client := ctx.RestyClient
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/projectServiceResultController/searchProjectList")
if err != nil {
panic(exception.New(err.Error()))
}
dataOri := strings.Trim(resp.String(), `"`)
data := gjson.Get(cryptokit.Decrypt(dataOri), "data").Array()
if len(data) == 0 {
panic(exception.New("无该项目信息"))
}
return data[0].Get("projectId").String()
}
func getDefaultProjCode(ctx *model.Ctx) string {
processDefinitionName := ctx.Data.Get("processDefinitionName").String()
switch processDefinitionName {
case "公众客户宽带扩容":
if code := configkit.GetString(config.EngDefaultProjKRCode, ""); code != "" {
return code
}
panic(exception.New("公众客户宽带扩容项目编号未设置"))
case "公众客户宽带新建市场":
if code := configkit.GetString(config.EngDefaultProjXQCode, ""); code != "" {
return code
}
panic(exception.New("公众客户宽带新建市场(小区新建)项目编号未设置"))
case "政企客户接入(本地、省际跨域)":
if code := configkit.GetString(config.EngDefaultProjLXCode, ""); code != "" {
return code
}
panic(exception.New("政企客户接入(本地、省际跨域)(零星)项目编号未设置"))
case "政企客户覆盖":
if code := configkit.GetString(config.EngDefaultProjLYCode, ""); code != "" {
return code
}
panic(exception.New("政企客户覆盖(楼宇新建)项目编号未设置"))
default:
panic(exception.New("未设置相应专业默认项目编码,无法关联项目!"))
}
}
func checkProjInvest(ctx *model.Ctx, projId string) string {
remandId := getRemandId(ctx)
processDefKey := ctx.Data.Get("processDefinitionKey").String()
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewGetProjInvest(projId, remandId, processDefKey, getDefaultProjCode(ctx))
form := f.GenReqParam()
client := ctx.RestyClient
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/projectServiceResultController/getProjectSurplseInvestmentByProjectId.action")
if err != nil {
panic(exception.New(err.Error()))
}
dataOri := strings.Trim(resp.String(), `"`)
data := cryptokit.Decrypt(dataOri)
if !gjson.Get(data, "success").Bool() {
panic(exception.New("需求投资可能大于项目剩余金额!"))
}
touzi := gjson.Get(data, "attributes.remandTouzi").String()
logkit.Info("checkProjInvest:" + data)
return touzi
}
func modifyProject(ctx *model.Ctx, projId, touzi string) {
remandId := getRemandId(ctx)
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewModifyRemandProj(remandId, projId, touzi)
form := f.GenReqParam()
client := ctx.RestyClient
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/projectServiceResultController/modifyRemandProjectIdByRemandId.action")
if err != nil {
panic(exception.New(err.Error()))
}
dataOri := strings.Trim(resp.String(), `"`)
data := cryptokit.Decrypt(dataOri)
if !gjson.Get(data, "success").Bool() {
panic(exception.New("项目关联失败!"))
}
logkit.Info("modifyProject:" + data)
}
func modDesignLogInfo(ctx *model.Ctx) {
token := getToken(ctx.RestyClient)
remandId := getRemandId(ctx)
html := goDesignSchemeConfirm(ctx, remandId)
stepCode := cryptokit.Encrypt("JSTZ") //todo 零星需要这个 其他还未知
processDefinitionKey := cryptokit.Encrypt(ctx.Data.Get("processDefinitionKey").String())
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewModifyDesignSchemeLogInfo(token, html)
form := f.GenReqParam()
client := ctx.RestyClient
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/designSchemeController/modifyDesignSchemeLogInfo?stepCode=" + stepCode + "&processDefinitionKey=" + processDefinitionKey)
if err != nil {
panic(exception.New(err.Error()))
}
dataOri := strings.Trim(resp.String(), `"`)
data := cryptokit.Decrypt(dataOri)
logkit.Info("modDesignLogInfo:" + data)
}
func passflow(ctx *model.Ctx) {
processInsId := ctx.Data.Get("processInstanceId").String()
taskId := ctx.Data.Get("id").String()
processDefKey := ctx.Data.Get("processDefinitionKey").String()
h := model.NewHeader("application/x-www-form-urlencoded; charset=UTF-8")
header := h.GenReqParam()
f := model.NewDesignSchemePassflow(processInsId, taskId, processDefKey)
form := f.GenReqParam()
client := ctx.RestyClient
resp, err := client.R().
SetHeaders(header).SetFormData(form).Post(config.UrlPrefix + "/zjgd/frm/designSchemeController/passFlow.action")
if err != nil {
panic(exception.New(err.Error()))
}
dataOri := strings.Trim(resp.String(), `"`)
data := cryptokit.Decrypt(dataOri)
logkit.Info("degisnSchemePassflow:" + data)
}
// businessKey=remandId,taskId=id
func goDesignSchemeConfirm(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/designSchemeController/goDesignSchemeConfirm?businessKey=" + query.BusinessKey + "&processInstanceId=" + query.ProcessInstanceId + "&taskDefinitionKey=" + query.TaskDefinitionKey + "&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()
}