czh 2 лет назад
Родитель
Сommit
6625fcbb30

+ 25 - 30
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OkHttpUtils.java

@@ -6,6 +6,7 @@ import okhttp3.*;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hc.client5.http.classic.methods.HttpPost;
 import org.apache.hc.client5.http.entity.mime.FileBody;
+import org.apache.hc.client5.http.entity.mime.HttpMultipartMode;
 import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
 import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
@@ -14,6 +15,7 @@ import org.apache.hc.core5.http.ContentType;
 import org.apache.hc.core5.http.HttpEntity;
 import org.apache.hc.core5.http.io.entity.EntityUtils;
 import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.protocol.HTTP;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.util.CollectionUtils;
 
@@ -21,7 +23,9 @@ import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSocketFactory;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
@@ -413,46 +417,37 @@ public class OkHttpUtils {
 
     /**
      * post请求提交form-data上传文件
+     *
      * @param url
      * @return
      */
     public static String doPostUploadFile(String url, Map<String, Object> param) {
         HttpPost httpPost = new HttpPost(url);
         CloseableHttpResponse response = null;
-
         String respContent = null;
-
-        long startTime = System.currentTimeMillis();
-
-        // 设置请求头 boundary边界不可重复,重复会导致提交失败
-        String boundary = "-------------------------" + UUIDUtils.get32UUID();
-        httpPost.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
-
-        // 创建MultipartEntityBuilder
-        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
-        // 设置字符编码
-        builder.setCharset(StandardCharsets.UTF_8);
-        // 设置边界
-        builder.setBoundary(boundary);
-        for (String key : param.keySet()) {
-            Object value = param.get(key);
-            if (value instanceof File) {
-                File file = (File) value;
-                builder.addPart(key, new FileBody(file));
-                builder.addBinaryBody("media", file, ContentType.create("application/octet-stream"), file.getName());
-            } else {
-                builder.addTextBody(key, String.valueOf(value));
-            }
-        }
-        HttpEntity entity = builder.build();
-        httpPost.setEntity(entity);
         CloseableHttpClient httpClient = HttpClients.createDefault();
         try {
+            String boundary = "--" + UUIDUtils.get32UUID();
+            httpPost.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
+            MultipartEntityBuilder builder = MultipartEntityBuilder.create().setMode(HttpMultipartMode.LEGACY);
+            builder.setCharset(StandardCharsets.UTF_8);
+            builder.setBoundary(boundary);
+            for (String key : param.keySet()) {
+                Object value = param.get(key);
+                if (value instanceof File file) {
+                    FileBody fileBody = new FileBody(file);
+                    builder.addBinaryBody(key, fileBody.getInputStream(), ContentType.DEFAULT_BINARY, fileBody.getFilename());
+                } else {
+                    builder.addBinaryBody(key, String.valueOf(value).getBytes(StandardCharsets.UTF_8));
+                }
+            }
+            HttpEntity entity = builder.build();
+            httpPost.setEntity(entity);
             response = httpClient.execute(httpPost);
             if (response != null) {
                 HttpEntity he = response.getEntity();
                 if (he != null) {
-                    respContent = EntityUtils.toString(he, "UTF-8");
+                    respContent = EntityUtils.toString(he, HTTP.UTF_8);
                 }
             } else {
                 log.error("对方响应的状态码不在符合的范围内!");
@@ -463,12 +458,12 @@ public class OkHttpUtils {
             log.error("网络访问异常,请求url地址={},响应体={},error={}", url, response, e);
             throw new RuntimeException();
         } finally {
-            log.info("统一外网请求参数打印,post请求url地址={},响应={},耗时={}毫秒", url, respContent, (System.currentTimeMillis() - startTime));
+            log.info("统一外网请求参数打印,post请求url地址={},响应={}", url, respContent);
             try {
                 if (response != null) {
                     response.close();
                 }
-                if(null != httpClient){
+                if (null != httpClient) {
                     httpClient.close();
                 }
             } catch (IOException e) {
@@ -485,7 +480,7 @@ public class OkHttpUtils {
      * @param httpMethod
      */
     private static void packageHeader(Map<String, String> paramsHeads, HttpRequestBase httpMethod) {
-        if (null!= paramsHeads && paramsHeads.size()>0) {
+        if (null != paramsHeads && paramsHeads.size() > 0) {
             Set<Map.Entry<String, String>> entrySet = paramsHeads.entrySet();
             for (Map.Entry<String, String> entry : entrySet) {
                 httpMethod.setHeader(entry.getKey(), entry.getValue());

+ 4 - 0
sckw-modules/sckw-contract/pom.xml

@@ -81,6 +81,10 @@
             <artifactId>sckw-common-log</artifactId>
             <version>1.0.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-transport-api</artifactId>
+        </dependency>
 
     </dependencies>
     <build>

+ 5 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractLogistics.java

@@ -128,4 +128,9 @@ public class KwcContractLogistics implements Serializable {
      */
     private Integer delFlag;
 
+    /**
+     * 业务id
+     */
+    private String businessId;
+
 }

+ 5 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/model/entity/KwcContractTrade.java

@@ -123,4 +123,9 @@ public class KwcContractTrade implements Serializable {
      */
     private Integer delFlag;
 
+    /**
+     * 业务id
+     */
+    private String businessId;
+
 }

+ 167 - 37
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/CommonBusinessService.java

@@ -1,9 +1,11 @@
 package com.sckw.contract.service;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.sckw.contract.dao.KwcContractLogisticsMapper;
 import com.sckw.contract.dao.KwcContractTradeMapper;
+import com.sckw.contract.factory.AsyncFactory;
 import com.sckw.contract.model.dto.req.EsignGetFlowReqDto;
 import com.sckw.contract.model.dto.res.ESignSubmitResDto;
 import com.sckw.contract.model.entity.KwcContractLogistics;
@@ -18,22 +20,24 @@ import com.sckw.order.api.model.ContractSignCompletedParam;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.transport.api.dubbo.TransportDubboService;
+import com.sckw.transport.api.model.param.ContractSignLogisticsParam;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
+import java.io.*;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
+@Slf4j
 @Service
 public class CommonBusinessService {
 
@@ -43,6 +47,9 @@ public class CommonBusinessService {
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private TradeOrderInfoService tradeOrderInfoService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private TransportDubboService transportDubboService;
+
     @Autowired
     private KwcContractTradeMapper kwcContractTradeMapper;
 
@@ -108,63 +115,185 @@ public class CommonBusinessService {
      * @author: czh
      * @date: 2023/8/14
      */
-    private void notifyOrder(Long contractId, Long userId) {
+    public void notifyOrder(Long contractId, Long userId) {
         ContractSignCompletedParam contractSignCompletedParam = new ContractSignCompletedParam();
         UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(userId);
+        String name = Objects.isNull(userCacheResDto) ? "" : userCacheResDto.getName();
         contractSignCompletedParam.setContractId(contractId);
         contractSignCompletedParam.setUpdateBy(userId);
-        contractSignCompletedParam.setUpdateByName(Objects.isNull(userCacheResDto) ? "" : userCacheResDto.getName());
+        contractSignCompletedParam.setUpdateByName(name);
         tradeOrderInfoService.contractSignCompleted(contractSignCompletedParam);
+
+        ContractSignLogisticsParam contractSignLogisticsParam = new ContractSignLogisticsParam();
+        contractSignLogisticsParam.setContractId(contractId);
+        contractSignLogisticsParam.setUpdateBy(userId);
+        contractSignLogisticsParam.setUpdateByName(name);
+        transportDubboService.contractSignLogisticsCompleted(contractSignLogisticsParam);
     }
 
 
     /**
      * @param firstAccount 发起方签约电话
-     *        secondAccount 对方签约电话
-     *        orgFirst 发起方企业id
-     *        orgSeconId 对方企业id
-     *        contractFile 合同文件
-     *        id 合同id
-     *        contractName 合同名
+     *                     secondAccount 对方签约电话
+     *                     orgFirst 发起方企业id
+     *                     orgSeconId 对方企业id
+     *                     contractFile 合同文件
+     *                     id 合同id
+     *                     contractName 合同名
      * @desc: 调e签宝
      * @author: czh
      * @date: 2023/8/14
      */
     public void postToEsign(String firstAccount, String secondAccount, Long orgFirst, Long orgSeconId, String contractFile, Long id, String contractName) {
-        EsignGetFlowReqDto esignGetFlowReqDto = new EsignGetFlowReqDto();
-        JSONArray jsonArray = JSONArray.parseArray(contractFile);
-        JSONObject jsonObject = jsonArray.getJSONObject(0);
-        String fileName = jsonObject.getString("name");
-        String url = jsonObject.getString("url");
-        File file = getFileByHttpURL(url, fileName);
-
-        List<Long> entIds = new ArrayList<>(2);
-        entIds.add(orgFirst);
-        entIds.add(orgSeconId);
-        Map<Long, EntCacheResDto> longListMap = remoteSystemService.queryEntCacheMapByIds(entIds);
-
-        esignGetFlowReqDto.setFile(file);
-        esignGetFlowReqDto.setSeqId(String.valueOf(id));
-        esignGetFlowReqDto.setSignFlowTitle(contractName);
-        esignGetFlowReqDto.setOrgFirstName(longListMap.get(orgFirst).getFirmName());
-        esignGetFlowReqDto.setPsnFirstAccount(firstAccount);
-        esignGetFlowReqDto.setOrgSecondName(longListMap.get(orgSeconId).getFirmName());
-        esignGetFlowReqDto.setPsnSecondAccount(secondAccount);
-        Map<String, Object> map = BeanUtils.convertToMap(esignGetFlowReqDto);
-        String res = OkHttpUtils.doPostUploadFile(eSignUrl, map);
-        //todo 解析返参,返参有流程id返回,表需要新加字段来存储
-        JSONObject.parseObject(res, ESignSubmitResDto.class);
+        AsyncFactory.execute(new AsyncProcess(firstAccount, secondAccount, orgFirst, orgSeconId, contractFile, id, contractName, remoteSystemService, eSignUrl, kwcContractLogisticsMapper, kwcContractTradeMapper));
+    }
 
+
+    public static void main(String[] args) throws Exception {
+//        String fileName = "车企合同.docx";
+//        System.out.println(new String(fileName.getBytes(), StandardCharsets.UTF_8));
+//        String url = "https://kaiwu-saas.oss-cn-chengdu.aliyuncs.com/kll/uploads/20230823/67189e3e9284951c9cf434cacef7c4c4.docx";
+//        File file = getFileByHttpURL(url, fileName);
+//        List<Long> entIds = new ArrayList<>(2);
+//        entIds.add(123123L);
+//        entIds.add(512414L);
+//        EsignGetFlowReqDto esignGetFlowReqDto = new EsignGetFlowReqDto();
+//        esignGetFlowReqDto.setFile(file);
+//        esignGetFlowReqDto.setSeqId(String.valueOf(11234125L));
+//        esignGetFlowReqDto.setSignFlowTitle("测试Title");
+//        esignGetFlowReqDto.setOrgFirstName("测试企业2");
+//        esignGetFlowReqDto.setPsnFirstAccount("13900001112");
+//        esignGetFlowReqDto.setOrgSecondName("测试企业1");
+//        esignGetFlowReqDto.setPsnSecondAccount("13900001111");
+//        Map<String, Object> map = BeanUtils.convertToMap(esignGetFlowReqDto);
+//        String res = OkHttpUtils.doPostUploadFile("http://10.10.10.224:8840/v1/sign/getFlow", map);
+////        String res = OkHttpUtils.doPostUploadFile("http://10.10.10.70:27802/openapi/vehicleLocate/fileUpload", map);
+//        log.info("E签宝返参:{}", res);
+    }
+
+    static class AsyncProcess implements Runnable {
+
+        private final String firstAccount;
+        private final String secondAccount;
+        private final Long orgFirst;
+        private final Long orgSeconId;
+        private final String contractFile;
+        private final Long id;
+        private final String contractName;
+
+        private RemoteSystemService remoteSystemService;
+        private String eSignUrl;
+        private KwcContractLogisticsMapper kwcContractLogisticsMapper;
+        private KwcContractTradeMapper kwcContractTradeMapper;
+
+        public AsyncProcess(String firstAccount,
+                            String secondAccount,
+                            Long orgFirst,
+                            Long orgSeconId,
+                            String contractFile,
+                            Long id,
+                            String contractName,
+                            RemoteSystemService remoteSystemService,
+                            String eSignUrl,
+                            KwcContractLogisticsMapper kwcContractLogisticsMapper,
+                            KwcContractTradeMapper kwcContractTradeMapper) {
+            this.firstAccount = firstAccount;
+            this.secondAccount = secondAccount;
+            this.orgFirst = orgFirst;
+            this.orgSeconId = orgSeconId;
+            this.contractFile = contractFile;
+            this.id = id;
+            this.contractName = contractName;
+            this.remoteSystemService = remoteSystemService;
+            this.eSignUrl = eSignUrl;
+            this.kwcContractLogisticsMapper = kwcContractLogisticsMapper;
+            this.kwcContractTradeMapper = kwcContractTradeMapper;
+        }
+
+        @Override
+        public void run() {
+            EsignGetFlowReqDto esignGetFlowReqDto = new EsignGetFlowReqDto();
+            JSONArray jsonArray = JSONArray.parseArray(contractFile);
+            JSONObject jsonObject = jsonArray.getJSONObject(0);
+            String fileName = jsonObject.getString("name");
+            String url = jsonObject.getString("url");
+            File file = getFileByHttpURL(url, fileName);
+            List<Long> entIds = new ArrayList<>(2);
+            entIds.add(orgFirst);
+            entIds.add(orgSeconId);
+            Map<Long, EntCacheResDto> longListMap = remoteSystemService.queryEntCacheMapByIds(entIds);
+
+            esignGetFlowReqDto.setFile(file);
+            esignGetFlowReqDto.setSeqId(String.valueOf(id));
+            esignGetFlowReqDto.setSignFlowTitle(contractName);
+            esignGetFlowReqDto.setOrgFirstName(longListMap.get(orgFirst).getFirmName());
+            esignGetFlowReqDto.setPsnFirstAccount(firstAccount);
+            esignGetFlowReqDto.setOrgSecondName(longListMap.get(orgSeconId).getFirmName());
+            esignGetFlowReqDto.setPsnSecondAccount(secondAccount);
+            Map<String, Object> map = BeanUtils.convertToMap(esignGetFlowReqDto);
+            log.info("E签宝入参: url:{}, param:{}", eSignUrl, JSON.toJSONString(map));
+            String res = OkHttpUtils.doPostUploadFile(eSignUrl, map);
+            log.info("E签宝返参:{}", res);
+            ESignSubmitResDto eSignSubmitResDto = JSONObject.parseObject(res, ESignSubmitResDto.class);
+            if (eSignSubmitResDto.getStatus()) {
+                String signFlowId = eSignSubmitResDto.getData().getSignFlowId();
+                KwcContractLogistics kwcContractLogistics = kwcContractLogisticsMapper.selectById(id);
+                if (Objects.nonNull(kwcContractLogistics)) {
+                    kwcContractLogistics.setBusinessId(signFlowId);
+                    kwcContractLogisticsMapper.updateById(kwcContractLogistics);
+                    return;
+                }
+
+                KwcContractTrade kwcContractTrade = kwcContractTradeMapper.selectById(id);
+                if (Objects.nonNull(kwcContractTrade)) {
+                    kwcContractTrade.setBusinessId(signFlowId);
+                    kwcContractTradeMapper.updateById(kwcContractTrade);
+                }
+            }
+        }
+
+        public static File getFileByHttpURL(String newUrl, String fileName) {
+            //得到最后一个分隔符后的名字
+            File file = null;
+            InputStream inputStream = null;
+            OutputStream outputStream = null;
+            try {
+                file = new File(System.getProperty("java.io.tmpdir") + new String(fileName.getBytes("gbk"), StandardCharsets.UTF_8));
+                URL urlFile = new URL(newUrl);
+                inputStream = urlFile.openStream();
+                outputStream = new FileOutputStream(file);
+
+                int bytesRead = 0;
+                byte[] buffer = new byte[8192];
+                while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
+                    outputStream.write(buffer, 0, bytesRead);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            } finally {
+                try {
+                    if (null != outputStream) {
+                        outputStream.close();
+                    }
+                    if (null != inputStream) {
+                        inputStream.close();
+                    }
+
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }
+            return file;
+        }
     }
 
     public static File getFileByHttpURL(String newUrl, String fileName) {
-        String[] suffix = newUrl.split("/");
         //得到最后一个分隔符后的名字
         File file = null;
         InputStream inputStream = null;
         OutputStream outputStream = null;
         try {
-            file = File.createTempFile("1", fileName);
+            file = new File(System.getProperty("java.io.tmpdir") + new String(fileName.getBytes(), StandardCharsets.UTF_8));
             URL urlFile = new URL(newUrl);
             inputStream = urlFile.openStream();
             outputStream = new FileOutputStream(file);
@@ -191,4 +320,5 @@ public class CommonBusinessService {
         }
         return file;
     }
+
 }

+ 16 - 7
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/KwcContractLogisticsService.java

@@ -1,15 +1,22 @@
 package com.sckw.contract.service;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.contract.dao.KwcContractLogisticsMapper;
+import com.sckw.contract.dao.KwcContractTradeMapper;
 import com.sckw.contract.dubbo.RemoteContractServiceImpl;
+import com.sckw.contract.factory.AsyncFactory;
+import com.sckw.contract.model.dto.req.EsignGetFlowReqDto;
 import com.sckw.contract.model.dto.req.QueryListReqDto;
+import com.sckw.contract.model.dto.res.ESignSubmitResDto;
 import com.sckw.contract.model.dto.res.QueryListResDto;
 import com.sckw.contract.model.entity.KwcContractLogistics;
 import com.sckw.contract.model.entity.KwcContractLogisticsGoods;
 import com.sckw.contract.model.entity.KwcContractLogisticsUnit;
+import com.sckw.contract.model.entity.KwcContractTrade;
 import com.sckw.contract.model.vo.req.*;
 import com.sckw.contract.model.vo.res.*;
 import com.sckw.core.common.enums.enums.DictEnum;
@@ -28,6 +35,7 @@ import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.excel.utils.EasyExcelUtil;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.system.api.RemoteSystemService;
+import com.sckw.system.api.RemoteUserService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
@@ -37,8 +45,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.io.IOException;
+import java.io.*;
 import java.math.BigDecimal;
+import java.net.URL;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -361,12 +370,12 @@ public class KwcContractLogisticsService {
     private void sign(ContractLogisticsReqVo reqVo, Long id) {
         if (DictEnum.SIGNING_WAY_1.getValue().equals(String.valueOf(reqVo.getBaseInfo().getSigningWay()))) {
             commonBusinessService.postToEsign(reqVo.getBaseInfo().getCheckedPhone(),
-                                              reqVo.getBaseInfo().getCarrierPhone(),
-                                              reqVo.getBaseInfo().getCheckedEntId(),
-                                              reqVo.getBaseInfo().getCarrierEntId(),
-                                              reqVo.getContractFile(),
-                                              id,
-                                              reqVo.getBaseInfo().getContractName());
+                    reqVo.getBaseInfo().getCarrierPhone(),
+                    reqVo.getBaseInfo().getCheckedEntId(),
+                    reqVo.getBaseInfo().getCarrierEntId(),
+                    reqVo.getContractFile(),
+                    id,
+                    reqVo.getBaseInfo().getContractName());
         }
 
         //线下签约直接通过

+ 108 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/task/SynchronousContractStatusTask.java

@@ -0,0 +1,108 @@
+package com.sckw.contract.task;
+
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.contract.dao.KwcContractLogisticsMapper;
+import com.sckw.contract.dao.KwcContractTradeMapper;
+import com.sckw.contract.model.entity.KwcContractLogistics;
+import com.sckw.contract.model.entity.KwcContractTrade;
+import com.sckw.contract.service.CommonBusinessService;
+import com.sckw.core.model.enums.ContractStatusEnum;
+import com.sckw.core.utils.CollectionUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author czh
+ * @desc 同步合同状态任务
+ * @date 2023/8/25
+ */
+@Slf4j
+@Component
+@EnableScheduling
+public class SynchronousContractStatusTask {
+
+    @Autowired
+    private KwcContractTradeMapper kwcContractTradeMapper;
+
+    @Autowired
+    private KwcContractLogisticsMapper kwcContractLogisticsMapper;
+
+    @Autowired
+    private CommonBusinessService commonBusinessService;
+
+    @Value("${eSignDetail}")
+    private String eSignDetail;
+
+    @Scheduled(cron = "0/10 * * * * ?")
+    private void process() {
+        synchronousTrade();
+        synchronousLogistics();
+    }
+
+    private void synchronousTrade() {
+        LambdaQueryWrapper<KwcContractTrade> wrapper = new LambdaQueryWrapper<>();
+        wrapper.isNotNull(KwcContractTrade::getBusinessId).
+                ne(KwcContractTrade::getStatus, ContractStatusEnum.SIGNED);
+        List<KwcContractTrade> kwcContractTradeList = kwcContractTradeMapper.selectList(wrapper);
+        if (CollectionUtils.isNotEmpty(kwcContractTradeList)) {
+            Map<String, Object> map = new HashMap<>(2);
+            for (KwcContractTrade kwcContractTrade : kwcContractTradeList) {
+                String businessId = kwcContractTrade.getBusinessId();
+                map.put("flowId", businessId);
+                String res = HttpUtil.get(eSignDetail, map);
+                Long id = kwcContractTrade.getId();
+                log.info("合同{}  返参:{}", id, res);
+                JSONObject jsonObject = JSON.parseObject(res);
+                if (jsonObject.getBoolean("status")) {
+                    JSONObject data = jsonObject.getJSONObject("data");
+                    //合同签署状态 0 - 草稿  1 - 签署中 2 - 完成   3 - 撤销   5 - 过期(签署截至日期到期后触发)  - 拒签
+                    Integer signFlowStatus = data.getInteger("signFlowStatus");
+                    if (signFlowStatus.equals(2)) {
+                        kwcContractTrade.setStatus(ContractStatusEnum.SIGNED.getCode());
+                        kwcContractTradeMapper.updateById(kwcContractTrade);
+                        commonBusinessService.notifyOrder(kwcContractTrade.getId(), kwcContractTrade.getCreateBy());
+                    }
+                }
+            }
+        }
+    }
+
+    private void synchronousLogistics() {
+        LambdaQueryWrapper<KwcContractLogistics> wrapper = new LambdaQueryWrapper<>();
+        wrapper.isNotNull(KwcContractLogistics::getBusinessId).
+                ne(KwcContractLogistics::getStatus, ContractStatusEnum.SIGNED);
+        List<KwcContractLogistics> kwcContractLogisticsList = kwcContractLogisticsMapper.selectList(wrapper);
+        if (CollectionUtils.isNotEmpty(kwcContractLogisticsList)) {
+            Map<String, Object> map = new HashMap<>(2);
+            for (KwcContractLogistics kwcContractLogistics : kwcContractLogisticsList) {
+                String businessId = kwcContractLogistics.getBusinessId();
+                map.put("flowId", businessId);
+                String res = HttpUtil.get(eSignDetail, map);
+                Long id = kwcContractLogistics.getId();
+                log.info("合同{}  返参:{}", id, res);
+                JSONObject jsonObject = JSON.parseObject(res);
+                if (jsonObject.getBoolean("status")) {
+                    JSONObject data = jsonObject.getJSONObject("data");
+                    //合同签署状态 0 - 草稿  1 - 签署中 2 - 完成   3 - 撤销   5 - 过期(签署截至日期到期后触发)  - 拒签
+                    Integer signFlowStatus = data.getInteger("signFlowStatus");
+                    if (signFlowStatus.equals(2)) {
+                        kwcContractLogistics.setStatus(ContractStatusEnum.SIGNED.getCode());
+                        kwcContractLogisticsMapper.updateById(kwcContractLogistics);
+                        commonBusinessService.notifyOrder(kwcContractLogistics.getId(), kwcContractLogistics.getCreateBy());
+                    }
+                }
+            }
+        }
+    }
+}

+ 5 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/model/vo/req/UpdateEntInfoReqVo.java

@@ -16,6 +16,11 @@ public class UpdateEntInfoReqVo implements Serializable {
     @Serial
     private static final long serialVersionUID = -8027260827607157244L;
 
+    /**
+     * 企业名
+     */
+    private String firmName;
+
     /**
      * 法人姓名
      */

+ 1 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/CommonService.java

@@ -74,7 +74,7 @@ public class CommonService {
                     throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.ENT_EXISTS);
                 }
 
-                if (phone.equals(phone1)) {
+                if (StringUtils.isNotBlank(phone) && phone.equals(phone1)) {
                     throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.ACCOUNT_EXISTS);
                 }
             }

+ 5 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java

@@ -133,7 +133,11 @@ public class KwsEnterpriseService {
     public void update(UpdateEntInfoReqVo reqVo) throws SystemException {
         /*1、更新企业信息表*/
         KwsEnterprise kwsEnterprise = checkKwsEnterpriseById(LoginUserHolder.getEntId());
-
+        commonService.checkEntRepeat(reqVo.getFirmName(), "");
+        SysArea sysArea = sysAreaDao.selectById(reqVo.getCityCode());
+        if (Objects.nonNull(sysArea)) {
+            kwsEnterprise.setCityName(sysArea.getMergerName());
+        }
 
         BeanUtils.copyProperties(reqVo, kwsEnterprise);
         if (kwsEnterpriseDao.update(kwsEnterprise) <= 0) {

+ 9 - 1
sckw-modules/sckw-system/src/main/resources/mapper/KwsEnterpriseDao.xml

@@ -267,7 +267,15 @@
   </select>
 
   <select id="checkEntRepeat" resultType="com.sckw.system.model.KwsEnterprise">
-    select * from kws_enterprise where (firm_name = #{entName} or phone = #{phone}) and del_flag = 0 and approval in (1,3,4)
+    select * from kws_enterprise where (
+        1 = 1
+        <if test="entName != null and entName != ''">
+          or firm_name = #{entName}
+        </if>
+        <if test="phone != null and phone != ''">
+          or phone = #{phone}
+        </if>
+         ) and del_flag = 0 and approval in (1,3,4)
   </select>
 
   <select id="selectAllByKeys" resultType="com.sckw.system.model.KwsEnterprise">