소스 검색

Merge branch 'master' of http://47.108.172.52:3000/dayou/item-management-1phase

# Conflicts:
#	biz-base/src/main/resources/application-local.yml
#	service/src/main/java/com/dayou/dyoa/DyoaHistoryServiceImpl.java
#	service/src/main/java/com/dayou/dyoa/IDyoaHistoryService.java
GouGengquan 1 년 전
부모
커밋
358c4e9ae8

+ 116 - 105
biz-base/src/test/java/history/SyncHistoryTest.java

@@ -1,107 +1,118 @@
-//package history;
-//
-//import com.alibaba.fastjson.JSON;
-//import com.alibaba.fastjson.JSONArray;
-//import com.alibaba.fastjson.JSONException;
-//import com.alibaba.fastjson.JSONObject;
-//import com.dayou.BaseApplication;
-//import com.dayou.dto.history.HisMajorOrder;
-//import com.dayou.utils.HttpKit;
-//import lombok.extern.slf4j.Slf4j;
-//import org.apache.http.HttpEntity;
-//import org.apache.http.HttpResponse;
-//import org.apache.http.client.HttpClient;
-//import org.apache.http.client.methods.HttpGet;
-//import org.apache.http.client.methods.HttpPost;
-//import org.apache.http.impl.client.DefaultHttpClient;
-//import org.junit.runner.RunWith;
-//import org.springframework.boot.test.context.SpringBootTest;
-//import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-//
-//import java.io.BufferedReader;
-//import java.io.IOException;
-//import java.io.InputStreamReader;
-//import java.io.PrintWriter;
-//import java.net.HttpURLConnection;
-//import java.net.URL;
-//import java.net.URLConnection;
-//import java.util.Arrays;
-//import java.util.HashMap;
-//import java.util.List;
-//import java.util.Map;
-//import java.util.regex.Matcher;
-//import java.util.regex.Pattern;
-//
-///**
-// * 类说明:
-// *
-// * @author: wucl
-// * @since: 2024/5/7
-// * created with IntelliJ IDEA.
-// */
-//@Slf4j
-//@SpringBootTest(classes = BaseApplication.class)
-//@RunWith(value = SpringJUnit4ClassRunner.class)
-//public class SyncHistoryTest {
-//
-//    private static final String HISTORY_MAJOR_ORDER_URL = "http://noa.scdayou.com/dyoa/order/pageQuery";
-//
-//    private static final String HISTORY_LOGIN_URL = "http://noa.scdayou.com/login";
-//
-//    private static String COOKIE ;
-//
-//
-//    public static void main(String[] args) {
-//        COOKIE = historySystemLogin();
-//        syncMajorOrderTest();
-////        try {
-////            JSONObject jsonObject = JSON.parseObject("<!DOCTYPE html>\n" +"<html>");
-////        } catch (JSONException e) {
-////            log.error("JSONException");
-////        }
-//    }
-//
-//    public static void syncMajorOrderTest(){
-//        Map<String,Object> params = new HashMap<>();
-//        params.put("limit","15");
-//        params.put("orderBy","-createdDatetime");
-//        params.put("start","0");
-//        String respond = HttpKit.sendPost(HISTORY_MAJOR_ORDER_URL, params,COOKIE);
-//        JSONObject jsonObject = JSON.parseObject(respond);
-//        JSONObject data = jsonObject.getJSONObject("data");
-//        JSONArray data1 = data.getJSONArray("data");
-//        List<HisMajorOrder> hisMajorOrders = data1.toJavaList(HisMajorOrder.class);
-//        log.info(hisMajorOrders.toString());
-//    }
-//
-//    public static String historySystemLogin(){
-//
+package history;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONException;
+import com.alibaba.fastjson.JSONObject;
+import com.dayou.BaseApplication;
+import com.dayou.dto.history.HisMajorOrder;
+import com.dayou.dyoa.IDyoaHistoryService;
+import com.dayou.utils.HttpKit;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+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.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2024/5/7
+ * created with IntelliJ IDEA.
+ */
+@Slf4j
+@SpringBootTest(classes = BaseApplication.class)
+@RunWith(value = SpringJUnit4ClassRunner.class)
+public class SyncHistoryTest {
+
+    private static final String HISTORY_MAJOR_ORDER_URL = "http://noa.scdayou.com/dyoa/order/pageQuery";
+
+    private static final String HISTORY_LOGIN_URL = "http://noa.scdayou.com/login";
+
+    private static String COOKIE ;
+
+    @Autowired
+    private IDyoaHistoryService dyoaHistoryService;
+
+
+    public static void main(String[] args) {
+        COOKIE = historySystemLogin();
+        syncMajorOrderTest();
 //        try {
-//            // 创建HttpClient对象
-//            HttpClient httpClient = new DefaultHttpClient();
-//
-//            // 创建HttpGet请求对象
-//            HttpPost httpPost = new HttpPost(HISTORY_LOGIN_URL+"?loginName=admin&password=ABC666000");
-//
-//            // 发送请求并获取响应
-//            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 对象
-//                Matcher m = r.matcher(cookies);
-//                if (m.find()) {
-//                    return m.group(0);
-//                }
-//            }
-//            // 关闭连接
-//            httpClient.getConnectionManager().shutdown();
-//        } catch (Exception e) {
-//            e.printStackTrace();
+//            JSONObject jsonObject = JSON.parseObject("<!DOCTYPE html>\n" +"<html>");
+//        } catch (JSONException e) {
+//            log.error("JSONException");
 //        }
-//        return null;
-//    }
-//}
+    }
+
+    public static void syncMajorOrderTest(){
+        Map<String,Object> params = new HashMap<>();
+        params.put("limit","15");
+        params.put("orderBy","-createdDatetime");
+        params.put("start","0");
+        String respond = HttpKit.sendPost(HISTORY_MAJOR_ORDER_URL, params,COOKIE);
+        JSONObject jsonObject = JSON.parseObject(respond);
+        JSONObject data = jsonObject.getJSONObject("data");
+        JSONArray data1 = data.getJSONArray("data");
+        List<HisMajorOrder> hisMajorOrders = data1.toJavaList(HisMajorOrder.class);
+        log.info(hisMajorOrders.toString());
+    }
+
+    public static String historySystemLogin(){
+
+        try {
+            // 创建HttpClient对象
+            HttpClient httpClient = new DefaultHttpClient();
+
+            // 创建HttpGet请求对象
+            HttpPost httpPost = new HttpPost(HISTORY_LOGIN_URL+"?loginName=admin&password=ABC666000");
+
+            // 发送请求并获取响应
+            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 对象
+                Matcher m = r.matcher(cookies);
+                if (m.find()) {
+                    return m.group(0);
+                }
+            }
+            // 关闭连接
+            httpClient.getConnectionManager().shutdown();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Test
+    public void getLandTargetMajorTest() throws NoSuchFieldException, IllegalAccessException {
+       // dyoaHistoryService.doCreateMajorTarget("房地产","1331400911615954944",78L);
+    }
+}

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

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

+ 102 - 1
dao/src/main/resources/mapper/DyoaHistoryMapper.xml

@@ -2,7 +2,7 @@
 <!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="queryMajorOrder" parameterType="java.lang.String" resultType="map">
         select id,
                name,
                code,
@@ -47,4 +47,105 @@
         from dy_order where id = #{id}
     </select>
 
+       <select id="queryMajorHouseTarget" parameterType="java.lang.String" resultType="com.dayou.dto.history.HisMajorTarget">
+           select
+           d.id,
+           doth.id as tId,
+           dop.id as pId,
+           doth.type,<!--房屋用途 -->
+           doth.ownerName, <!--#权利人 -->
+           doth.ownerNo , <!--#权证号 -->
+           doth.houseName,<!--#项目名称 -->
+           doth.locations ,
+           doth.landOwnerName,  <!--#土地使用权人 -->
+           doth.landNo, <!--#土地证号 -->
+           doth.buildYear, <!--#竣工年代 -->
+           doth.buildArea, <!--#建筑面积 -->
+           doth.useType, <!--#使用权类型 -->
+           doth.landArea, <!--#土地面积 -->
+           doth.masterName,<!--#项目负责人 -->
+           doth.surveyName, <!--#实勘人 -->
+           doth.planUsage,<!--#规划用途 -->
+           doth.realUsage,<!--#实际用途 -->
+           doth.surveyAddress,<!--#实勘地址 -->
+           doth.description, <!--#备注 -->
+           doth.price, <!--#评估价格 -->
+           doth.approvedPrice, <!--#审核价格 -->
+           doth.measure, <!--#估价方法 -->
+           doth.surveyDate, <!--#实勘日期 -->
+           dop.printQuantity , <!--#打印份数 -->
+           dop.type AS pType, <!--#产品类型 -->
+           d.reportNo, <!--#产品号 -->
+           concat(d.signEmpName1,',',d.signEmpName2) as signEmpNames,<!--#签字人1 -->
+           d.name,<!--#项目名称 -->
+           d.principal, <!--#委托方名称 -->
+           d.principalAddress, <!--#委托方地址 -->
+           d.principalMobile ,<!--#委托方电话 -->
+           d.propertyName, <!--#产权人 -->
+           d.priceDate ,<!-- 价值时点-->
+           d.area,<!-- 评估面积-->
+           (d.money*10000)as money,<!-- 评估总价-->
+           d.price as xPrice,<!-- 评估单价-->
+           d.specDesc,<!-- 特殊情况说明-->
+           d.repo ,<!-- 库存状态-->
+           d.archiveTime, <!-- 归档时间-->
+           d.standardPrice ,<!-- 标准收费-->
+           d.confirmTime, <!-- 报告送达的确认时间-->
+           if(d.confirmTime is null,0,1) as deliveryState,
+           d.yjsInTime,<!-- 意见书入库时间-->
+           d.yjsOutTime,<!-- 意见书出库时间-->
+           d.bgInTime,<!-- 报告入库时间-->
+           d.bgOutTime<!-- 报告出库时间-->
+           from dy_order d left join dy_order_target_house doth on d.id = doth.orderId
+           left join dy_order_product dop on dop.orderId = d.id where doth.orderId = #{id}
+       </select>
+
+       <select id="queryMajorLandTarget" parameterType="java.lang.String" resultType="com.dayou.dto.history.HisMajorTarget">
+              select
+                     d.id,
+                     dotl.id as tId,
+                     dop.id as pId,
+                     dotl.type,<!--土地类型 -->
+                     dotl.ownerName, <!--#土地所有权人 -->
+                     dotl.ownerNo , <!--#国土证号 -->
+                     dotl.locations ,
+                     dotl.useArea,  <!--#土地使用权面积 -->
+                     dotl.lastYear, <!--#剩余年限 -->
+                     dotl.plotRate, <!--#容积率 -->
+                     dotl.land_usage, <!--#地类用途 -->
+                     dotl.useType, <!--#使用权类型 -->
+                     dotl.masterName, <!--#项目负责人 -->
+                     dotl.surveyName, <!--#实勘人 -->
+                     dotl.description, <!--#备注 -->
+                     dotl.price, <!--#评估价格 -->
+                     dotl.approvedPrice, <!--#审核价格 -->
+                     dotl.measure, <!--#估价方法 -->
+                     dotl.surveyDate, <!--#土地所有权人 -->
+                     dop.printQuantity , <!--#打印份数 -->
+                     dop.type AS pType, <!--#产品类型 -->
+                        d.reportNo, <!--#产品号 -->
+                    concat(d.signEmpName1,',',d.signEmpName2) as signEmpNames,<!--#签字人1 -->
+                    d.name,<!--#项目名称 -->
+                    d.principal, <!--#委托方名称 -->
+                    d.principalAddress, <!--#委托方地址 -->
+                    d.principalMobile ,<!--#委托方电话 -->
+                    d.propertyName, <!--#产权人 -->
+                    d.priceDate ,<!-- 价值时点-->
+                    d.area,<!-- 评估面积-->
+                    (d.money*10000) as money,<!-- 评估总价-->
+                    d.price as xPrice,<!-- 评估单价-->
+                    d.specDesc,<!-- 特殊情况说明-->
+                    d.repo ,<!-- 库存状态-->
+                    d.archiveTime, <!-- 归档时间-->
+                    d.standardPrice ,<!-- 标准收费-->
+                    d.confirmTime, <!-- 报告送达的确认时间-->
+                    if(d.confirmTime is null,0,1) as deliveryState,
+                    d.yjsInTime,<!-- 意见书入库时间-->
+                    d.yjsOutTime,<!-- 意见书出库时间-->
+                    d.bgInTime,<!-- 报告入库时间-->
+                    d.bgOutTime<!-- 报告出库时间-->
+                    from dy_order d left join dy_order_target_land dotl on d.id = dotl.orderId
+                  left join dy_order_product dop on dop.orderId = d.id where dotl.orderId = #{id}
+
+       </select>
 </mapper>

+ 1 - 1
dao/src/main/resources/mapper/WorkTaskRecordMapper.xml

@@ -120,7 +120,7 @@
         wtr.finished as taskFinished,
         m.created,
         m.id as majorId,
-        (select name from major_production where deleted = 0 and major_id = m.id and  report_no= ifnull(wfni.business_min_id,wfni.business_sub_id)) as productionName,
+        (select name from major_production where deleted = 0 and major_id = m.id and  report_no= ifnull(wfni.business_min_id,wfni.business_sub_id) limit 1) as productionName,
         cc1.name AS cClienteleName,
         cc2.name AS cClienteleSubName,
         cl1.name AS cClienteleContactName,

+ 67 - 0
domain/src/main/java/com/dayou/dto/history/HisMajorTarget.java

@@ -0,0 +1,67 @@
+package com.dayou.dto.history;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
+
+@Data
+public class HisMajorTarget {
+
+    private String id;
+    private String tId;
+    private String pId;
+    private String type;
+    private String ownerName;
+    private String ownerNo ;
+    private String locations ;
+    private BigDecimal useArea;
+    private BigDecimal lastYear;
+    private BigDecimal plotRate;
+    private String landUsage;
+    private String useType;
+    private String masterName;
+    private String surveyName;
+    private String description;
+    private BigDecimal price;
+    private BigDecimal approvedPrice;
+    private String measure;
+    private LocalDate surveyDate;
+    private Integer printQuantity;
+    private String houseName;
+    private String landOwnerName;
+    private String landNo;
+    private String buildYear;
+    private BigDecimal buildArea;
+    private BigDecimal landArea;
+    private String planUsage;
+    private String realUsage;
+    private String surveyAddress;
+
+
+
+    private String pType;
+    private String reportNo;
+    private String signEmpNames;
+    private String name;
+    private String principal;
+    private String principalAddress;
+    private String principalMobile;
+    private String propertyName;
+    private Date priceDate;
+    private BigDecimal area;
+    private BigDecimal money;
+    private BigDecimal xPrice;
+    private String specDesc;
+    private Date archiveTime;
+    private BigDecimal standardPrice;
+    private Date confirmTime;
+    private Date yjsInTime;
+    private Date yjsOutTime;
+    private Date bgInTime;
+    private Date bgOutTime;
+    private String repo;
+    private Boolean deliveryState;
+
+}

+ 2 - 0
domain/src/main/java/com/dayou/entity/MajorProduction.java

@@ -246,5 +246,7 @@ public class MajorProduction extends BaseEntity {
      */
     @TableField(exist = false)
     private BigDecimal orderShouldAmount;
+    @TableField(exist = false)
+    private Integer printTimes;
 
 }

+ 369 - 14
service/src/main/java/com/dayou/dyoa/DyoaHistoryServiceImpl.java

@@ -10,21 +10,25 @@ 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.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.common.BaseEntity;
+import com.dayou.dto.PriceFeedbackDTO;
 import com.dayou.dto.history.HisAssetsOrder;
 import com.dayou.dto.history.HisMajorOrder;
+import com.dayou.dto.history.HisMajorTarget;
 import com.dayou.dto.history.HisOrderParam;
 import com.dayou.entity.*;
 import com.dayou.enums.MainBusinessEnum;
+import com.dayou.enums.ProductionEnum;
 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.*;
 import com.dayou.service.impl.MajorServiceImpl;
 import com.dayou.service.workflow.*;
+import com.dayou.utils.DateUtils;
 import com.dayou.utils.HttpKit;
 import com.sun.corba.se.spi.orbutil.threadpool.Work;
 import lombok.extern.slf4j.Slf4j;
@@ -32,6 +36,7 @@ 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.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -44,8 +49,7 @@ 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.common.Constants.*;
 import static com.dayou.enums.MainBusinessEnum.MAJOR_BUSINESS;
 import static com.dayou.enums.workflow.NodeStateEnum.PENDING;
 import static com.dayou.enums.workflow.NodeTaskVersion.LATEST;
@@ -75,6 +79,12 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
 
     private static final Map<String,String> MAJOR_ORDER_COLUM = new HashMap<>();
 
+    private static final Map<String,String> MAJOR_TARGET_LAND_COLUM = new HashMap<>();
+
+    private static final Map<String,String> MAJOR_PRODUCTION_COLUM = new HashMap<>();
+
+    private static final Map<String,String> MAJOR_TARGET_HOUSE_COLUM = new HashMap<>();
+
 
     @Autowired
     private IUserService userService;
@@ -106,6 +116,12 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
     @Autowired
     private IWorkTaskRecordService workTaskRecordService;
 
+    @Autowired
+    private IMajorTargetService majorTargetService;
+
+    @Autowired
+    private IMajorProductionService majorProductionService;
+
     static {
 //        MAJOR_ORDER_COLUM.put("id","id");
         MAJOR_ORDER_COLUM.put("name","name");
@@ -146,6 +162,74 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
 //        MAJOR_ORDER_COLUM.put("terminalContactName","terminalClienteleContactId");
         MAJOR_ORDER_COLUM.put("members","members");
         MAJOR_ORDER_COLUM.put("description","remark");
+
+        // 大中型估价对象(土地)字段
+        MAJOR_TARGET_LAND_COLUM.put("type","landType");
+        MAJOR_TARGET_LAND_COLUM.put("ownerName","rightToUser");
+        MAJOR_TARGET_LAND_COLUM.put("ownerNo","landCertificateNo");
+        MAJOR_TARGET_LAND_COLUM.put("locations","located");
+        MAJOR_TARGET_LAND_COLUM.put("useArea","useAcreage");
+        MAJOR_TARGET_LAND_COLUM.put("lastYear","residueYears");
+        MAJOR_TARGET_LAND_COLUM.put("plotRate","plotRatio");
+        MAJOR_TARGET_LAND_COLUM.put("landUsage","landUse");
+        MAJOR_TARGET_LAND_COLUM.put("useType","rightType");
+        MAJOR_TARGET_LAND_COLUM.put("masterName","principalId");
+        MAJOR_TARGET_LAND_COLUM.put("surveyName","siteIds");
+        MAJOR_TARGET_LAND_COLUM.put("description","remark");
+        MAJOR_TARGET_LAND_COLUM.put("price","evaluateValue");
+        MAJOR_TARGET_LAND_COLUM.put("approvedPrice","checkValue");
+        MAJOR_TARGET_LAND_COLUM.put("measure","evaluateMethods");
+        MAJOR_TARGET_LAND_COLUM.put("surveyDate","evaluateDate");
+
+        //大中型估价对象(房地产)字段
+        MAJOR_TARGET_HOUSE_COLUM.put("type","housePurpose");
+        MAJOR_TARGET_HOUSE_COLUM.put("ownerName","owner");
+        MAJOR_TARGET_HOUSE_COLUM.put("ownerNo","ownerNo");
+        MAJOR_TARGET_HOUSE_COLUM.put("houseName","targetName");
+        MAJOR_TARGET_HOUSE_COLUM.put("locations","located");
+        MAJOR_TARGET_HOUSE_COLUM.put("landOwnerName","rightToUser");
+        MAJOR_TARGET_HOUSE_COLUM.put("landNo","landCertificateNo");
+        MAJOR_TARGET_HOUSE_COLUM.put("buildYear","buildDoneYear");
+        MAJOR_TARGET_HOUSE_COLUM.put("buildArea","buildAcreage");
+        MAJOR_TARGET_HOUSE_COLUM.put("useType","useRightType");
+        MAJOR_TARGET_HOUSE_COLUM.put("landArea","landAcreage");
+        MAJOR_TARGET_HOUSE_COLUM.put("masterName","principalId");
+        MAJOR_TARGET_HOUSE_COLUM.put("surveyName","siteIds");
+        MAJOR_TARGET_HOUSE_COLUM.put("planUsage","planPurpose");
+        MAJOR_TARGET_HOUSE_COLUM.put("realUsage","realPurpose");
+        MAJOR_TARGET_HOUSE_COLUM.put("surveyAddress","siteLocated");
+        MAJOR_TARGET_HOUSE_COLUM.put("description","remark");
+        MAJOR_TARGET_HOUSE_COLUM.put("price","evaluateValue");
+        MAJOR_TARGET_HOUSE_COLUM.put("approvedPrice","checkValue");
+        MAJOR_TARGET_HOUSE_COLUM.put("measure","evaluateMethods");
+        MAJOR_TARGET_HOUSE_COLUM.put("surveyDate","evaluateDate");
+
+
+        //大中型产品字段
+        MAJOR_PRODUCTION_COLUM.put("pType","production");
+        MAJOR_PRODUCTION_COLUM.put("reportNo","reportNo");
+        MAJOR_PRODUCTION_COLUM.put("signEmpNames","signatory");
+        MAJOR_PRODUCTION_COLUM.put("name","name");
+        MAJOR_PRODUCTION_COLUM.put("principal","clientName");
+        MAJOR_PRODUCTION_COLUM.put("principalAddress","clientAddress");
+        MAJOR_PRODUCTION_COLUM.put("principalMobile","clientTel");
+        MAJOR_PRODUCTION_COLUM.put("propertyName","owner");
+        MAJOR_PRODUCTION_COLUM.put("priceDate","valueTiming");
+        MAJOR_PRODUCTION_COLUM.put("area","evaluateAcreage");
+        MAJOR_PRODUCTION_COLUM.put("money","evaluateAmount");
+        MAJOR_PRODUCTION_COLUM.put("xPrice","evaluatePrice");
+        MAJOR_PRODUCTION_COLUM.put("specDesc","comment");
+        MAJOR_PRODUCTION_COLUM.put("repo","repertoryState");
+        MAJOR_PRODUCTION_COLUM.put("yjsInTime","repertoryInTime");
+        MAJOR_PRODUCTION_COLUM.put("yjsOutTime","repertoryOutTime");
+        MAJOR_PRODUCTION_COLUM.put("bgInTime","repertoryInTime");
+        MAJOR_PRODUCTION_COLUM.put("bgOutTime","repertoryOutTime");
+        MAJOR_PRODUCTION_COLUM.put("archiveTime","saveFileDate");
+        MAJOR_PRODUCTION_COLUM.put("standardPrice","standardAmount");
+        MAJOR_PRODUCTION_COLUM.put("confirmTime","deliveryDate");
+        MAJOR_PRODUCTION_COLUM.put("deliveryState","delivery");
+        MAJOR_PRODUCTION_COLUM.put("printQuantity","printTimes");
+
     }
 
     @Override
@@ -255,6 +339,8 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
         return resultMap;
     }
 
