瀏覽代碼

法大大签约合同增加批量失效和批量挂起增签功能

FengChaoYu 4 天之前
父節點
當前提交
f3e277086e

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

@@ -70,6 +70,23 @@ public class WebsitContractSignController {
         return ResponseHelper.success();
     }
 
+    @PostMapping("/cancel/batch")
+    @ApiOperation(value = "网点合同签约-批量失效")
+    public ResponseHelper cancelBatch(@ApiParam(value = "网点编号", required = true) @RequestParam String websits) {
+        websitContractSignLogic.cancelBatch(websits);
+        return ResponseHelper.success();
+    }
+
+    @PostMapping("/pend/batch")
+    @ApiOperation(value = "网点合同签约-批量失效")
+    public ResponseHelper pendBatch(
+            @ApiParam(value = "网点编号", required = true) @RequestParam String websits,
+            @ApiParam(value = "生成补签主合同id", required = true) @RequestParam String contractTemplateId
+    ) {
+        websitContractSignLogic.pendBatch(websits, contractTemplateId);
+        return ResponseHelper.success();
+    }
+
     @PostMapping("/sign")
     @ApiOperation(value = "网点合同签约-签约")
     public ResponseHelper<AuthBean> sign(

+ 2 - 1
mall-server-api/src/main/java/com/gree/mall/manager/enums/contract/SignContractStatusEnum.java

@@ -9,7 +9,8 @@ public enum SignContractStatusEnum implements BaseEnum {
     WAIT("WAIT","待审核"),
     OK("OK","审核通过"),
     REJECT("REJECT","审核驳回"),
-    CANCEL("CANCEL","已失效"),;
+    CANCEL("CANCEL","已失效"),
+    PEND("PEND","挂起"),;
 
     SignContractStatusEnum(String key, String remark) {
         this.key=key;this.remark = remark;

+ 16 - 0
mall-server-api/src/main/java/com/gree/mall/manager/logic/admin/AdminUserLogic.java

@@ -1109,6 +1109,21 @@ public class AdminUserLogic {
                     if (websit.getLevel() == 2) {
                         Integer existCount = websitContractSignRecordService.lambdaQuery()
                                 .eq(WebsitContractSignRecord::getWebsitId, websit.getWebsitId())
+                                .in(WebsitContractSignRecord::getStatus, SignContractStatusEnum.WAIT_SIGN.getKey(), SignContractStatusEnum.WAIT.getKey())
+                                .ge(WebsitContractSignRecord::getSignOverTime, DateUtil.formatDateTime(DateUtil.date()))
+                                .count();
+                        if (existCount > 0) {
+                            List<AdminModuleTree> filterTree = trees.stream().filter(v -> v.getLevel() == 1 && v.getNotSign()).collect(Collectors.toList());
+                            if (CollectionUtil.isNotEmpty(filterTree)) {
+                                for (AdminModuleTree moduleTree : filterTree) {
+                                    moduleTree.setChildren(this.treeModule(trees, moduleTree.getModuleId(), hasModule, admin, true));
+                                }
+                                return filterTree;
+                            }
+                        }
+
+                        existCount = websitContractSignRecordService.lambdaQuery()
+                                .eq(WebsitContractSignRecord::getWebsitId, websit.getWebsitId())
                                 .eq(WebsitContractSignRecord::getStatus, SignContractStatusEnum.OK.getKey())
                                 .ge(WebsitContractSignRecord::getSignOverTime, DateUtil.formatDateTime(DateUtil.date()))
                                 .count();
@@ -1126,6 +1141,7 @@ public class AdminUserLogic {
                                 }
                             }
                         }
+
                     }
                 }
             }

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

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -16,6 +17,7 @@ import com.gree.mall.manager.enums.ContractTypeEnum;
 import com.gree.mall.manager.enums.IsYesNoEnum;
 import com.gree.mall.manager.enums.contract.FieldTypeEnum;
 import com.gree.mall.manager.enums.contract.SignContractStatusEnum;
+import com.gree.mall.manager.enums.material.StateEnum;
 import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.logic.fadada.FDDNotifyLogic;
@@ -34,9 +36,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 @Slf4j
 @Service
