|
|
@@ -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);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|