Browse Source

权益合同主客观合并

hsun 2 years ago
parent
commit
71bf339893
2 changed files with 88 additions and 1 deletions
  1. 77 1
      services/contract/contract.go
  2. 11 0
      utils/common.go

+ 77 - 1
services/contract/contract.go

@@ -16,6 +16,7 @@ import (
 	"hongze/hongze_mobile_admin/models/tables/contract_operation_record"
 	"hongze/hongze_mobile_admin/models/tables/contract_relation"
 	"hongze/hongze_mobile_admin/models/tables/contract_service_detail"
+	"hongze/hongze_mobile_admin/models/tables/contract_service_template"
 	"hongze/hongze_mobile_admin/services"
 	"hongze/hongze_mobile_admin/utils"
 	"mime/multipart"
@@ -128,7 +129,17 @@ func getContractDetail(contractId int) (contractDetail *contract.ContractDetail,
 		err = errors.New(fmt.Sprint("查找合同服务异常", err))
 		return
 	}
-	for i := 0; len(serviceList) > i; i++ {
+	// 权益合同主客观合并
+	if len(serviceList) > 0 && serviceList[0].ProductId == 2 {
+		mergeList, e := EquityMergeSubjectAndObject(serviceList)
+		if e != nil {
+			err = errors.New(fmt.Sprint("合并权益合同服务异常", err))
+			return
+		}
+		serviceList = mergeList
+	}
+	newLen := len(serviceList)
+	for i := 0; newLen > i; i++ {
 		if serviceList[i].HasDetail == "是" {
 			list, detailErr := contract_service_detail.GetContractServiceDetailListByServiceId(serviceList[i].ContractServiceId)
 			if detailErr != nil {
@@ -459,3 +470,68 @@ func GetServicePermissionMap(serviceList []*contractCustom.ContractServiceAndDet
 	}
 	return
 }
+
+// 权益合同主客观合并
+func EquityMergeSubjectAndObject(serviceList []*contractCustom.ContractServiceAndDetail) (mergeList []*contractCustom.ContractServiceAndDetail, err error) {
+	mergeList = make([]*contractCustom.ContractServiceAndDetail, 0)
+	// 获取模板列表
+	templateList, e := contract_service_template.GetAllContractServiceTemplateList()
+	if e != nil {
+		err = errors.New("获取合同服务模板异常, Err: " + e.Error())
+		return
+	}
+	templateMap := make(map[int]*contract_service_template.ContractServiceTemplate, 0)
+	for _, v := range templateList {
+		templateMap[v.ServiceTemplateId] = v
+	}
+	mergeArr := []string{"医药", "消费", "科技", "智造"}
+	// 遍历原服务
+	serviceLen := len(serviceList)
+	if serviceLen > 0 {
+		needCheck := make([]*contractCustom.ContractServiceAndDetail, 0)
+		for i := 0; i < serviceLen; i++ {
+			sv := serviceList[i]
+			if sv.ProductId != 2 {
+				mergeList = serviceList
+				return
+			}
+			// 判断是否包含主观客观
+			if utils.InArrayByStr(mergeArr, sv.Title) {
+				needCheck = append(needCheck, sv)
+			} else {
+				if sv.Title != "主观" && sv.Title != "客观" {
+					mergeList = append(mergeList, sv)
+				}
+			}
+		}
+		// 不需要合并
+		checkLen := len(needCheck)
+		if checkLen == 0 {
+			mergeList = serviceList
+			return
+		}
+		for i := 0; i < checkLen; i++ {
+			count := 0
+			parent := needCheck[i]
+			parentId := parent.ServiceTemplateId
+			// 检查需要合并的是否包含主客观
+			children := make([]*contractCustom.ContractServiceAndDetail, 0)
+			for ii := 0; ii < serviceLen; ii++ {
+				sv := serviceList[ii]
+				temp := templateMap[sv.ServiceTemplateId]
+				if temp.Pid == parentId {
+					count += 1
+					sv.Title = fmt.Sprint(parent.Title, "(", sv.Title, ")")
+					children = append(children, sv)
+				}
+			}
+			// 均包含时只取二级套餐, 否则取主/客观
+			if count == 1 {
+				mergeList = append(mergeList, children...)
+			} else {
+				mergeList = append(mergeList, parent)
+			}
+		}
+	}
+	return
+}

+ 11 - 0
utils/common.go

@@ -758,4 +758,15 @@ func StrTimeToTime(strTime string) time.Time {
 	loc, _ := time.LoadLocation("Local") //重要:获取时区
 	resultTime, _ := time.ParseInLocation(timeLayout, strTime, loc)
 	return resultTime
+}
+
+// InArrayByStr php中的in_array(判断String类型的切片中是否存在该string值)
+func InArrayByStr(idStrList []string, searchId string) (has bool) {
+	for _, id := range idStrList {
+		if id == searchId {
+			has = true
+			return
+		}
+	}
+	return
 }