@@ -53,6 +57,8 @@ public class WebsitContractSignLogic {
     private final OSSUtil ossUtil;
     private final CompanyCaAuthService companyCaAuthService;
     private final WebsitFollowConfigItemService websitFollowConfigItemService;
+    private final ContractTemplateService contractTemplateService;
+    private final ContractTemplateFieldService contractTemplateFieldService;
 
     @Value("${fadada.websit.auth.verified-way}")
     private String fddAuthVerifiedWay;
@@ -74,6 +80,9 @@ public class WebsitContractSignLogic {
             for (String adminWebsitId : adminUser.getAdminWebsitIds()) {
                 final WebsitContractSignRecord record = websitContractSignRecordService.lambdaQuery()
                         .eq(WebsitContractSignRecord::getWebsitId, adminWebsitId)
+                        .in(WebsitContractSignRecord::getStatus, SignContractStatusEnum.WAIT_SIGN.getKey(),
+                                SignContractStatusEnum.WAIT.getKey(),
+                                SignContractStatusEnum.OK.getKey())
                         .last("limit 1")
                         .one();
                 if (Objects.nonNull(record)) {
@@ -105,16 +114,56 @@ public class WebsitContractSignLogic {
         return bean;
     }
 
+    @Transactional
     public void cancel(String id) {
         AdminUserCom adminUser = commonLogic.getAdminUser();
+
+        final WebsitContractSignRecord record = websitContractSignRecordService.getById(id);
+
         websitContractSignRecordService.lambdaUpdate()
                 .set(WebsitContractSignRecord::getStatus, SignContractStatusEnum.CANCEL.getKey())
                 .set(WebsitContractSignRecord::getCancelBy, adminUser.getNickName())
                 .set(WebsitContractSignRecord::getCancelTime, DateUtil.date())
                 .eq(WebsitContractSignRecord::getId, id)
                 .update();
+
+        websitContractSignRecordService.lambdaUpdate()
+                .set(WebsitContractSignRecord::getStatus, SignContractStatusEnum.OK.getKey())
+                .eq(WebsitContractSignRecord::getStatus, SignContractStatusEnum.PEND.getKey())
+                .eq(WebsitContractSignRecord::getWebsitId, record.getWebsitId())
+                .update();
     }
 
+    @Transactional
+    public void cancelBatch(String websits) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+
+        final List<String> websitList = StrUtil.split(websits, ",", true, true);
+
+        final List<WebsitContractSignRecord> records = websitContractSignRecordService.lambdaQuery()
+                .select(WebsitContractSignRecord::getId)
+                .in(WebsitContractSignRecord::getStatus, SignContractStatusEnum.OK.getKey(), SignContractStatusEnum.WAIT_SIGN.getKey())
+                .in(WebsitContractSignRecord::getWebsitId, websitList)
+                .list();
+
+        if (CollectionUtil.isNotEmpty(records)) {
+            final List<String> ids = records.stream().map(WebsitContractSignRecord::getId).collect(Collectors.toList());
+            websitContractSignRecordService.lambdaUpdate()
+                    .set(WebsitContractSignRecord::getStatus, SignContractStatusEnum.CANCEL.getKey())
+                    .set(WebsitContractSignRecord::getCancelBy, adminUser.getNickName())
+                    .set(WebsitContractSignRecord::getCancelTime, DateUtil.date())
+                    .in(WebsitContractSignRecord::getId, ids)
+                    .update();
+
+            websitContractSignRecordService.lambdaUpdate()
+                    .set(WebsitContractSignRecord::getStatus, SignContractStatusEnum.OK.getKey())
+                    .eq(WebsitContractSignRecord::getStatus, SignContractStatusEnum.PEND.getKey())
+                    .in(WebsitContractSignRecord::getWebsitId, websitList)
+                    .update();
+        }
+    }
+
+
     public AuthBean sign(String id, String returnUrl) throws Exception {
         AdminUserCom adminUser = commonLogic.getAdminUser();
 
@@ -735,6 +784,14 @@ public class WebsitContractSignLogic {
             }
         }
 
+        if (record.getIsPend()) {
+            websitContractSignRecordService.lambdaUpdate()
+                    .set(WebsitContractSignRecord::getStatus, SignContractStatusEnum.OK.getKey())
+                    .eq(WebsitContractSignRecord::getStatus, SignContractStatusEnum.PEND.getKey())
+                    .eq(WebsitContractSignRecord::getWebsitId, record.getWebsitId())
+                    .update();
+        }
+
         // 合同都已审核,更新记录为审核通过
         websitContractSignRecordService.lambdaUpdate()
                 .set(WebsitContractSignRecord::getRemark, remark)
@@ -822,4 +879,174 @@ public class WebsitContractSignLogic {
 
         return bean;
     }
+
+    @Transactional
+    public void pendBatch(String websits, String contractTemplateId) {
+        AdminUserCom adminUser = commonLogic.getAdminUser();
+
+        final ContractTemplate mainContract = contractTemplateService.getById(contractTemplateId);
+
+        if (Objects.isNull(mainContract)) {
+            throw new RemoteServiceException("合同不存在");
+        }
+
+        final List<String> websitList = StrUtil.split(websits, ",", true, true);
+
+        if (websitList.size() > 20) {
+            throw new RemoteServiceException("网点编号数量超过20, 请检查");
+        }
+
+        if (websitContractSignRecordService.lambdaQuery()
+                .eq(WebsitContractSignRecord::getContractTemplateId, contractTemplateId)
+                .eq(WebsitContractSignRecord::getStatus, SignContractStatusEnum.OK.getKey())
+                .in(WebsitContractSignRecord::getWebsitId, websitList)
+                .count() > 0) {
+            throw new RemoteServiceException("“" + mainContract.getContractTemplateName() + "” 网点已签记录, 挂起操作中止");
+        }
+
+        if (websitContractSignRecordService.lambdaQuery()
+                .eq(WebsitContractSignRecord::getContractTemplateId, contractTemplateId)
+                .in(WebsitContractSignRecord::getStatus, SignContractStatusEnum.WAIT_SIGN.getKey(), SignContractStatusEnum.WAIT.getKey())
+                .in(WebsitContractSignRecord::getWebsitId, websitList)
+                .count() > 0) {
+            throw new RemoteServiceException("“" + mainContract.getContractTemplateName() + "” 网点已有待签约或待审核记录, 挂起操作中止");
+        }
+
+        // 插入记录
+        new WebsitContractOperPendRecord()
+                .setContractTemplateId(contractTemplateId)
+                .setWebsits(websits)
+                .insert();
+
+        // 查询出要挂起的已签通过记录
+        final List<WebsitContractSignRecord> records = websitContractSignRecordService.lambdaQuery()
+                .select(WebsitContractSignRecord::getId)
+                .in(WebsitContractSignRecord::getStatus, SignContractStatusEnum.OK.getKey())
+                .in(WebsitContractSignRecord::getWebsitId, websitList)
+                .list();
+
+        if (CollectionUtil.isNotEmpty(records)) {
+            final List<String> ids = records.stream().map(WebsitContractSignRecord::getId).collect(Collectors.toList());
+            websitContractSignRecordService.lambdaUpdate()
+                    .set(WebsitContractSignRecord::getStatus, SignContractStatusEnum.PEND.getKey())
+                    .in(WebsitContractSignRecord::getId, ids)
+                    .update();
+        }
+
+        List<WebsitContractSignRecord> recordList = new ArrayList<>();
+        List<WebsitContractSignItem> signItemList = new ArrayList<>();
+        List<WebsitContractSignField> signFieldList = new ArrayList<>();
+
+        // 根据主合同查询从合同
+        final List<ContractTemplate> templateList = contractTemplateService.lambdaQuery()
+                .eq(ContractTemplate::getFollowContractTemplateId, mainContract.getContractTemplateId())
+                .eq(ContractTemplate::getStatus, StateEnum.ON.getKey())
+                .list();
+
+        for (String websitId : websitList.stream().distinct().collect(Collectors.toList())) {
+            final AdminWebsit websit = adminWebsitService.getById(websitId);
+
+            final WebsitFollowConfigItem item = websitFollowConfigItemService.lambdaQuery()
+                    .eq(WebsitFollowConfigItem::getCompanyWechatId, websit.getCompanyWechatId())
+                    .eq(WebsitFollowConfigItem::getSubWebsitId, websit.getWebsitId())
+                    .one();
+
+            if (Objects.isNull(item)) {
+                throw new RemoteServiceException("二级网点未绑定一级网点,请联系管理员处理");
+            }
+
+            final AdminWebsit parentWebsit = adminWebsitService.getById(item.getParentId());
+            final CompanyCaAuth caAuth = companyCaAuthService.lambdaQuery()
+                    .eq(CompanyCaAuth::getCompanyWechatId, item.getCompanyWechatId())
+                    .eq(CompanyCaAuth::getWebsitId, item.getParentId())
+                    .eq(CompanyCaAuth::getFadadaIsAuth, IsYesNoEnum.YES.getKey())
+                    .eq(CompanyCaAuth::getFadadaAuthAutoStatus, IsYesNoEnum.YES.getKey())
+                    .one();
+            if (Objects.isNull(caAuth)) {
+                throw new RemoteServiceException("一级网点的CA认证未完成,请联系管理员处理");
+            }
+
+            WebsitContractSignRecord record = new WebsitContractSignRecord();
+            record.setId(IdWorker.getIdStr())
+                    .setCompanyWechatId(websit.getCompanyWechatId())
+                    .setCompanyWechatName(websit.getCompanyWechatName())
+                    .setBelongCompany(websit.getBelongCompany())
+                    .setBelongCompanyCode(websit.getBelongCompanyCode())
+                    .setWebsitId(websit.getWebsitId())
+                    .setWebsitName(websit.getName())
+                    .setParentId(parentWebsit.getWebsitId())
+                    .setParentName(parentWebsit.getName())
+                    .setContractTemplateId(mainContract.getContractTemplateId())
+                    .setContractName(mainContract.getContractTemplateName())
+                    .setSignOverTime(mainContract.getExpireDate())
+                    .setAuthStatus(StringUtils.isBlank(websit.getFadadaCustomerId()) ? IsYesNoEnum.NO.getKey() : IsYesNoEnum.YES.getKey())
+                    .setIsPend(true);
+
+            recordList.add(record);
+
+            WebsitContractSignItem signItem = new WebsitContractSignItem();
+            signItem.setId(IdWorker.getIdStr())
+                    .setWebsitContractSignRecordId(record.getId())
+                    .setContractName(mainContract.getContractTemplateName())
+                    .setContractTemplatePdf(mainContract.getContractTemplatePdf())
+                    .setContractType(mainContract.getContractType())
+                    .setContractStatus(SignContractStatusEnum.WAIT_SIGN.getKey())
+                    .setValidDate(mainContract.getValidDate())
+                    .setExpireDate(mainContract.getExpireDate())
+                    .setContractTemplateId(mainContract.getContractTemplateId())
+                    .setFadadaTemplateId(mainContract.getFadadaTemplateId())
+                    .setNeedCompanySign(mainContract.getNeedCompanySign())
+                    .setNeedManagerSign(mainContract.getNeedManagerSign())
+                    .setNeedPartyASign(mainContract.getNeedPartyASign())
+                    .setCaCustomerId(caAuth.getFadadaCustomerId())
+                    .setCompanySignFiled(mainContract.getCompanySignFiled())
+                    .setManagerSignField(mainContract.getManagerSignField())
+                    .setPartyASignFiled(mainContract.getPartyASignFiled());
+
+            signItemList.add(signItem);
+            for (ContractTemplate contractTemplate : templateList) {
+                WebsitContractSignItem contractSignItem = new WebsitContractSignItem();
+                contractSignItem.setId(IdWorker.getIdStr())
+                        .setWebsitContractSignRecordId(record.getId())
+                        .setContractName(contractTemplate.getContractTemplateName())
+                        .setContractTemplatePdf(mainContract.getContractTemplatePdf())
+                        .setContractType(contractTemplate.getContractType())
+                        .setContractStatus(SignContractStatusEnum.WAIT_SIGN.getKey())
+                        .setValidDate(mainContract.getValidDate())
+                        .setExpireDate(mainContract.getExpireDate())
+                        .setContractTemplateId(contractTemplate.getContractTemplateId())
+                        .setFadadaTemplateId(contractTemplate.getFadadaTemplateId())
+                        .setNeedCompanySign(contractTemplate.getNeedCompanySign())
+                        .setNeedManagerSign(contractTemplate.getNeedManagerSign())
+                        .setNeedPartyASign(contractTemplate.getNeedPartyASign())
+                        .setCaCustomerId(caAuth.getFadadaCustomerId())
+                        .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);
+                }
+            }
+        }
+
+        if (CollectionUtil.isNotEmpty(recordList)) {
+            websitContractSignRecordService.saveBatch(recordList);
+            websitContractSignItemService.saveBatch(signItemList);
+            websitContractSignFieldService.saveBatch(signFieldList);
+        }
+
+    }
 }