Преглед на файлове

同步大中型订单数据

wucl преди 1 година
родител
ревизия
5c8ec0ca29
променени са 24 файла, в които са добавени 714 реда и са изтрити 161 реда
  1. 18 6
      biz-base/src/main/java/com/dayou/controller/HistoryOrderController.java
  2. 31 0
      biz-base/src/test/java/dyoa/DyoaHistoryDataTest.java
  3. 10 0
      dao/src/main/java/com/dayou/mapper/DyoaHistoryMapper.java
  4. 16 0
      dao/src/main/java/com/dayou/mapper/DyoaRecordMapper.java
  5. 50 0
      dao/src/main/resources/mapper/DyoaHistoryMapper.xml
  6. 26 0
      dao/src/main/resources/mapper/DyoaRecordMapper.xml
  7. 48 0
      domain/src/main/java/com/dayou/entity/DyoaRecord.java
  8. 2 0
      domain/src/main/java/com/dayou/enums/MainBusinessEnum.java
  9. 8 0
      pom.xml
  10. 5 0
      service/pom.xml
  11. 384 0
      service/src/main/java/com/dayou/dyoa/DyoaHistoryServiceImpl.java
  12. 10 9
      service/src/main/java/com/dayou/service/IHistoryOrderService.java
  13. 25 0
      service/src/main/java/com/dayou/service/IDyoaRecordService.java
  14. 2 0
      service/src/main/java/com/dayou/service/impl/DepartmentServiceImpl.java
  15. 57 0
      service/src/main/java/com/dayou/service/impl/DyoaRecordServiceImpl.java
  16. 0 145
      service/src/main/java/com/dayou/service/impl/HistoryOrderServiceImpl.java
  17. 3 0
      service/src/main/java/com/dayou/service/impl/MajorServiceImpl.java
  18. 2 0
      service/src/main/java/com/dayou/service/impl/UserServiceImpl.java
  19. 2 0
      service/src/main/java/com/dayou/service/workflow/WorkFlowNodeInstanceServiceImpl.java
  20. 2 0
      service/src/main/java/com/dayou/service/workflow/WorkFlowServiceImpl.java
  21. 2 0
      service/src/main/java/com/dayou/service/workflow/WorkNodeServiceImpl.java
  22. 2 0
      service/src/main/java/com/dayou/service/workflow/WorkNodeTaskServiceImpl.java
  23. 2 0
      service/src/main/java/com/dayou/service/workflow/WorkTaskRecordServiceImpl.java
  24. 7 1
      sql/update_sql.sql

+ 18 - 6
biz-base/src/main/java/com/dayou/controller/HistoryOrderController.java

@@ -4,10 +4,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.common.RestResponse;
 import com.dayou.dto.history.HisMajorOrder;
 import com.dayou.dto.history.HisOrderParam;
-import com.dayou.service.IHistoryOrderService;
+import com.dayou.dyoa.IDyoaHistoryService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -19,12 +20,12 @@ import org.springframework.web.bind.annotation.RestController;
  * created with IntelliJ IDEA.
  */
 @RestController
