浏览代码

4库红黄灯、数据同步

JiangPengLi 2 月之前
父节点
当前提交
b006fdfd98

+ 10 - 1
projects-service/src/main/java/com/rtrh/projects/modules/projects/po/SubInfoGxj.java

@@ -1,6 +1,7 @@
 package com.rtrh.projects.modules.projects.po;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.rtrh.core.vo.Message;
 import com.rtrh.projects.modules.projects.enums.RedLightEnum;
 import com.rtrh.projects.modules.system.po.TableBaseColomn;
 import lombok.*;
@@ -181,8 +182,16 @@ public class SubInfoGxj extends TableBaseColomn implements Serializable {
     public BigDecimal getAmtTotal() {
         return amtTotal == null ? BigDecimal.ZERO : amtTotal;
     }
-
+    public String getStatusRed(){
+        if (statusRed == null) {
+            return RedLightEnum.GREEN.getCode();
+        }
+        return RedLightEnum.getNameByCode(statusRed);
+    }
     public String getStatusRedName() {
+        if (statusRed == null || reason == null) {
+            return RedLightEnum.GREEN.getName();
+        }
         return RedLightEnum.getNameByCode(statusRed);
     }
 }

+ 23 - 0
projects-service/src/main/java/com/rtrh/projects/modules/sync/mapper/DataSyncMapper.java

@@ -0,0 +1,23 @@
+package com.rtrh.projects.modules.sync.mapper;
+
+import com.rtrh.core.repository.mybatis.MyBatisRepository;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+@MyBatisRepository
+public interface DataSyncMapper {
+    List<String> queryIds();
+
+    int batchSave(@Param("list") List<LinkedHashMap<String, Object>> data,@Param("tab") String tableName);
+
+    List<Map<String, Object>> queryCbXjStatusList();
+
+    void syncSubInfoStatus(@Param("status") String status,@Param("subIds") List<String> subIds);
+
+    List<Map<String, Object>> queryStatusList();
+
+    List<String> queryTableColumnName(@Param("tab") String tableName);
+}

+ 61 - 0
projects-service/src/main/java/com/rtrh/projects/modules/sync/mapper/DataSyncMapper.xml

@@ -0,0 +1,61 @@
+<?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.rtrh.projects.modules.sync.mapper.DataSyncMapper" >
+    <update id="syncSubInfoStatus">
+        update sub_info set status = #{status} where id in
+        <foreach collection="subIds" item="id" separator="," open="(" close=")">
+            #{id}
+        </foreach>
+    </update>
+    <select id="queryIds" resultType="java.lang.String">
+        select id from sub_info
+    </select>
+    <select id="queryCbXjStatusList" resultType="java.util.LinkedHashMap">
+        select id,sub_id, status, kind_nature
+        from sub_info
+        where status in ('1', '2');
+    </select>
+    <select id="queryStatusList" resultType="java.util.LinkedHashMap">
+        select sub_id,status,is_rg
+        from sub_info
+    </select>
+    <select id="queryTableColumnName" resultType="java.lang.String">
+        SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = #{tab}
+    </select>
+    <insert id="batchSave">
+        <foreach collection="list" separator=";" item="item">
+            INSERT INTO ${tab}
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                <foreach collection="item.keySet()" item="filed">
+                    ${filed},
+                </foreach>
+            </trim>
+            VALUES
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                <foreach collection="item.values()" item="value">
+                    #{value},
+                </foreach>
+            </trim>
+        </foreach>
+    </insert>
+    <insert id="batchSaveOrUpdate">
+        <foreach collection="list" separator=";" item="item">
+            INSERT INTO ${tab}
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                <foreach collection="item.keySet()" item="filed">
+                    ${filed},
+                </foreach>
+            </trim>
+            VALUES
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                <foreach collection="item.values()" item="value">
+                    #{value},
+                </foreach>
+            </trim>
+            ON DUPLICATE KEY UPDATE
+            <foreach collection="item.keySet()" item="filed" separator=",">
+                ${filed} = VALUES(${filed})
+            </foreach>
+        </foreach>
+    </insert>
+</mapper>

+ 17 - 0
projects-service/src/main/java/com/rtrh/projects/modules/sync/service/DataSyncService.java

