15143018065 před 1 dnem
rodič
revize
8eec6d2910

+ 3 - 0
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteGljtService.java

@@ -15,6 +15,9 @@ public interface RemoteGljtService {
     @PostMapping("/jfxx/generate")
     public AjaxResult generate(@RequestParam("month") String month, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 
+    @PostMapping("/jfxx/generatecl")
+    public AjaxResult generatecl(@RequestParam("month") String month, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
     @PostMapping("/jkzkDj/generateJkzk")
     public AjaxResult generateJkzk(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 

+ 5 - 0
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/RemoteGljtFallbackFactory.java

@@ -21,6 +21,11 @@ public class RemoteGljtFallbackFactory implements FallbackFactory<RemoteGljtServ
                 return null;
             }
 
+            @Override
+            public AjaxResult generatecl(String month, String source) {
+                return null;
+            }
+
             @Override
             public AjaxResult generateJkzk(String source) {
                 return null;

+ 6 - 0
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/DateUtils.java

@@ -496,6 +496,12 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return monthsLater.format(DateTimeFormatter.ofPattern("yyyyMM"));
     }
 
+    public static String getMonthBefore(String startMonth, int before) {
+        YearMonth initialMonth = YearMonth.of(Integer.parseInt(startMonth.substring(0, 4)), Integer.parseInt(startMonth.substring(4, 6)));
+        YearMonth monthsLater = initialMonth.minusMonths(before);
+        return monthsLater.format(DateTimeFormatter.ofPattern("yyyyMM"));
+    }
+
     public static String getCsyfByPc(String month, String pc) {
         String res = null;
         int pc2 = 90 * 12 - 1;

+ 5 - 0
ruoyi-modules/mz-gljt/src/main/java/com/ruoyi/gljt/controller/GljtJfxxController.java

@@ -137,4 +137,9 @@ public class GljtJfxxController extends BaseController
     public void batchGenerateJfxxByMonth(String month) {
         gljtJfxxService.batchGenerateJfxxByMonth(month);
     }
+
+    @PostMapping("/generatecl")
+    public void generatecl(String month) {
+        gljtJfxxService.generatecl(month);
+    }
 }

+ 4 - 0
ruoyi-modules/mz-gljt/src/main/java/com/ruoyi/gljt/domain/GljtSqLr.java

@@ -391,4 +391,8 @@ public class GljtSqLr extends BaseEntity
     private String isqr;
 
     private String qrsj;
+
+    private String cltzyy;
+
+    private String cltzyf;
 }

+ 2 - 0
ruoyi-modules/mz-gljt/src/main/java/com/ruoyi/gljt/service/IGljtJfxxService.java

@@ -57,4 +57,6 @@ public interface IGljtJfxxService
     public int deleteGljtJfxxByIds(String[] ids);
 
     public void batchGenerateJfxxByMonth(String month);
+
+    public void generatecl(String month);
 }

+ 38 - 35
ruoyi-modules/mz-gljt/src/main/java/com/ruoyi/gljt/service/impl/GljtJfxxServiceImpl.java

@@ -296,49 +296,59 @@ public class GljtJfxxServiceImpl implements IGljtJfxxService {
         return gljtJfxxMapper.deleteBatchIds(Arrays.asList(ids));
     }
 
+    @Override
+    public void generatecl(String month) {
+        List<GljtXmpz> pzList = gljtXmpzMapper.selectList(new LambdaQueryWrapper<>());
+        for (GljtXmpz pz: pzList) {
+            GljtQxpz qxpz = gljtQxpzMapper.selectOne(new LambdaQueryWrapper<GljtQxpz>().eq(GljtQxpz::getXzqh, pz.getXzqh()));
+            if (ObjectUtils.isEmpty(qxpz)) {
+                continue;
+            }
+            List<GljtSqLr> lrList = gljtSqLrMapper.selectList(new LambdaQueryWrapper<GljtSqLr>()
+                    .likeRight(GljtSqLr::getXzqh, SubCodeUtil.code2Short(pz.getXzqh()))
+                    .in(GljtSqLr::getCltzyy, Arrays.asList("1", "2")));
+            if (CollectionUtils.isNotEmpty(lrList)) {
+                for (GljtSqLr lr: lrList) {
+                    if (StringUtils.isNotEmpty(lr.getCltzyf())) {
+                        if (Integer.parseInt(lr.getCltzyf()) <= Integer.parseInt(month)) {
+                            GljtSqLr up = new GljtSqLr();
+                            up.setId(lr.getId());
+                            up.setStatus("3");
+                            gljtSqLrMapper.updateById(up);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     @Override
     public void batchGenerateJfxxByMonth(String month) {
         String fixed = null;
-        boolean isLastDay = isLastDayOfMonth();
         if (StringUtils.isEmpty(month)) {
+            // 月初自动执行
             fixed = "0";
             month = DateUtils.dateTimeNow().substring(0, 6);
         } else {
+            // 手动执行
             fixed = "1";
         }
         String lastMonth = DateUtils.getLastMonth(month);
-        String today = DateUtils.dateTimeNow().substring(6, 8);
-        // 老人批次信息每月末变更
-        if (isLastDay && StringUtils.equals(fixed, "0")) {
-            generatePc(month);
+        // 老人批次信息每月初变更/仅自动执行时才进行,上个月需要变更的老人批次信息
+        if (StringUtils.equals(fixed, "0")) {
+            generatePc(lastMonth);
         }
-        // 计发信息每月末/固定时间生成
+        // 计发信息每月/固定时间生成
         List<GljtXmpz> pzList = gljtXmpzMapper.selectList(new LambdaQueryWrapper<>());
         for (GljtXmpz pz: pzList) {
+            System.out.println("---------------------【Calculation Issuance Information Generation Batch Start】");
             GljtQxpz qxpz = gljtQxpzMapper.selectOne(new LambdaQueryWrapper<GljtQxpz>().eq(GljtQxpz::getXzqh, pz.getXzqh()));
             if (ObjectUtils.isEmpty(qxpz)) {
                 continue;
             }
-            if (StringUtils.equals(fixed, "1")) {
-                batchGenerateJfxxByXzqh(pz, month);
-                batchGenerateTf(month);
-            } else {
-                if (StringUtils.isNotEmpty(qxpz.getKz8())) {
-                    // 固定日期生成计发信息
-                    if (StringUtils.equals(today, qxpz.getKz8())) {
-                        batchGenerateJfxxByXzqh(pz, lastMonth);
-                        batchGenerateJfxxByXzqh(pz, month);
-                    }
-                } else {
-                    // 月末自动生成
-                    if (isLastDay) {
-                        batchGenerateJfxxByXzqh(pz, month);
-                    }
-                }
-                if (isLastDay) {
-                    batchGenerateTf(month);
-                }
-            }
+            batchGenerateTf(lastMonth);
+            batchGenerateJfxxByXzqh(pz, month);
+            System.out.println("---------------------【Calculation Issuance Information Generation Batch End】");
         }
     }
 
@@ -412,14 +422,6 @@ public class GljtJfxxServiceImpl implements IGljtJfxxService {
     public List<GljtJfxx> generateJfByLr(GljtXmpz pz, String month, GljtSqLr lr) {
         EncryptionUtils.decryptForPlaintext(lr);
         List<GljtJfxx> res = new ArrayList<>();
-//        List<String> monthList = new ArrayList<>();
-//        if (StringUtils.equals(lr.getFfyf(), month)) {
-//            monthList.add(lr.getFfyf());
-//        } else if (StringUtils.equals(lr.getSqbfys(), "0")) {
-//            monthList.add(month);
-//        } else {
-//            monthList = DateUtils.getMonthsBetween(lr.getFfyf(), month);
-//        }
         if (gljtJfxxMapper.selectCount(new LambdaQueryWrapper<GljtJfxx>()
                 .eq(GljtJfxx::getSqrZjhm, SecurityUtils.sm4encrypt_ECB(EncryptionUtils.key, lr.getSqrZjhm()))
                 .eq(GljtJfxx::getFfyf, month)) == 0) {
@@ -440,12 +442,12 @@ public class GljtJfxxServiceImpl implements IGljtJfxxService {
 
             checkTf(in);
             res.add(in);
-//                gljtJfxxMapper.insert(in);
         }
         return res;
     }
 
     public void generatePc(String month) {
+        System.out.println("---------------------【Age Automatic Change Batch Start】");
         // 每月末批次变更 80-89 -》 90-99  90-99 =》 100+
         String csrq1 = DateUtils.getCsyfByPc(month, "0");
         String csrq2 = DateUtils.getCsyfByPc(month, "1");
@@ -509,6 +511,7 @@ public class GljtJfxxServiceImpl implements IGljtJfxxService {
         LambdaUpdateWrapper<GljtSqLr> luw4 = Wrappers.lambdaUpdate();
         luw4.likeRight(GljtSqLr::getCsrq, csrq2).eq(GljtSqLr::getPc, "4").set(GljtSqLr::getPc, "5");
         gljtSqLrMapper.update(null, luw4);
+        System.out.println("---------------------【Age Automatic Change Batch Over】");
     }
 
     public String insertLrHi(GljtSqLr t, String bdyy) {

+ 82 - 15
ruoyi-modules/mz-gljt/src/main/java/com/ruoyi/gljt/service/impl/GljtSqSqServiceImpl.java

@@ -38,7 +38,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -304,11 +303,58 @@ public class GljtSqSqServiceImpl implements IGljtSqSqService
         gljtSqSq.setId(id);
         if (CollectionUtils.isNotEmpty(gljtSqSq.getJfxxList())) {
             insertSqJfxx(gljtSqSq, gljtSqSq.getJfxxList(), id, lr.getId(), gljtSqSq.getXzqh());
-            if (StringUtils.equals(gljtSqSq.getStatus(), GljtAdStatus.MONTH.getCode())) asyncIn(gljtSqSq);
+            if (StringUtils.equals(gljtSqSq.getStatus(), GljtAdStatus.MONTH.getCode())) {
+                asyncIn(gljtSqSq);
+                // 触发插入本月的计发信息,当开始发放时间位于本月
+                generateThisMonth(gljtSqSq, pz);
+            }
         }
         return gljtSqSqMapper.insert(gljtSqSq);
     }
 
+    private void generateThisMonth(GljtSqSq gljtSqSq, GljtQxpz pz) {
+        if (StringUtils.isNotEmpty(gljtSqSq.getFfyf())) {
+            List<String> monthList = new ArrayList<>();
+            List<GljtJfxx> inList = new ArrayList<>();
+            if (StringUtils.equals(DateUtils.dateTime().substring(0, 6), gljtSqSq.getFfyf())) {
+                monthList.add(gljtSqSq.getFfyf());
+            } else if (Integer.parseInt(gljtSqSq.getFfyf()) < Integer.parseInt(DateUtils.dateTime().substring(0, 6))) {
+                monthList = DateUtils.getMonthsBetween(gljtSqSq.getFfyf(), DateUtils.dateTime().substring(0, 6));
+            }
+            for (String month: monthList) {
+                if (gljtJfxxMapper.selectCount(new LambdaQueryWrapper<GljtJfxx>()
+                        .eq(GljtJfxx::getSqrZjhm, SecurityUtils.sm4encrypt_ECB(EncryptionUtils.key, gljtSqSq.getSqrZjhm()))
+                        .eq(GljtJfxx::getFfyf, month)) == 0) {
+                    GljtJfxx in = new GljtJfxx();
+                    BeanUtil.copyProperties(gljtSqSq, in, new CopyOptions().ignoreNullValue());
+                    in.setId(IdUtils.simpleUUID());
+                    in.setLrId(gljtSqSq.getLrId());
+                    in.setFfyf(month);
+                    if (StringUtils.isEmpty(pz.getKz1())) {
+                        in.setDfyf(DateUtils.dateTime().substring(0, 6));
+                    } else {
+                        String date = DateUtils.dateTimeNow().substring(6, 8);
+                        if (Integer.parseInt(date) > Integer.parseInt(pz.getKz1())) {
+                            // 下月
+                            in.setDfyf(DateUtils.getNextMonth());
+                        } else {
+                            // 本月
+                            in.setDfyf(DateUtils.dateTime().substring(0, 6));
+                        }
+                    }
+                    in.setJfms("按时发放");
+                    GljtSqUtils.checkBtbz(in, gljtSqSq, gljtSqSq.getFfyf(), gljtSqUtils.getXmpz());
+                    in.setJkzk("0");
+                    in.setLrzt("1");
+                    in.setFflx("0");
+                    in.setStatus("0");
+                    inList.add(in);
+                }
+            }
+            gljtJfxxMapper.batchInsert(inList);
+        }
+    }
+
     private void insertSqJfxx(GljtSqSq sq, JSONArray jfxxList, String sqId, String lrId, String xzqh) {
         List<GljtJfxxBf> list = com.alibaba.fastjson.JSONArray.parseArray(jfxxList.toJSONString(),
                 GljtJfxxBf.class);
@@ -367,7 +413,11 @@ public class GljtSqSqServiceImpl implements IGljtSqSqService
                 gljtSqUtils.getAskFlow(gljtSqUtils.getQxpz(), gljtSqSq);
                 if (CollectionUtils.isNotEmpty(gljtSqSq.getJfxxList())) {
                     insertSqJfxx(old, gljtSqSq.getJfxxList(), gljtSqSq.getId(), lr.getId(), old.getXzqh());
-                    if (StringUtils.equals(gljtSqSq.getStatus(), GljtAdStatus.MONTH.getCode())) asyncIn(gljtSqSq);
+                    if (StringUtils.equals(gljtSqSq.getStatus(), GljtAdStatus.MONTH.getCode())) {
+                        asyncIn(gljtSqSq);
+                        // 触发插入本月的计发信息,当开始发放时间位于本月
+                        generateThisMonth(old, gljtSqUtils.getQxpz());
+                    }
                 }
                 return gljtSqSqMapper.updateById(gljtSqSq);
             }
@@ -389,6 +439,8 @@ public class GljtSqSqServiceImpl implements IGljtSqSqService
             lr.setFfyf(old.getFfyf());
             try {
                 asyncIn(old);
+                // 触发插入本月的计发信息,当开始发放时间位于本月
+                generateThisMonth(old, gljtSqUtils.getQxpz());
                 BeanUtil.copyProperties(gljtSqSq, gljtSqLr, new CopyOptions().ignoreNullValue());
                 gljtSqLr.setStatus(GljtLrStatus.FF.getCode());
                 String lrHiId = gljtSqUtils.insertLrHiSq(gljtSqLr, "0");
@@ -408,7 +460,7 @@ public class GljtSqSqServiceImpl implements IGljtSqSqService
         if (StringUtils.isNotEmpty(sq.getSqbfys()) && !StringUtils.equals(sq.getSqbfys(), "0")) {
             List<GljtJfxxBf> bfxx = gljtJfxxBfMapper.selectList(new LambdaQueryWrapper<GljtJfxxBf>()
                     .eq(GljtJfxxBf::getSqId, sq.getId()));
-            GljtXmpz pz = gljtSqUtils.getXmpz();
+            GljtQxpz pz = gljtSqUtils.getQxpz();
             List<GljtJfxx> jfxx = new ArrayList<>();
             bfxx.forEach(b -> {
                 GljtJfxx in = new GljtJfxx();
@@ -560,19 +612,34 @@ public class GljtSqSqServiceImpl implements IGljtSqSqService
             // 大于80岁
             res.put("input", "1");
             GljtQxpz pz = gljtSqUtils.getQxpz();
+            String under = null;
+            List<String> maxList = new ArrayList<>();
             if (StringUtils.isNotEmpty(pz.getKz3())) {
-                if (StringUtils.isNotEmpty(gljtSqSq.getQrsj())) {
-                    if (Integer.parseInt(gljtSqSq.getQrsj().substring(0, 6)) > Integer.parseInt(pz.getKz3())) {
-                        res.put("under", gljtSqSq.getQrsj().substring(0, 6));
-                    } else {
-                        res.put("under", pz.getKz3());
-                    }
-                } else {
-                    res.put("under", pz.getKz3());
-                }
-            } else {
-                res.put("under", null);
+                maxList.add(pz.getKz3());
+            }
+            if (StringUtils.isNotEmpty(pz.getBfys())) {
+                maxList.add(DateUtils.getMonthBefore(DateUtils.dateTime().substring(0, 6), Integer.parseInt(pz.getBfys())));
+            }
+            if (StringUtils.isNotEmpty(gljtSqSq.getQrsj())) {
+                maxList.add(gljtSqSq.getQrsj().substring(0, 6));
             }
+            int after80 = DateUtils.checkFor80(gljtSqSq.getCsrq()) + 1;
+            maxList.add(DateUtils.getMonthBefore(DateUtils.dateTime().substring(0, 6), after80));
+            int max = maxList.stream().map(Integer::parseInt).max(Comparator.comparingInt(Integer::intValue)).orElse(null);
+            res.put("under", String.valueOf(max));
+            //            if (StringUtils.isNotEmpty(pz.getKz3())) {
+//                if (StringUtils.isNotEmpty(gljtSqSq.getQrsj())) {
+//                    if (Integer.parseInt(gljtSqSq.getQrsj().substring(0, 6)) > Integer.parseInt(pz.getKz3())) {
+//                        res.put("under", gljtSqSq.getQrsj().substring(0, 6));
+//                    } else {
+//                        res.put("under", pz.getKz3());
+//                    }
+//                } else {
+//                    res.put("under", pz.getKz3());
+//                }
+//            } else {
+//                res.put("under", null);
+//            }
         }
         return res;
     }

+ 44 - 0
ruoyi-modules/mz-gljt/src/main/java/com/ruoyi/gljt/utils/GljtSqUtils.java

@@ -149,6 +149,50 @@ public class GljtSqUtils {
         jf.setFfje(res.toString());
     }
 
+    public static void checkBtbz(GljtJfxx jf, GljtSqSq sq, String month, GljtXmpz pz) {
+        BigDecimal res = BigDecimal.ZERO;
+        String btbz = null;
+        int start80 = 80 * 12;
+        int start90 = 90 * 12;
+        int start100 = 100 * 12;
+        int monthSum = DateUtils.getMonthByBirth(sq.getCsrq(), month + "01");
+        if (monthSum >= start80 && monthSum < start90) {
+            if (StringUtils.equals(sq.getIsdb(), "1") && (new BigDecimal(pz.getBtzjEd()).compareTo(BigDecimal.ZERO) > 0)) {
+                res = res.add(new BigDecimal(pz.getBtzjEd()));
+                btbz = GljtBtbzStatus.ED.getCode();
+            } else {
+                res = res.add(new BigDecimal(pz.getBtzjE()));
+                btbz = GljtBtbzStatus.E.getCode();
+            }
+        } else if (monthSum >= start90 && monthSum < start100) {
+            if (StringUtils.equals(sq.getIsdb(), "1") && (new BigDecimal(pz.getBtzjNd()).compareTo(BigDecimal.ZERO) > 0)) {
+                res = res.add(new BigDecimal(pz.getBtzjNd()));
+                btbz = GljtBtbzStatus.ND.getCode();
+            } else {
+                res = res.add(new BigDecimal(pz.getBtzjN()));
+                btbz = GljtBtbzStatus.N.getCode();
+            }
+        } else if (monthSum >= start100) {
+            if (StringUtils.equals(sq.getIsdb(), "1") && (new BigDecimal(pz.getBtzjHd()).compareTo(BigDecimal.ZERO) > 0)) {
+                res = res.add(new BigDecimal(pz.getBtzjHd()));
+                btbz = GljtBtbzStatus.HD.getCode();
+            } else {
+                res = res.add(new BigDecimal(pz.getBtzjH()));
+                btbz = GljtBtbzStatus.H.getCode();
+            }
+        } else {
+            if (StringUtils.equals(sq.getIsdb(), "1") && (new BigDecimal(pz.getBtzjEd()).compareTo(BigDecimal.ZERO) > 0)) {
+                res = res.add(new BigDecimal(pz.getBtzjEd()));
+                btbz = GljtBtbzStatus.ED.getCode();
+            } else {
+                res = res.add(new BigDecimal(pz.getBtzjE()));
+                btbz = GljtBtbzStatus.E.getCode();
+            }
+        }
+        jf.setBtbz(btbz);
+        jf.setFfje(res.toString());
+    }
+
     public static String getBtbzByCsrq(String csrq, String isdb, GljtXmpz xmpz) {
         String res = null;
         int start80 = 80 * 12;

+ 2 - 0
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobService.java

@@ -115,6 +115,8 @@ public interface ISysJobService
 
     public void checkGljtJob(String month);
 
+    public void checkGljtClByMonth(String month);
+
     public void checkInByXzqh(String xzqh);
 
     public void checkGljtJkzt();

+ 5 - 0
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobServiceImpl.java

@@ -307,6 +307,11 @@ public class SysJobServiceImpl implements ISysJobService
         remoteGljtService.generate(month, SecurityConstants.INNER);
     }
 
+    @Override
+    public void checkGljtClByMonth(String month) {
+        remoteGljtService.generatecl(month, SecurityConstants.INNER);
+    }
+
     @Override
     public void checkInByXzqh(String xzqh) {
         remoteGljtService.checkInByXzqh(xzqh, SecurityConstants.INNER);

+ 5 - 0
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/RyTask.java

@@ -75,6 +75,11 @@ public class RyTask
         sysjob.checkGljtJob(month);
     }
 
+    public void checkGljtClByMonth(String month)
+    {
+        sysjob.checkGljtClByMonth(month);
+    }
+
     public void checkGljtJkzt()
     {
         sysjob.checkGljtJkzt();