-@RequestMapping("history/order")
+@RequestMapping("dyoa")
 @Slf4j
 public class HistoryOrderController {
 
     @Autowired
-    private IHistoryOrderService historyOrderService;
+    private IDyoaHistoryService dyoaHistoryService;
 
     /**
      * 获取原系统cookie
@@ -32,7 +33,7 @@ public class HistoryOrderController {
      */
     @GetMapping("/cookie")
     public RestResponse<String> getEverCookie(){
-        String cookie = historyOrderService.getEverCookie();
+        String cookie = dyoaHistoryService.getEverCookie();
         return RestResponse.data(cookie);
     }
 
@@ -41,9 +42,20 @@ public class HistoryOrderController {
      * @param hisOrderParam
      * @return
      */
-    @GetMapping("/major")
+    @GetMapping("/major/page")
     public RestResponse<Page<HisMajorOrder>> page(HisOrderParam hisOrderParam){
-        Page<HisMajorOrder> pages = historyOrderService.hisMajorPage(hisOrderParam);
+        Page<HisMajorOrder> pages = dyoaHistoryService.hisMajorPage(hisOrderParam);
         return RestResponse.data(pages);
     }
+
+    /**
+     * 同步大中型订单
+     * @param id
+     * @return
+     */
+    @GetMapping("/fetch/major/{id}")
+    public RestResponse<Boolean> fetchAboutMajor(@PathVariable("id") String id){
+        Boolean ret = dyoaHistoryService.fetchAboutMajor(id);
+        return RestResponse.data(ret);
+    }
 }

+ 31 - 0
biz-base/src/test/java/dyoa/DyoaHistoryDataTest.java

@@ -0,0 +1,31 @@
+package dyoa;
+
+import com.dayou.BaseApplication;
+import com.dayou.dyoa.IDyoaHistoryService;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import java.util.Map;
+
+@Slf4j
+@SpringBootTest(classes = BaseApplication.class)
+@RunWith(value = SpringJUnit4ClassRunner.class)
+public class DyoaHistoryDataTest {
+
+    @Autowired
+    private IDyoaHistoryService dyoaHistoryService;
+
+    @Test
+    public void getMajorOrder(){
+        Map<String, Object> resultMap = dyoaHistoryService.queryMajorOrder("597848672822104064");
+        for (Map.Entry<String, Object> entry : resultMap.entrySet()) {
+           log.info(entry.getKey() + "=" + entry.getValue());
+        }
+    }
+
+
+}

+ 10 - 0
dao/src/main/java/com/dayou/mapper/DyoaHistoryMapper.java

@@ -0,0 +1,10 @@
+package com.dayou.mapper;
+
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Map;
+
+public interface DyoaHistoryMapper {
+
+    Map<String,Object> queryMajorOrder(@Param("id") String id);
+}

+ 16 - 0
dao/src/main/java/com/dayou/mapper/DyoaRecordMapper.java

@@ -0,0 +1,16 @@
+package com.dayou.mapper;
+
+import com.dayou.entity.DyoaRecord;
+import com.dayou.dao.CustomBaseMapper;
+
+/**
+ * <p>
+ * 数据同步记录 Mapper 接口
+ * </p>
+ *
+ * @author wucl
+ * @since 2024-07-25
+ */
+public interface DyoaRecordMapper extends CustomBaseMapper<DyoaRecord> {
+
+}

+ 50 - 0
dao/src/main/resources/mapper/DyoaHistoryMapper.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dayou.mapper.DyoaHistoryMapper">
+
+    <select id="queryMajorOrder" parameterType="java.lang.String" resultType="map">
+        select id,
+               name,
+               code,
+               sourceType,
+               assign,
+               masterName,
+               managerName,
+               masterOrgName,
+               businessType,
+               spec,
+               evaluateTarget,
+               repeatOrder,
+               fhbq,
+               oral,
+               customerType,
+               customerName,
+               customerName2,
+               contactId,
+               cz,
+               locations,
+               refinance,
+               loanMoney,
+               loanLimit,
+               loanProperty,
+               loanUsage,
+               loanExpired,
+               principal,
+               principalAddress,
+               principalName,
+               principalMobile,
+               propertyName,
+               propertyMobile,
+               urgent,
+               terminalName,
+               terminalType,
+               terminalContactName,
+               members,
+               description,
+               nowNodeName,
+               nowNodeEmpName,
+               createdDatetime
+        from dy_order where id = #{id}
+    </select>
+
+</mapper>

+ 26 - 0
dao/src/main/resources/mapper/DyoaRecordMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dayou.mapper.DyoaRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.DyoaRecord">
+        <result column="id" property="id" />
+        <result column="modified" property="modified" />
+        <result column="created" property="created" />
+        <result column="deleted" property="deleted" />
+        <result column="mbs_type" property="mbsType" />
+        <result column="mbs_id" property="mbsId" />
+        <result column="dyoa_id" property="dyoaId" />
+        <result column="user_id" property="userId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        modified,
+        created,
+        deleted,
+        mbs_type, mbs_id, dyoa_id, user_id
+    </sql>
+
+</mapper>

+ 48 - 0
domain/src/main/java/com/dayou/entity/DyoaRecord.java

@@ -0,0 +1,48 @@
+package com.dayou.entity;
+import com.dayou.common.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.dayou.annotation.ExcelSheet;
+import com.dayou.annotation.ExportCell;
+import com.dayou.annotation.ImportCell;
+/**
+ * <p>
+ * 数据同步记录
+ * </p>
+ *
+ * @author wucl
+ * @since 2024-07-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "数据同步记录")
+public class DyoaRecord extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 业务
+     */
+    @ImportCell
+    @ExportCell(columnName = "业务")
+    private String mbsType;
+
+    /**
+     * mbsId
+     */
+    private Long mbsId;
+
+    /**
+     * dyoaId
+     */
+    @ImportCell
+    @ExportCell(columnName = "dyoaId")
+    private String dyoaId;
+
+    /**
+     * 操作人
+     */
+    private Long userId;
+
+
+}

+ 2 - 0
domain/src/main/java/com/dayou/enums/MainBusinessEnum.java

