Browse Source

网点签约增加增量签逻辑

FengChaoYu 5 days ago
parent
commit
8c71fb3247

+ 10 - 0
mall-server-api/src/main/java/com/gree/mall/manager/controller/contract/WebsitContractSignController.java

@@ -79,6 +79,16 @@ public class WebsitContractSignController {
         return ResponseHelper.success(bean);
         return ResponseHelper.success(bean);
     }
     }
 
 
+    @PostMapping("/single/sign")
+    @ApiOperation(value = "网点合同签约-单签约")
+    public ResponseHelper<AuthBean> singleSign(
+            @ApiParam(value = "id", required = true) @RequestParam String id,
+            @ApiParam(value = "签约合同明细id", required = true) @RequestParam String itemId,
+            @ApiParam(value = "返回地址", required = true) @RequestParam String returnUrl) throws Exception {
+        AuthBean bean = websitContractSignLogic.singleSign(id, itemId, returnUrl);
+        return ResponseHelper.success(bean);
+    }
+
     @PostMapping("/confirm")
     @PostMapping("/confirm")
     @ApiOperation(value = "网点合同签约-审核")
     @ApiOperation(value = "网点合同签约-审核")
     public ResponseHelper confirm(
     public ResponseHelper confirm(

+ 69 - 8
mall-server-api/src/main/java/com/gree/mall/manager/logic/contract/ContractTemplateLogic.java

@@ -20,12 +20,8 @@ import com.gree.mall.manager.enums.material.StateEnum;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.plus.entity.*;
 import com.gree.mall.manager.plus.entity.*;
-import com.gree.mall.manager.plus.service.AdminWebsitService;
-import com.gree.mall.manager.plus.service.ContractTemplateFieldService;
-import com.gree.mall.manager.plus.service.ContractTemplateService;
-import com.gree.mall.manager.plus.service.ContractWebsitService;
+import com.gree.mall.manager.plus.service.*;
 import com.gree.mall.manager.utils.fadada.Auth4FDDUtil;
 import com.gree.mall.manager.utils.fadada.Auth4FDDUtil;
-import com.gree.mall.manager.utils.oss.OSSUtil;
 import com.gree.mall.manager.zfire.bean.ZfireParamBean;
 import com.gree.mall.manager.zfire.bean.ZfireParamBean;
 import com.gree.mall.manager.zfire.util.FieldUtils;
 import com.gree.mall.manager.zfire.util.FieldUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
@@ -35,7 +31,10 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.function.Function;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
 
 
@@ -48,9 +47,10 @@ public class ContractTemplateLogic {
     private final ContractTemplateService contractTemplateService;
     private final ContractTemplateService contractTemplateService;
     private final ContractWebsitService contractWebsitService;
     private final ContractWebsitService contractWebsitService;
     private final ContractTemplateFieldService contractTemplateFieldService;
     private final ContractTemplateFieldService contractTemplateFieldService;
-    private final AdminWebsitService adminWebsitService;
-    private final OSSUtil ossUtil;
     private final WebsitMapper websitMapper;
     private final WebsitMapper websitMapper;
+    private final WebsitContractSignRecordService websitContractSignRecordService;
+    private final WebsitContractSignItemService websitContractSignItemService;
+    private final WebsitContractSignFieldService websitContractSignFieldService;
 
 
     public IPage<ContractTemplateVO> list(ZfireParamBean zfireParamBean) {
     public IPage<ContractTemplateVO> list(ZfireParamBean zfireParamBean) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
         AdminUserCom adminUser = commonLogic.getAdminUser();
@@ -141,6 +141,67 @@ public class ContractTemplateLogic {
                             .setId(IdWorker.getIdStr()))
                             .setId(IdWorker.getIdStr()))
                     .collect(Collectors.toList()));
                     .collect(Collectors.toList()));
         }
         }