@@ -0,0 +1,17 @@
+package com.rtrh.projects.modules.sync.service;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+public interface DataSyncService {
+    List<String> queryIds();
+
+    boolean syncData(List<LinkedHashMap<String, Object>> data, String tableName);
+
+    List<Map<String, Object>> queryCbXjStatusList();
+
+    void syncSubInfoStatus(Map<String,Object> data);
+
+    List<Map<String, Object>> queryStatusList();
+}

+ 77 - 0
projects-service/src/main/java/com/rtrh/projects/modules/sync/service/impl/DataSyncServiceImpl.java

@@ -0,0 +1,77 @@
+package com.rtrh.projects.modules.sync.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.rtrh.projects.modules.sync.mapper.DataSyncMapper;
+import com.rtrh.projects.modules.sync.service.DataSyncService;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class DataSyncServiceImpl implements DataSyncService {
+    private final DataSyncMapper dataSyncMapper;
+
+    @Override
+    public List<String> queryIds() {
+        return dataSyncMapper.queryIds();
+    }
+
+    @Override
+    public boolean syncData(List<LinkedHashMap<String, Object>> data, String tableName) {
+        // return dataSyncMapper.saveData(data, tableName);
+        return batchSave(data, tableName);
+    }
+
+
+    private boolean batchSave(List<LinkedHashMap<String, Object>> list, String tableName) {
+        if (CollUtil.isNotEmpty(list)) {
+            // List<String> tableColumnNameList = dataSyncMapper.queryTableColumnName(tableName);
+            // Set<String> set1 = list.get(0).keySet();
+            // if (set1.size() != tableColumnNameList.size()) {
+            //     Set<String> keysToRemove = set1.stream()
+            //             .filter(key -> !tableColumnNameList.contains(key))
+            //             .collect(Collectors.toSet());
+            //     list.forEach(map -> keysToRemove.forEach(map::remove));
+            // }
+            int batchSize = Math.min(list.size(), 1000);
+            int count = list.size() / batchSize;
+            int remainder = list.size() % batchSize;
+            try {
+                for (int i = 0; i < count; i++) {
+                    dataSyncMapper.batchSave(list.subList(i * batchSize, (i + 1) * batchSize), tableName);
+                }
+                if (remainder > 0) {
+                    dataSyncMapper.batchSave(list.subList(count * batchSize, list.size()), tableName);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                return false;
+            } finally {
+                list.clear();
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public List<Map<String, Object>> queryCbXjStatusList() {
+        return dataSyncMapper.queryCbXjStatusList();
+    }
+
+    @Override
+    public List<Map<String, Object>> queryStatusList() {
+        return dataSyncMapper.queryStatusList();
+    }
+
+    @Override
+    public void syncSubInfoStatus(Map<String,Object> data) {
+        String status = data.get("status").toString();
+        List<String> subIds = (List<String>)data.get("subIds");
+        dataSyncMapper.syncSubInfoStatus(status, subIds);
+    }
+}

+ 101 - 0
projects/src/main/java/com/rtrh/projects/outapi/controller/sync/DataSyncController.java

@@ -0,0 +1,101 @@
+package com.rtrh.projects.outapi.controller.sync;
+
+import com.rtrh.core.vo.Message;
+import com.rtrh.projects.modules.sync.service.DataSyncService;
+import com.rtrh.projects.outapi.base.AuthenticateType;
+import com.rtrh.projects.outapi.base.TokenAuthenticate;
+import lombok.RequiredArgsConstructor;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/outApi/sync")
+@RequiredArgsConstructor(onConstructor_ = {@Lazy})
+public class DataSyncController {
+    private final DataSyncService dataSyncService;
+
+    @GetMapping("/queryIds")
+    @TokenAuthenticate(AuthenticateType.NONE)
+    public Message queryIds() {
+        List<String> list = dataSyncService.queryIds();
+        Message message = new Message();
+        message.setData(list);
+        return message;
+    }
+
+    @GetMapping("/queryCbXjStatusList")
+    @TokenAuthenticate(AuthenticateType.NONE)
+    public Message queryCbXjStatusList() {
+        Message result = new Message();
+        List<Map<String, Object>> list = dataSyncService.queryCbXjStatusList();
+        result.setData(list);
+        return result;
+    }
+
+    @GetMapping("/queryStatusList")
+    @TokenAuthenticate(AuthenticateType.NONE)
+    public Message queryStatusList() {
+        Message result = new Message();
+        List<Map<String, Object>> list = dataSyncService.queryStatusList();
+        result.setData(list);
+        return result;
+    }
+
+    /**
+     * 同步项目
+     */
+    @PostMapping("/syncSubInfo")
+    @TokenAuthenticate(AuthenticateType.NONE)
+    public Message syncSubInfo(@RequestBody List<LinkedHashMap<String,Object>> data) {
+        Message result = new Message();
+        result.setData(dataSyncService.syncData(data, "sub_info"));
+        return result;
+    }
+
+    /**
+     * 同步年度计划
+     */
+    @PostMapping("/syncSubAmtPlan")
+    @TokenAuthenticate(AuthenticateType.NONE)
+    public Message syncSubAmtPlan(@RequestBody List<LinkedHashMap<String,Object>> data) {
+        dataSyncService.syncData(data,"sub_amtplan");
+        return new Message();
+    }
+
+    /**
+     * 同步项目状态
+     */
+    @PostMapping("/syncSubInfoStatus")
+    @TokenAuthenticate(AuthenticateType.NONE)
+    public Message syncSubInfoStatus(@RequestBody Map<String,Object> data) {
+        dataSyncService.syncSubInfoStatus(data);
+        return new Message();
+    }
+
+    /**
+     * 同步转库日志
+     */
+    @PostMapping("/syncLogOperate")
+    @TokenAuthenticate(AuthenticateType.NONE)
+    public Message syncLogOperate(@RequestBody List<LinkedHashMap<String,Object>> data) {
+        dataSyncService.syncData(data,"t_log_operate");
+        return new Message();
+    }
+
+    /**
+     * 同步其它表
+     */
+    @PostMapping("/syncOtherData")
+    @TokenAuthenticate(AuthenticateType.NONE)
+    public Message syncOtherData(@RequestBody Map<String,Object> map) {
+        Message message = new Message();
+        List<LinkedHashMap<String, Object>> data = (List<LinkedHashMap<String, Object>>) map.get("data");
+        String table = map.get("table").toString();
+        message.setData(dataSyncService.syncData(data, table));
+        return message;
+    }
+}

+ 2 - 0
projects/src/main/resources/rtrh-crypto.xml

@@ -18,6 +18,7 @@
 				<value>/outApi/projects/statics/yearReport</value>
 				<value>/outApi/subInfoExport/**</value>
 				<value>/outApi/auth/gxjLogin</value>
+				<value>/outApi/sync/**</value>
 				<value>/pdfHtml/**</value>
 				<value>/api/jumpLogin</value>
 			</list>
@@ -27,6 +28,7 @@
 				<value>/outApi/file/**</value>
 				<value>/outApi/subInfoExport/**</value>
 				<value>/outApi/auth/gxjLogin</value>
+				<value>/outApi/sync/**</value>
 				<value>/pdfHtml/**</value>
 				<value>/api/jumpLogin</value>
 			</list>

+ 6 - 10
projects/src/main/webapp/vmodules/subject/subInfo/tz/light.jsp

@@ -114,17 +114,7 @@
             </div>
         </div>
     </div>
-
 </div>
-<%--<div id="app"></div>--%>
-
-<%--<template id="template" style="width: 300px;height: 400px">--%>
-<%--    <div class="layui-layout layui-layout-admin"  style="width: 300px;height: 400px">--%>
-<%--        <form class="layui-form" lay-filter="lightForm"  style="width: 300px;height: 400px" >--%>
-
-<%--        </form>--%>
-<%--    </div>--%>
-<%--</template>--%>
 
 <script>
     new Vue({
@@ -150,6 +140,12 @@
             },
             submit: function(obj){
                 let self = this;
+                if (obj.field.statusRed !== '0') {
+                    if (!obj.field.reason){
+                        App.msg.error("请输入原因");
+                        return;
+                    }
+                }
                 let statusRedName = self.statusRedList.find(item => item.code === obj.field.statusRed).name;
                 layer.confirm("确认修改为【"+statusRedName+"】?", function(){
                     App.postJson("/api/subject/subInfo/editStatusRedLight", obj.field, function(res) {