@@ -30,6 +30,8 @@ public enum MainBusinessEnum implements CodeMsgEnumInterface<String,String> {
     SETTING_MANAGEMENT("SETTING_MANAGEMENT","综合设置"),
 
     ALL_BUSINESS("ALL_BUSINESS","全局业务"),
+
+    MAJOR_ORDER("MAJOR_ORDER","大中型订单")
     ;
 
    MainBusinessEnum(String code, String name) {

+ 8 - 0
pom.xml

@@ -108,6 +108,14 @@
                 <version>2.2</version>
             </dependency>
 
+            <!--引入多数据源依赖【操作多个数据库】-->
+            <!-- https://mvnrepository.com/artifact/com.baomidou/dynamic-datasource-spring-boot-starter -->
+            <dependency>
+                <groupId>com.baomidou</groupId>
+                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+                <version>4.1.3</version>
+            </dependency>
+
             <dependency>
                 <groupId>mysql</groupId>
                 <artifactId>mysql-connector-java</artifactId>

+ 5 - 0
service/pom.xml

@@ -108,6 +108,11 @@
             <version>8.0.0</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+        </dependency>
+
     </dependencies>
     <build>
         <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->

+ 384 - 0
service/src/main/java/com/dayou/dyoa/DyoaHistoryServiceImpl.java

@@ -0,0 +1,384 @@
+package com.dayou.dyoa;
+
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.ArrayUtil;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONException;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.dayou.common.BaseEntity;
+import com.dayou.dto.history.HisMajorOrder;
+import com.dayou.dto.history.HisOrderParam;
+import com.dayou.entity.*;
+import com.dayou.enums.MainBusinessEnum;
+import com.dayou.exception.ErrorCode;
+import com.dayou.mapper.DyoaHistoryMapper;
+import com.dayou.service.IDepartmentService;
+import com.dayou.service.IDyoaRecordService;
+import com.dayou.service.IUserService;
+import com.dayou.service.impl.MajorServiceImpl;
+import com.dayou.service.workflow.*;
+import com.dayou.utils.HttpKit;
+import com.sun.corba.se.spi.orbutil.threadpool.Work;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.io.UnsupportedEncodingException;
+import java.lang.reflect.Field;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import static com.dayou.common.Constants.ASSIGN;
+import static com.dayou.common.Constants.BY_TURNS;
+import static com.dayou.enums.MainBusinessEnum.MAJOR_BUSINESS;
+import static com.dayou.enums.workflow.NodeStateEnum.PENDING;
+import static com.dayou.enums.workflow.NodeTaskVersion.LATEST;
+
+@DS("dyoa")
+@Service
+@Slf4j
+public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
+
+
+    private static String COOKIE ;
+
+
+    private static final String HISTORY_LOGIN_URL = "http://noa.scdayou.com/login?loginName=admin&password=ABC666000";
+
+    private static final String HISTORY_MAJOR_ORDER_URL = "http://noa.scdayou.com/dyoa/order/pageQuery";
+
+    private Map<String,Long> users = new HashMap<>();
+
+    private Map<String,Long> departments = new HashMap<>();
+
+    private Map<String,Long> majorBusinessNodes = new HashMap<>();
+
+    private Map<String,Long> workFlows = new HashMap<>();
+
+    private static final Map<String,String> MAJOR_ORDER_COLUM = new HashMap<>();
+
+
+    @Autowired
+    private IUserService userService;
+
+    @Autowired
+    private IDepartmentService departmentService;
+
+    @Autowired
+    private DyoaHistoryMapper dyoaHistoryMapper;
+
+    @Autowired
+    private IDyoaRecordService dyoaRecordService;
+
+    @Autowired
+    private IWorkFlowNodeInstanceService workFlowNodeInstanceService;
+
+    @Autowired
+    private IWorkFlowService workFlowService;
+
+    @Autowired
+    private IWorkNodeService workNodeService;
+
+    @Autowired
+    private MajorServiceImpl majorServiceImpl;
+
+    @Autowired
+    private IWorkNodeTaskService workNodeTaskService;
+
+    @Autowired
+    private IWorkTaskRecordService workTaskRecordService;
+
+    static {
+//        MAJOR_ORDER_COLUM.put("id","id");
+        MAJOR_ORDER_COLUM.put("name","name");
+        MAJOR_ORDER_COLUM.put("code","orderId");
+        MAJOR_ORDER_COLUM.put("sourceType","financial");
+        MAJOR_ORDER_COLUM.put("assign","allotType");
+        MAJOR_ORDER_COLUM.put("masterName","clientManagerId");
+        MAJOR_ORDER_COLUM.put("managerName","principalId");
+        MAJOR_ORDER_COLUM.put("masterOrgName","departmentId");
+        MAJOR_ORDER_COLUM.put("businessType","businessObjectType");
+        MAJOR_ORDER_COLUM.put("businessType2","businessGener");
+        MAJOR_ORDER_COLUM.put("spec","specialType");
+        MAJOR_ORDER_COLUM.put("evaluateTarget","evaluateAim");
+        MAJOR_ORDER_COLUM.put("repeatOrder","entrustAgain");
+        MAJOR_ORDER_COLUM.put("fhbq","multipleRemoval");
+        MAJOR_ORDER_COLUM.put("oral","informalEvaluate");
+        MAJOR_ORDER_COLUM.put("customerType","clienteleType");
+//        MAJOR_ORDER_COLUM.put("customerName","clienteleId");
+//        MAJOR_ORDER_COLUM.put("customerName2","clienteleSubId");
+//        MAJOR_ORDER_COLUM.put("contactId","clienteleContactId");
+        MAJOR_ORDER_COLUM.put("cz","dispenseBenefit");
+        MAJOR_ORDER_COLUM.put("locations","nonnative");
+        MAJOR_ORDER_COLUM.put("refinance","refinance");
+        MAJOR_ORDER_COLUM.put("loanMoney","loanLimit");
+        MAJOR_ORDER_COLUM.put("loanLimit","loanPeriod");
+        MAJOR_ORDER_COLUM.put("loanProperty","loanNature");
+        MAJOR_ORDER_COLUM.put("loanUsage","loanAim");
+        MAJOR_ORDER_COLUM.put("loanExpired","loanExpire");
+        MAJOR_ORDER_COLUM.put("principal","bailor");
+        MAJOR_ORDER_COLUM.put("principalAddress","bailorAddress");
+        MAJOR_ORDER_COLUM.put("principalName","bailorContactName");
+        MAJOR_ORDER_COLUM.put("principalMobile","bailorContactTel");
+        MAJOR_ORDER_COLUM.put("propertyName","owner");
+        MAJOR_ORDER_COLUM.put("propertyMobile","ownerTel");
+        MAJOR_ORDER_COLUM.put("urgent","urgent");
+//        MAJOR_ORDER_COLUM.put("terminalName","terminalClienteleId");
+        MAJOR_ORDER_COLUM.put("terminalType","terminalClienteleType");
+//        MAJOR_ORDER_COLUM.put("terminalContactName","terminalClienteleContactId");
+        MAJOR_ORDER_COLUM.put("members","members");
+        MAJOR_ORDER_COLUM.put("description","remark");
+    }
+
+    @Override
+    public Page<HisMajorOrder> hisMajorPage(HisOrderParam param) {
+        checkCookie();
+        pageSet(param);
+        Page<HisMajorOrder> page = new Page<>();
+        try {
+            Map<String, Object> map = removeMapKey(BeanUtil.beanToMap(param));
+            String respond = HttpKit.sendPost(HISTORY_MAJOR_ORDER_URL, map,COOKIE);
+            JSONObject jsonObject = JSON.parseObject(respond);
+            JSONObject data = jsonObject.getJSONObject("data");
+            JSONArray dataArray = data.getJSONArray("data");
+            if (CollectionUtil.isNotEmpty(dataArray)){
+                List<HisMajorOrder> hisMajorOrders = dataArray.toJavaList(HisMajorOrder.class);
+                page.setRecords(hisMajorOrders);
+                page.setTotal(Long.valueOf(String.valueOf(data.get("total"))));
+            }
+        } catch (JSONException e) {
+            historySystemLogin();
+            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"远程连接超时,请刷新页面。");
+        } catch (Exception e) {
+            log.error("远程调用失败.");
+            e.printStackTrace();
+        }
+
+        return page;
+    }
+
+    @Override
+    public String getEverCookie() {
+        checkCookie();
+        return COOKIE;
+    }
+
+    private void checkCookie(){
+        if (StrUtil.isBlank(COOKIE)){
+            historySystemLogin();
+        }
+    }
+    /**
+     * 登录原系统获取COOKIE
+     * @return
+     */
+    private void historySystemLogin(){
+
+        try {
+            // 创建HttpClient对象
+            HttpClient httpClient = new DefaultHttpClient();
+
+            // 创建HttpGet请求对象
+            HttpPost httpPost = new HttpPost(HISTORY_LOGIN_URL);
+
+            // 发送请求并获取响应
+            HttpResponse response = httpClient.execute(httpPost);
+
+            // 获取cookie
+            String cookies = Arrays.toString(response.getHeaders("Set-Cookie"));
+            if (cookies != null) {
+                String pattern = "(JSESSIONID)(.*?)( )";
+                Pattern r = Pattern.compile(pattern);
+                Matcher m = r.matcher(cookies);
+                if (m.find()) {
+                    COOKIE =  m.group(0).trim().split(";")[0];
+                }
+            }
+
+            // 关闭连接
+            httpClient.getConnectionManager().shutdown();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private Map<String, Object> removeMapKey(Map param) {
+        Set set = param.keySet();
+
+        for (Iterator iterator = set.iterator(); iterator.hasNext(); ) {
+            Object obj = (Object) iterator.next();
+            Object value = (Object) param.get(obj);
+            if (value == null || value.equals("") || value.equals("null") || obj.toString().length() == 0) {
+                iterator.remove();
+            }else {
+                if (value instanceof String){
+                    try {
+                        String xValue = new String (((String) value).getBytes("ISO8859-1"),"UTF-8");
+                        param.put(obj,xValue);
+                    } catch (UnsupportedEncodingException e) {
+                        throw new RuntimeException(e);
+                    }
+                }
+            }
+        }
+
+        return param;
+    }
+
+    private void pageSet(HisOrderParam param){
+        param.setLimit(param.getSize());
+        param.setStart((param.getCurrent()-1)*param.getLimit());
+    }
+
+
+
+    public Map<String,Object> queryMajorOrder(String majorId){
+        Map<String, Object> resultMap = dyoaHistoryMapper.queryMajorOrder(majorId);
+        return resultMap;
+    }
+
+    @Override
+    public Boolean fetchAboutMajor(String id) {
+        dyoaRecordService.isExist(MainBusinessEnum.MAJOR_ORDER,id);
+        try {
+            //1. 获取订单信息,插入major表。
+            Map<String, Object> dyoaMajorOrder = dyoaHistoryMapper.queryMajorOrder(id);
+            Long mbsId = this.doCreateMajorOrder(dyoaMajorOrder);
+            //2. 创建节点
+            String dyoaNodeName = (String) dyoaMajorOrder.get("nowNodeName");
+            Long instanceNodeId = this.doCreateMajorInstanceNode(mbsId, dyoaNodeName);
+            //3. 创建任务
+            String dyoaHandlerName = (String) dyoaMajorOrder.get("nowNodeEmpName");
+            this.doCreateNodeTask(instanceNodeId,dyoaNodeName,dyoaHandlerName);
+            return Boolean.TRUE;
+        } catch (NoSuchFieldException e) {
+            throw new RuntimeException(e);
+        } catch (IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public Long doCreateMajorOrder(Map<String,Object> dyMajorOrder) throws NoSuchFieldException, IllegalAccessException {
+        Major major = new Major();
+        Class<Major> mClass = Major.class;
+        for (Map.Entry<String, String> entry : MAJOR_ORDER_COLUM.entrySet()){
+            Object columValue = dyMajorOrder.get(entry.getKey());
+            if (columValue!=null){
+                String mbsColum = entry.getValue();
+                Field field = mClass.getDeclaredField(mbsColum);
+
+                field.setAccessible(true);
+                switch (mbsColum){
+                    case "allotType":
+                        field.set(major,(Boolean) columValue?ASSIGN:BY_TURNS);break;
+                    case "financial":
+                        field.set(major,columValue.equals("FINANCE"));break;
+                    case "clientManagerId":
+                        field.set(major,getMbsUserId((String) columValue));break;
+                    case "principalId":
+                        field.set(major,getMbsUserId((String) columValue));break;
+                    case "departmentId":
+                        field.set(major,getMbsDepartmentId((String) columValue));break;
+                    case "loanLimit":
+                    case "loanPeriod":
+                        field.set(major, BigDecimal.valueOf((Double) columValue));break;
+                    case "members":
+                        field.set(major,getMbsUserIds((String) columValue));break;
+                    default:
+                        field.set(major,columValue);
+                }
+
+            }
+        }
+        major.setCreated((Date) dyMajorOrder.get("createdDatetime"));
+        majorServiceImpl.save(major);
+        //插入同步记录表
+        Long mbsId = major.getId();
+        dyoaRecordService.insert(MainBusinessEnum.MAJOR_ORDER, mbsId, (String) dyMajorOrder.get("id"));
+        return mbsId;
+    
+    }
+
+    private Long getMbsUserId(String userName){
+        if (CollectionUtil.isEmpty(users)){
+            List<User> list = userService.list(new LambdaQueryWrapper<User>().select(BaseEntity::getId, User::getName));
+            users = list.stream().collect(Collectors.toMap(User::getName, User::getId));
+        }
+        return users.get(userName);
+    }
+
+    private Long getMbsDepartmentId(String departmentName){
+        if (CollectionUtil.isEmpty(departments)){
+            List<Department> list = departmentService.list(new LambdaQueryWrapper<Department>().select(BaseEntity::getId, Department::getName));
+            departments = list.stream().collect(Collectors.toMap(Department::getName, Department::getId));
+        }
+        return departments.get(departmentName);
+    }
+
+    private Long getMbsWorkFlows(String flowCode){
+        if (CollectionUtil.isEmpty(workFlows)){
+            List<WorkFlow> list = workFlowService.list(new LambdaQueryWrapper<WorkFlow>().select(BaseEntity::getId, WorkFlow::getCode));
+            workFlows = list.stream().collect(Collectors.toMap(WorkFlow::getCode, WorkFlow::getId));
+        }
+        return workFlows.get(flowCode);
+    }
+
+    private Long getMbsWorkNodes(String nodeName){
+        if (CollectionUtil.isEmpty(majorBusinessNodes)){
+            List<WorkNode> list = workNodeService.list(new LambdaQueryWrapper<WorkNode>().select(BaseEntity::getId, WorkNode::getName)
+                    .eq(WorkNode::getFlowId,getMbsWorkFlows(MAJOR_BUSINESS.name())));
+            majorBusinessNodes = list.stream().collect(Collectors.toMap(WorkNode::getName, WorkNode::getId));
+        }
+        return majorBusinessNodes.get(nodeName);
+    }
+
+    private String getMbsUserIds(String userNames){
+        List<Long> userIds = new ArrayList<>();
+        Arrays.asList(userNames.split(",")).forEach(userName -> {
+            Long mbsUserId = getMbsUserId(userName);
+            userIds.add(mbsUserId);
+        });
+        return JSON.toJSONString(userIds);
+    }
+
+    private Long doCreateMajorInstanceNode(Long businessId,String dyoaNodeName){
+        Long nodeId = getMbsWorkNodes(dyoaNodeName);
+        Long flowId = getMbsWorkFlows(MAJOR_BUSINESS.name());
+        WorkFlowNodeInstance instance = new WorkFlowNodeInstance();
+        instance.setFlowId(flowId);
+        instance.setBusinessId(businessId);
+        instance.setNodeId(nodeId);
+        instance.setBusinessType(MAJOR_BUSINESS.name());
+        instance.setSequence(0);
+        instance.setState(PENDING.name());
+        workFlowNodeInstanceService.add(instance);
+        return instance.getId();
+    }
+
+    private void doCreateNodeTask(Long instanceNodeId, String dyoaNodeName,String dyoaHandlerName) {
+        Long nodeId = getMbsWorkNodes(dyoaNodeName);
+        WorkNodeTask task = workNodeTaskService.getOne(new LambdaQueryWrapper<WorkNodeTask>().eq(WorkNodeTask::getNodeId, nodeId)
+                .eq(WorkNodeTask::getVersion, LATEST.name()).select(BaseEntity::getId));
+        WorkTaskRecord workTaskRecord = new WorkTaskRecord();
+        workTaskRecord.setInstanceId(instanceNodeId);
+        workTaskRecord.setTaskId(task.getId());
+        workTaskRecord.setHandlerId(getMbsUserId(dyoaHandlerName));
+        workTaskRecordService.save(workTaskRecord);
+    }
+
+}

+ 10 - 9
service/src/main/java/com/dayou/service/IHistoryOrderService.java

@@ -1,19 +1,20 @@
-package com.dayou.service;
+package com.dayou.dyoa;
+
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.dto.history.HisMajorOrder;
 import com.dayou.dto.history.HisOrderParam;
 
-/**
- * 类说明:
- *
- * @author: wucl
- * @since: 2024/5/8
- * created with IntelliJ IDEA.
- */
-public interface IHistoryOrderService {
+import java.util.Map;
+
+public interface IDyoaHistoryService {
+
 
     Page<HisMajorOrder> hisMajorPage(HisOrderParam param);
 
     String getEverCookie();
+
+    Map<String,Object> queryMajorOrder(String majorId);
+
+    Boolean fetchAboutMajor(String id);
 }

+ 25 - 0
service/src/main/java/com/dayou/service/IDyoaRecordService.java

@@ -0,0 +1,25 @@
+package com.dayou.service;
+import com.dayou.entity.DyoaRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dayou.enums.MainBusinessEnum;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * <p>
+ * 数据同步记录 服务类
+ * </p>
+ *
+ * @author wucl
+ * @since 2024-07-25
+ */
+public interface IDyoaRecordService extends IService<DyoaRecord> {
+
+        Page<DyoaRecord> selectPage(Page page,DyoaRecord dyoaRecord);
+
+        void insert(MainBusinessEnum businessEnum, Long mbsId, String dyoaId);
+
+        void isExist(MainBusinessEnum businessEnum,String dyodId);
+}
+

+ 2 - 0
service/src/main/java/com/dayou/service/impl/DepartmentServiceImpl.java

@@ -1,5 +1,6 @@
 package com.dayou.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.dayou.common.BaseEntity;
@@ -38,6 +39,7 @@ import com.dayou.enums.BatchTaskTypeEnum;
  * @author wucl
  * @since 2022-11-29
  */
+@DS("mbs")
 @Service
 public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Department> implements IDepartmentService {
 

+ 57 - 0
service/src/main/java/com/dayou/service/impl/DyoaRecordServiceImpl.java

@@ -0,0 +1,57 @@
+package com.dayou.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.dayou.entity.DyoaRecord;
+import com.dayou.enums.MainBusinessEnum;
+import com.dayou.exception.ErrorCode;
+import com.dayou.mapper.DyoaRecordMapper;
+import com.dayou.service.IDyoaRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.utils.LoginContext;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+
+
+/**
+ * <p>
+ * 数据同步记录 服务实现类
+ * </p>
+ *
+ * @author wucl
+ * @since 2024-07-25
+ */
+@DS("mbs")
+@Service
+public class DyoaRecordServiceImpl extends ServiceImpl<DyoaRecordMapper, DyoaRecord> implements IDyoaRecordService {
+
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Page<DyoaRecord> selectPage(Page page,DyoaRecord dyoaRecord){
+        return this.page(page, new QueryWrapper<DyoaRecord>(dyoaRecord));
+    }
+
+    @Override
+    public void insert(MainBusinessEnum businessEnum,Long mbsId,String dyoaId){
+        DyoaRecord dyoaRecord = new DyoaRecord();
+        dyoaRecord.setDyoaId(dyoaId);
+        dyoaRecord.setMbsId(mbsId);
+        dyoaRecord.setMbsType(businessEnum.name());
+        dyoaRecord.setUserId(LoginContext.getCurrentUserId());
+        this.save(dyoaRecord);
+    }
+
+    @Override
+    public void isExist(MainBusinessEnum businessEnum,String dyodId){
+        DyoaRecord record = this.getOne(new LambdaQueryWrapper<DyoaRecord>().eq(DyoaRecord::getMbsType, businessEnum.name()
+        ).eq(DyoaRecord::getDyoaId, dyodId).isNotNull(DyoaRecord::getMbsId));
+
+        if (record!=null){
+            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"数据已同步。");
+        }
+    }
+
+
+}

+ 0 - 145
service/src/main/java/com/dayou/service/impl/HistoryOrderServiceImpl.java

@@ -1,145 +0,0 @@
-package com.dayou.service.impl;
-
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollectionUtil;
-import cn.hutool.core.util.StrUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONException;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.dayou.dto.history.HisMajorOrder;
-import com.dayou.dto.history.HisOrderParam;
-import com.dayou.exception.ErrorCode;
-import com.dayou.service.IHistoryOrderService;
-import com.dayou.utils.HttpKit;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.springframework.stereotype.Service;
-
-import java.io.UnsupportedEncodingException;
-import java.util.*;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * 类说明:
- *
- * @author: wucl
- * @since: 2024/5/8
- * created with IntelliJ IDEA.
- */
-@Slf4j
-@Service
-public class HistoryOrderServiceImpl implements IHistoryOrderService {
-
-    private static String COOKIE ;
-
-
-    private static final String HISTORY_LOGIN_URL = "http://noa.scdayou.com/login?loginName=admin&password=ABC666000";
-
-    private static final String HISTORY_MAJOR_ORDER_URL = "http://noa.scdayou.com/dyoa/order/pageQuery";
-
-    @Override
-    public Page<HisMajorOrder> hisMajorPage(HisOrderParam param) {
-        checkCookie();
-        pageSet(param);
-        Page<HisMajorOrder> page = new Page<>();
-        try {
-            Map<String, Object> map = removeMapKey(BeanUtil.beanToMap(param));
-            String respond = HttpKit.sendPost(HISTORY_MAJOR_ORDER_URL, map,COOKIE);
-            JSONObject jsonObject = JSON.parseObject(respond);
-            JSONObject data = jsonObject.getJSONObject("data");
-            JSONArray dataArray = data.getJSONArray("data");
-            if (CollectionUtil.isNotEmpty(dataArray)){
-                List<HisMajorOrder> hisMajorOrders = dataArray.toJavaList(HisMajorOrder.class);
-                page.setRecords(hisMajorOrders);
-                page.setTotal(Long.valueOf(String.valueOf(data.get("total"))));
-            }
-        } catch (JSONException e) {
-            historySystemLogin();
-            ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"远程连接超时,请刷新页面。");
-        } catch (Exception e) {
-            log.error("远程调用失败.");
-            e.printStackTrace();
-        }
-
-        return page;
-    }
-
-    @Override
-    public String getEverCookie() {
-        checkCookie();
-        return COOKIE;
-    }
-
-    private void checkCookie(){
-        if (StrUtil.isBlank(COOKIE)){
-            historySystemLogin();
-        }
-    }
-    /**
-     * 登录原系统获取COOKIE
-     * @return
-     */
-    private void historySystemLogin(){
-
-        try {
-            // 创建HttpClient对象
-            HttpClient httpClient = new DefaultHttpClient();
-
-            // 创建HttpGet请求对象
-            HttpPost httpPost = new HttpPost(HISTORY_LOGIN_URL);
-
-            // 发送请求并获取响应
-            HttpResponse response = httpClient.execute(httpPost);
-
-            // 获取cookie
-            String cookies = Arrays.toString(response.getHeaders("Set-Cookie"));
-            if (cookies != null) {
-                String pattern = "(JSESSIONID)(.*?)( )";
-                Pattern r = Pattern.compile(pattern);
-                Matcher m = r.matcher(cookies);
-                if (m.find()) {
-                    COOKIE =  m.group(0).trim().split(";")[0];
-                }
-            }
-
-            // 关闭连接
-            httpClient.getConnectionManager().shutdown();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-    }
-
-    private Map<String, Object> removeMapKey(Map param) {
-        Set set = param.keySet();
-
-        for (Iterator iterator = set.iterator(); iterator.hasNext(); ) {
-            Object obj = (Object) iterator.next();
-            Object value = (Object) param.get(obj);
-            if (value == null || value.equals("") || value.equals("null") || obj.toString().length() == 0) {
-                iterator.remove();
-            }else {
-                if (value instanceof String){
-                    try {
-                        String xValue = new String (((String) value).getBytes("ISO8859-1"),"UTF-8");
-                        param.put(obj,xValue);
-                    } catch (UnsupportedEncodingException e) {
-                        throw new RuntimeException(e);
-                    }
-                }
-            }
-        }
-
-        return param;
-    }
-
-    private void pageSet(HisOrderParam param){
-        param.setLimit(param.getSize());
-        param.setStart((param.getCurrent()-1)*param.getLimit());
-    }
-}

+ 3 - 0
service/src/main/java/com/dayou/service/impl/MajorServiceImpl.java

@@ -3,6 +3,7 @@ package com.dayou.service.impl;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.dayou.common.BaseEntity;
 import com.dayou.dto.*;
@@ -21,6 +22,7 @@ import com.dayou.service.workflow.IWorkNodeService;
 import com.dayou.service.workflow.IWorkTaskRecordService;
 import com.dayou.utils.LoginContext;
 import com.dayou.vo.MajorVO;
+import lombok.Data;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -41,6 +43,7 @@ import static com.dayou.common.Constants.BY_TURNS;
  * @author wucl
  * @since 2023-10-30
  */
+@DS("mbs")
 @Service
 public class MajorServiceImpl extends ServiceImpl<MajorMapper, Major> implements IMajorService {
 

+ 2 - 0
service/src/main/java/com/dayou/service/impl/UserServiceImpl.java

@@ -2,6 +2,7 @@ package com.dayou.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -65,6 +66,7 @@ import static com.dayou.exception.ErrorCode.*;
  * @author wucl
  * @since 2022-11-29
  */
+@DS("mbs")
 @Service
 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
 

+ 2 - 0
service/src/main/java/com/dayou/service/workflow/WorkFlowNodeInstanceServiceImpl.java

@@ -2,6 +2,7 @@ package com.dayou.service.workflow;
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.dayou.common.BaseEntity;
 import com.dayou.common.FixedWorkNode;
@@ -40,6 +41,7 @@ import static com.dayou.enums.workflow.WorkflowNodeEnum.*;
  * @author wucl
  * @since 2023-10-17
  */
+@DS("mbs")
 @Service
 public class WorkFlowNodeInstanceServiceImpl extends ServiceImpl<WorkFlowNodeInstanceMapper, WorkFlowNodeInstance> implements IWorkFlowNodeInstanceService {
 

+ 2 - 0
service/src/main/java/com/dayou/service/workflow/WorkFlowServiceImpl.java

@@ -2,6 +2,7 @@ package com.dayou.service.workflow;
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dayou.common.BaseEntity;
 import com.dayou.dto.HandlerPermissionDTO;
@@ -47,6 +48,7 @@ import static com.dayou.enums.workflow.NodeLogEnum.*;
  * @author wucl
  * @since 2023-10-17
  */
+@DS("mbs")
 @Service
 public class WorkFlowServiceImpl extends ServiceImpl<WorkFlowMapper, WorkFlow> implements IWorkFlowService {
 

+ 2 - 0
service/src/main/java/com/dayou/service/workflow/WorkNodeServiceImpl.java

@@ -2,6 +2,7 @@ package com.dayou.service.workflow;
 
 import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.dayou.common.BaseEntity;
@@ -44,6 +45,7 @@ import static com.dayou.enums.workflow.WorkflowNodeEnum.*;
  * @author wucl
  * @since 2023-10-17
  */
+@DS("mbs")
 @Service
 public class WorkNodeServiceImpl extends ServiceImpl<WorkNodeMapper, WorkNode> implements IWorkNodeService {
 

+ 2 - 0
service/src/main/java/com/dayou/service/workflow/WorkNodeTaskServiceImpl.java

@@ -1,5 +1,6 @@
 package com.dayou.service.workflow;
 
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dayou.common.BaseEntity;
 import com.dayou.entity.WorkNodeTask;
@@ -26,6 +27,7 @@ import java.util.stream.Collectors;
  * @author wucl
  * @since 2023-10-17
  */
+@DS("mbs")
 @Service
 public class WorkNodeTaskServiceImpl extends ServiceImpl<WorkNodeTaskMapper, WorkNodeTask> implements IWorkNodeTaskService {
 

+ 2 - 0
service/src/main/java/com/dayou/service/workflow/WorkTaskRecordServiceImpl.java

@@ -2,6 +2,7 @@ package com.dayou.service.workflow;
 
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.dayou.bo.SimpleParentModel;
 import com.dayou.dto.AssetsSelectDTO;
 import com.dayou.dto.HandlerPermissionDTO;
@@ -31,6 +32,7 @@ import java.util.stream.Collectors;
  * @author wucl
  * @since 2023-10-17
  */
+@DS("mbs")
 @Service
 public class WorkTaskRecordServiceImpl extends ServiceImpl<WorkTaskRecordMapper, WorkTaskRecord> implements IWorkTaskRecordService {
 

+ 7 - 1
sql/update_sql.sql

@@ -571,4 +571,10 @@ ALTER TABLE `personal_production` ADD is_online bit(1) NULL COMMENT '是否是
   以上SQL已同步到测试环境
   同步日期:2024-07-16
   操作人:苟耕铨
- */
+ */
+/**
+    日期:2024-07-25
+    修改人:吴长林
+    未更新到test-env
+ */
+ALTER TABLE major MODIFY COLUMN clientele_contact_id bigint(20) NULL;