+
+        // 检查附件所属合同是否有签约记录
+        if (contractTemplate.getContractType().equals(ContractTypeEnum.FOLLOW.getKey())
+                && StringUtils.isNotBlank(contractTemplate.getFollowContractTemplateId())) {
+            final List<WebsitContractSignItem> signItems = websitContractSignItemService.lambdaQuery()
+                    .eq(WebsitContractSignItem::getContractTemplateId, contractTemplate.getFollowContractTemplateId())
+                    .in(WebsitContractSignItem::getContractStatus, SignContractStatusEnum.WAIT_SIGN.getKey(), SignContractStatusEnum.OK.getKey())
+                    .groupBy(WebsitContractSignItem::getWebsitContractSignRecordId)
+                    .list();
+
+            if (CollectionUtil.isNotEmpty(signItems)) {
+                List<WebsitContractSignItem> signItemList = new ArrayList<>();
+                List<WebsitContractSignField> signFieldList = new ArrayList<>();
+                for (WebsitContractSignItem signItem : signItems) {
+                    WebsitContractSignItem contractSignItem = new WebsitContractSignItem();
+                    contractSignItem.setId(IdWorker.getIdStr())
+                            .setWebsitContractSignRecordId(signItem.getWebsitContractSignRecordId())
+                            .setContractName(contractTemplate.getContractTemplateName())
+                            .setContractTemplatePdf(contractTemplate.getContractTemplatePdf())
+                            .setContractType(contractTemplate.getContractType())
+                            .setContractStatus(SignContractStatusEnum.WAIT_SIGN.getKey())
+                            .setValidDate(contractTemplate.getValidDate())
+                            .setExpireDate(contractTemplate.getExpireDate())
+                            .setContractTemplateId(contractTemplate.getContractTemplateId())
+                            .setFadadaTemplateId(contractTemplate.getFadadaTemplateId())
+                            .setNeedCompanySign(contractTemplate.getNeedCompanySign())
+                            .setNeedManagerSign(contractTemplate.getNeedManagerSign())
+                            .setNeedPartyASign(contractTemplate.getNeedPartyASign())
+                            .setCaCustomerId(signItem.getCaCustomerId())
+                            .setCompanySignFiled(contractTemplate.getCompanySignFiled())
+                            .setManagerSignField(contractTemplate.getManagerSignField())
+                            .setPartyASignFiled(contractTemplate.getPartyASignFiled());
+                    signItemList.add(contractSignItem);
+                }
+                // 遍历网点合同签约明细找出填充字段配置
+                for (WebsitContractSignItem contractSignItem : signItemList) {
+                    final List<ContractTemplateField> templateFieldList = contractTemplateFieldService.lambdaQuery()
+                            .eq(ContractTemplateField::getContractTemplateId, contractSignItem.getContractTemplateId())
+                            .list();
+                    for (ContractTemplateField templateField : templateFieldList) {
+                        WebsitContractSignField field = new WebsitContractSignField();
+                        field.setWebsitContractSignRecordId(contractSignItem.getWebsitContractSignRecordId())
+                                .setWebsitContractSignItemId(contractSignItem.getId())
+                                .setFieldType(templateField.getFieldType())
+                                .setFieldName(templateField.getFieldName())
+                                .setFieldValue(templateField.getFieldValue());
+                        signFieldList.add(field);
+                    }
+                }
+
+                websitContractSignItemService.saveBatch(signItemList);
+                websitContractSignFieldService.saveBatch(signFieldList);
+
+                websitContractSignRecordService.lambdaUpdate()
+                        .set(WebsitContractSignRecord::getStatus, SignContractStatusEnum.WAIT_SIGN.getKey())
+                        .in(WebsitContractSignRecord::getId, signItems.stream()
+                                .map(WebsitContractSignItem::getWebsitContractSignRecordId)
+                                .collect(Collectors.toList()))
+                        .update();
+            }
+        }
     }
     }
 
 
     @Transactional
     @Transactional

+ 52 - 1
mall-server-api/src/main/java/com/gree/mall/manager/logic/contract/WebsitContractSignLogic.java