+    //多数据源切换,主方法用@DSTransactional注解解决事务失效问题
+    @DSTransactional
     @Override
     public Boolean fetchAboutMajor(String id) {
         dyoaRecordService.isExist(MainBusinessEnum.MAJOR_ORDER,id);
@@ -262,12 +348,18 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
             //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);
+            //2. 同步估价对象
+            String targetType = (String) dyoaMajorOrder.get("businessType");
+            List<MajorProduction> majorProductions = this.doCreateMajorTarget(targetType, id, mbsId);
+            //3. 创建节点
+            Object node = dyoaMajorOrder.get("nowNodeName");
+            if (node!=null){
+                String dyoaNodeName = (String) node;
+                Long instanceNodeId = this.doCreateMajorInstanceNode(mbsId, dyoaNodeName,majorProductions);
+                //4. 创建任务
+                String dyoaHandlerName = (String) dyoaMajorOrder.get("nowNodeEmpName");
+                this.doCreateNodeTask(instanceNodeId,dyoaNodeName,dyoaHandlerName);
+            }
             return Boolean.TRUE;
         } catch (NoSuchFieldException e) {
             throw new RuntimeException(e);
@@ -276,7 +368,251 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
         }
     }
 
-    public Long doCreateMajorOrder(Map<String,Object> dyMajorOrder) throws NoSuchFieldException, IllegalAccessException {
+    public List<MajorProduction> doCreateMajorTarget(String targetType, String id,Long majorId) throws NoSuchFieldException, IllegalAccessException {
+        List<MajorTarget> mts = new ArrayList<>();
+        List<MajorProduction> mps = new ArrayList<>();
+        if ("土地".equals(targetType)){
+           List<HisMajorTarget> majorLandTarget = dyoaHistoryMapper.queryMajorLandTarget(id);
+            Map<String, List<HisMajorTarget>> collect = majorLandTarget.stream()
+                    .collect(Collectors.groupingBy(HisMajorTarget::getTId));
+            for (Map.Entry<String, List<HisMajorTarget>> target : collect.entrySet()){
+                    MajorTarget majorTarget = new MajorTarget();
+                    majorTarget.setTargetType("土地");
+                    majorTarget.setMajorId(majorId);
+                    for (Map.Entry<String, String> entry : MAJOR_TARGET_LAND_COLUM.entrySet()){
+                        Field field = HisMajorTarget.class.getDeclaredField(entry.getKey());
+                        field.setAccessible(true);
+                        Object value = field.get(target.getValue().get(0));
+                        if (value!=null){
+                            String mbsColum = entry.getValue();
+                            Field xFiled = MajorTarget.class.getDeclaredField(mbsColum);
+                            xFiled.setAccessible(true);
+                            switch (mbsColum){
+                                case "principalId":
+                                    xFiled.set(majorTarget,getMbsUserId((String) value));
+                                    break;
+                                case "siteIds":
+                                    xFiled.set(majorTarget,getMbsUserIds((String) value));
+                                    break;
+                                case "evaluateMethods":
+                                    String methods = (String) value;
+                                    xFiled.set(majorTarget,JSON.toJSONString(Arrays.asList(methods.split(","))));
+                                    break;
+                                default:
+                                    xFiled.set(majorTarget,value);
+                            }
+                        }
+                    }
+                    mts.add(majorTarget);
+                    //是否有产品
+                    for (HisMajorTarget production :target.getValue()){
+                        if (StrUtil.isNotBlank(production.getPId())){
+                            MajorProduction majorProduction = new MajorProduction();
+                            majorProduction.setMajorId(majorId);
+                            for (Map.Entry<String, String> entry : MAJOR_PRODUCTION_COLUM.entrySet()){
+                                Field field = HisMajorTarget.class.getDeclaredField(entry.getKey());
+                                field.setAccessible(true);
+                                Object value = field.get(production);
+                                if (value!=null){
+                                    String mbsColum = entry.getValue();
+                                    Field xFiled = MajorProduction.class.getDeclaredField(mbsColum);
+                                    xFiled.setAccessible(true);
+                                    switch (mbsColum){
+                                        case "production":
+                                            String productionType = getProductionType((String) value);
+                                            xFiled.set(majorProduction, productionType);
+                                            if (ProductionEnum.STATEMENT.name().equals(productionType)){
+                                                majorTarget.setStatementNo(production.getReportNo());
+                                            }
+                                            if (ProductionEnum.REPORT.name().equals(productionType)){
+                                                majorTarget.setReportNo(production.getReportNo());
+                                            }
+                                            if (ProductionEnum.LETTER.name().equals(productionType)){
+                                                majorTarget.setLetterNo(production.getReportNo());
+                                            }
+
+                                            break;
+                                        case "delivery":
+                                            xFiled.set(majorProduction,production.getConfirmTime()!=null);
+                                            break;
+                                        case "signatory":
+                                            xFiled.set(majorProduction,getMbsUserIds((String) value));
+                                            break;
+                                        case "valueTiming":
+                                        case "saveFileDate":
+                                        case "deliveryDate":
+                                            xFiled.set(majorProduction,DateUtils.dateToLocalDate((Date) value));
+                                            break;
+                                        case "repertoryState":
+                                            String repertoryState = (String) value;
+                                            xFiled.set(majorProduction,repertoryState.equals("OUT"));
+                                            break;
+                                        default:
+                                            xFiled.set(majorProduction,value);
+                                            break;
+                                    }
+                                }
+                            }
+                            mps.add(majorProduction);
+                        }
+                    }
+
+            }
+
+        }
+        if ("房地产".equals(targetType)){
+            List<HisMajorTarget> majorHouseTarget = dyoaHistoryMapper.queryMajorHouseTarget(id);
+            Map<String, List<HisMajorTarget>> collect = majorHouseTarget.stream()
+                    .collect(Collectors.groupingBy(HisMajorTarget::getTId));
+            for (Map.Entry<String, List<HisMajorTarget>> target : collect.entrySet()){
+                MajorTarget majorTarget = new MajorTarget();
+                majorTarget.setTargetType("房地产");
+                majorTarget.setMajorId(majorId);
+                for (Map.Entry<String, String> entry : MAJOR_TARGET_HOUSE_COLUM.entrySet()){
+                    Field field = HisMajorTarget.class.getDeclaredField(entry.getKey());
+                    field.setAccessible(true);
+                    Object value = field.get(target.getValue().get(0));
+                    if (value!=null){
+                        String mbsColum = entry.getValue();
+                        Field xFiled = MajorTarget.class.getDeclaredField(mbsColum);
+                        xFiled.setAccessible(true);
+                        switch (mbsColum){
+                            case "principalId":
+                                xFiled.set(majorTarget,getMbsUserId((String) value));
+                                break;
+                            case "siteIds":
+                                xFiled.set(majorTarget,getMbsUserIds((String) value));
+                                break;
+                            case "evaluateMethods":
+                            case "housePurpose":
+                                String methods = (String) value;
+                                xFiled.set(majorTarget,JSON.toJSONString(Arrays.asList(methods.split(","))));
+                                break;
+                            default:
+                                xFiled.set(majorTarget,value);
+                        }
+                    }
+                }
+                mts.add(majorTarget);
+                //是否有产品
+                for (HisMajorTarget production :target.getValue()){
+                    if (StrUtil.isNotBlank(production.getPId())){
+                        MajorProduction majorProduction = new MajorProduction();
+                        majorProduction.setMajorId(majorId);
+                        for (Map.Entry<String, String> entry : MAJOR_PRODUCTION_COLUM.entrySet()){
+                            Field field = HisMajorTarget.class.getDeclaredField(entry.getKey());
+                            field.setAccessible(true);
+                            Object value = field.get(production);
+                            if (value!=null){
+                                String mbsColum = entry.getValue();
+                                Field xFiled = MajorProduction.class.getDeclaredField(mbsColum);
+                                xFiled.setAccessible(true);
+                                switch (mbsColum){
+                                    case "production":
+                                        String productionType = getProductionType((String) value);
+                                        xFiled.set(majorProduction, productionType);
+                                        if (ProductionEnum.STATEMENT.name().equals(productionType)){
+                                            majorTarget.setStatementNo(production.getReportNo());
+                                        }
+                                        if (ProductionEnum.REPORT.name().equals(productionType)){
+                                            majorTarget.setReportNo(production.getReportNo());
+                                        }
+                                        if (ProductionEnum.LETTER.name().equals(productionType)){
+                                            majorTarget.setLetterNo(production.getReportNo());
+                                        }
+
+                                        break;
+                                    case "delivery":
+                                        xFiled.set(majorProduction,production.getConfirmTime()!=null);
+                                        break;
+                                    case "signatory":
+                                        xFiled.set(majorProduction,getMbsUserIds((String) value));
+                                        break;
+                                    case "valueTiming":
+                                    case "saveFileDate":
+                                    case "deliveryDate":
+                                        xFiled.set(majorProduction,DateUtils.dateToLocalDate((Date) value));
+                                        break;
+                                    case "repertoryState":
+                                        String repertoryState = (String) value;
+                                        xFiled.set(majorProduction,repertoryState.equals("OUT"));
+                                        break;
+                                    default:
+                                        xFiled.set(majorProduction,value);
+                                        break;
+                                }
+                            }
+                        }
+                        mps.add(majorProduction);
+                    }
+                }
+
+            }
+        }
+        if (CollectionUtil.isNotEmpty(mts)){
+            majorTargetService.saveBatch(mts);
+        }
+        if (CollectionUtil.isNotEmpty(mps)){
+            majorProductionService.saveBatch(mps);
+            //更新报价反馈
+            List<PriceFeedbackDTO> feedbackDTOS = new ArrayList<>();
+            String statementNo = null;
+            for (MajorProduction majorProduction : mps){
+                if (majorProduction.getProduction().equals(ProductionEnum.STATEMENT.name())){
+                    PriceFeedbackDTO feedbackDTO = new PriceFeedbackDTO();
+                    feedbackDTO.setProduction(Arrays.asList(ProductionEnum.STATEMENT));
+                    feedbackDTO.setMajorId(majorId);
+                    feedbackDTO.setPrinting(majorProduction.getPrintTimes());
+                    statementNo = majorProduction.getReportNo();
+                    feedbackDTOS.add(feedbackDTO);
+                }
+                if (majorProduction.getProduction().equals(ProductionEnum.REPORT.name())){
+                    PriceFeedbackDTO feedbackDTO = new PriceFeedbackDTO();
+                    List<ProductionEnum> p = new ArrayList<>();
+                    if (StrUtil.isNotEmpty(statementNo)){
+                        p.add(ProductionEnum.STATEMENT);
+                    }
+                    p.add(ProductionEnum.REPORT);
+                    feedbackDTO.setProduction(p);
+                    feedbackDTO.setMajorId(majorId);
+                    feedbackDTO.setPrinting(majorProduction.getPrintTimes());
+                    feedbackDTO.setReportNo(statementNo);
+                    feedbackDTOS.add(feedbackDTO);
+                }
+                if (majorProduction.getProduction().equals(ProductionEnum.LETTER.name())){
+                    PriceFeedbackDTO feedbackDTO = new PriceFeedbackDTO();
+                    List<ProductionEnum> p = new ArrayList<>();
+                    if (StrUtil.isNotEmpty(statementNo)){
+                        p.add(ProductionEnum.STATEMENT);
+                    }
+                    p.add(ProductionEnum.REPORT);
+                    feedbackDTO.setProduction(p);
+                    feedbackDTO.setMajorId(majorId);
+                    feedbackDTO.setPrinting(majorProduction.getPrintTimes());
+                    feedbackDTO.setReportNo(statementNo);
+                    feedbackDTOS.add(feedbackDTO);
+                }
+            }
+            if (CollectionUtil.isNotEmpty(feedbackDTOS)){
+                majorServiceImpl.update(new LambdaUpdateWrapper<Major>().set(Major::getFeedbackInfo,JSON.toJSONString(feedbackDTOS))
+                        .eq(BaseEntity::getId,majorId));
+            }
+            return mps;
+        }
+        return null;
+    }
+
+    private String getProductionType(String value) {
+        if (value.contains(ProductionEnum.REPORT.getMsg())){
+            return ProductionEnum.REPORT.name();
+        }
+        if (value.contains(ProductionEnum.STATEMENT.getMsg())){
+            return ProductionEnum.STATEMENT.name();
+        }
+        return ProductionEnum.LETTER.name();
+    }
+
+    private 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()){
@@ -353,18 +689,37 @@ public class DyoaHistoryServiceImpl implements IDyoaHistoryService{
     private String getMbsUserIds(String userNames){
         List<Long> userIds = new ArrayList<>();
         Arrays.asList(userNames.split(",")).forEach(userName -> {
-            Long mbsUserId = getMbsUserId(userName);
+            Long mbsUserId = getMbsUserId(userName.replaceAll(" ",""));
             userIds.add(mbsUserId);
         });
         return JSON.toJSONString(userIds);
     }
 
-    private Long doCreateMajorInstanceNode(Long businessId,String dyoaNodeName){
+    private Long doCreateMajorInstanceNode(Long businessId,String dyoaNodeName,List<MajorProduction> productions){
+        String businessSubId = null;
+        String businessMinId = null;
+        if (CollectionUtil.isNotEmpty(productions)){
+            List<MajorProduction> statement = productions.stream().filter(x -> x.getProduction().equals(ProductionEnum.STATEMENT.name())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(statement)){
+                businessSubId = statement.get(0).getReportNo();
+            }
+            List<MajorProduction> report = productions.stream().filter(x -> x.getProduction().equals(ProductionEnum.REPORT.name())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(report)){
+                businessMinId = report.get(0).getReportNo();
+            }
+            List<MajorProduction> letter = productions.stream().filter(x -> x.getProduction().equals(ProductionEnum.LETTER.name())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(letter)){
+                businessMinId = letter.get(0).getReportNo();
+            }
+
+        }
         Long nodeId = getMbsWorkNodes(dyoaNodeName);
         Long flowId = getMbsWorkFlows(MAJOR_BUSINESS.name());
         WorkFlowNodeInstance instance = new WorkFlowNodeInstance();
         instance.setFlowId(flowId);
         instance.setBusinessId(businessId);
+        instance.setBusinessSubId(businessSubId);
+        instance.setBusinessMinId(businessMinId);
         instance.setNodeId(nodeId);
         instance.setBusinessType(MAJOR_BUSINESS.name());
         instance.setSequence(0);

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

@@ -4,6 +4,7 @@ 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.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.dayou.common.BaseEntity;
@@ -45,6 +46,7 @@ import static com.dayou.message.MessageTypeEnum.*;
  * @author wucl
  * @since 2023-11-06
  */
+@DS("mbs")
 @Slf4j
 @Service
 public class MajorProductionServiceImpl extends ServiceImpl<MajorProductionMapper, MajorProduction> implements IMajorProductionService {

+ 2 - 1
service/src/main/java/com/dayou/service/impl/MajorServiceImpl.java

@@ -77,7 +77,8 @@ public class MajorServiceImpl extends ServiceImpl<MajorMapper, Major> implements
     @Override
     public MajorVO detail(Long id){
         MajorVO majorVO = majorMapper.getDetail(id);
-        if (majorVO.getTerminalClienteleType().equals("企业")){
+        String terminalClienteleType = majorVO.getTerminalClienteleType();
+        if (StrUtil.isNotBlank(terminalClienteleType) && terminalClienteleType.equals("企业")){
             majorVO.setTMobile(majorVO.getTCompanyMobile());
         }
         return majorVO;

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

@@ -2,6 +2,7 @@ package com.dayou.service.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.dayou.common.BaseEntity;
 import com.dayou.dto.TakeNumberDTO;
@@ -33,6 +34,7 @@ import java.util.stream.Collectors;
  * @author wucl
  * @since 2023-11-03
  */
+@DS("mbs")
 @Service
 public class MajorTargetServiceImpl extends ServiceImpl<MajorTargetMapper, MajorTarget> implements IMajorTargetService {