@@ -680,7 +680,8 @@ public class WebsitContractSignLogic {
 
 
         for (WebsitContractSignItem signItem : signItemList) {
         for (WebsitContractSignItem signItem : signItemList) {
             if (status.getKey().equals(SignContractStatusEnum.OK.getKey())) {
             if (status.getKey().equals(SignContractStatusEnum.OK.getKey())) {
-                if (signItem.getNeedPartyASign().equals(IsYesNoEnum.YES.getKey())) {
+                if (signItem.getNeedPartyASign().equals(IsYesNoEnum.YES.getKey())
+                        && signItem.getContractStatus().equals(SignContractStatusEnum.WAIT.getKey())) {
                     //甲方签署
                     //甲方签署
                     try {
                     try {
                         JSONObject object = Auth4FDDUtil.extSignAuto(IdWorker.getIdStr(), signItem.getFadadaContractId(),
                         JSONObject object = Auth4FDDUtil.extSignAuto(IdWorker.getIdStr(), signItem.getFadadaContractId(),
@@ -703,6 +704,7 @@ public class WebsitContractSignLogic {
                         .set(WebsitContractSignItem::getConfirmBy, adminUser.getNickName())
                         .set(WebsitContractSignItem::getConfirmBy, adminUser.getNickName())
                         .set(WebsitContractSignItem::getConfirmTime, DateUtil.date())
                         .set(WebsitContractSignItem::getConfirmTime, DateUtil.date())
                         .eq(WebsitContractSignItem::getId, signItem.getId())
                         .eq(WebsitContractSignItem::getId, signItem.getId())
+                        .eq(WebsitContractSignItem::getContractStatus, SignContractStatusEnum.WAIT.getKey())
                         .update();
                         .update();
             } else {
             } else {
                 websitContractSignItemService.lambdaUpdate()
                 websitContractSignItemService.lambdaUpdate()
@@ -752,4 +754,53 @@ public class WebsitContractSignLogic {
         recordCount.setEndCount(count1);
         recordCount.setEndCount(count1);
         return recordCount;
         return recordCount;
     }
     }
+
+    public AuthBean singleSign(String id, String itemId, String returnUrl) throws Exception {
+        AuthBean bean = new AuthBean();
+
+        WebsitContractSignRecord record = websitContractSignRecordService.getById(id);
+
+        if (Objects.isNull(record)) {
+            throw new RemoteServiceException("合同记录不存在");
+        }
+
+        AdminWebsit websit = adminWebsitService.getById(record.getWebsitId());
+
+        // 避免前端调用过快,法大大还没更新状态
+        Thread.sleep(3000);
+
+        WebsitContractSignItem item = websitContractSignItemService.lambdaQuery()
+                .eq(WebsitContractSignItem::getWebsitContractSignRecordId, record.getId())
+                .eq(WebsitContractSignItem::getId, itemId)
+                .one();
+
+        long companySign = item.getNeedCompanySign().equals(IsYesNoEnum.YES.getKey()) && item.getCompanySignStatus().equals(IsYesNoEnum.NO.getKey()) ? 1L : 0L;
+        if (!bean.isJump() && companySign > 0 && websit.getFadadaWebsitRealStatus().equals(IsYesNoEnum.YES.getKey())) {
+            // 签约企业签约跳
+            this.companySignMethod(websit, item, bean, returnUrl);
+        }
+
+        long managerSign = item.getNeedManagerSign().equals(IsYesNoEnum.YES.getKey()) && item.getManagerSignStatus().equals(IsYesNoEnum.NO.getKey()) ? 1L : 0L;
+        if (!bean.isJump()
+                && companySign == 0
+                && managerSign > 0
+                && websit.getFadadaCustomerRealStatus().equals(IsYesNoEnum.YES.getKey())) {
+            // 签约负责人签约跳
+            this.managerSignMethod(websit, item, bean, returnUrl);
+        }
+        record = websitContractSignRecordService.getById(id);
+        if (!bean.isJump()) {
+            if (companySign > 0 && record.getStatus().equals(SignContractStatusEnum.WAIT_SIGN.getKey())) {
+                // 签约企业签约跳
+                bean.setJump(true);
+                bean.setUrl(item.getCompanySignUrl());
+            } else if (managerSign > 0 && record.getStatus().equals(SignContractStatusEnum.WAIT_SIGN.getKey())) {
+                // 签约负责人签约跳
+                bean.setJump(true);
+                bean.setUrl(item.getManagerSignUrl());
+            }
+        }
+
+        return bean;
+    }
 }
 }

+ 1 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/fadada/FDDNotifyLogic.java

@@ -379,6 +379,7 @@ public class FDDNotifyLogic {
                                 .set(WebsitContractSignItem::getSignDate, DateUtil.date())
                                 .set(WebsitContractSignItem::getSignDate, DateUtil.date())
                                 .set(WebsitContractSignItem::getContractStatus, SignContractStatusEnum.WAIT.getKey())
                                 .set(WebsitContractSignItem::getContractStatus, SignContractStatusEnum.WAIT.getKey())
                                 .eq(WebsitContractSignItem::getWebsitContractSignRecordId, record.getId())
                                 .eq(WebsitContractSignItem::getWebsitContractSignRecordId, record.getId())
+                                .eq(WebsitContractSignItem::getContractStatus, SignContractStatusEnum.WAIT_SIGN.getKey())
                                 .update();
                                 .update();
                         record.setFadadaWebsitId(websit.getFadadaWebsitId())
                         record.setFadadaWebsitId(websit.getFadadaWebsitId())
                                 .setAuthStatus(IsYesNoEnum.YES.getKey())
                                 .setAuthStatus(IsYesNoEnum.YES.getKey())