Explorar o código

医保局二期打卡护理计划同步宜搭代码更新,初始化导出功能

fyz hai 5 meses
pai
achega
fc1489b569

+ 25 - 20
mjava-yibaoju/src/main/java/com/malk/yibaoju/controller/YBJController.java

@@ -2,6 +2,7 @@ package com.malk.yibaoju.controller;
 
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.http.HttpRequest;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -26,6 +27,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -340,7 +342,7 @@ public class YBJController {
         //获取当前日期是本月几号
 //        Thread.sleep(2000);
         //生成当月数据库护理计划
-        ybjService.thisMonthDataBase(data.get("formInstId").toString(),data.get("status").toString());
+        ybjService.thisMonthDataBase(data.get("formInstId").toString());
         if (dayOfMonth>24){
             Thread.sleep(2000);
             ybjService.insertDatabaseNextMonth(data.get("formInstId").toString());
@@ -365,25 +367,7 @@ public class YBJController {
      */
     @PostMapping("boardQuery")
     McR boardQuery(@RequestBody Map<String,Object> data) {
-        QueryWrapper<Plan> planQuery = new QueryWrapper<>();
-        IPage<Plan> planPage = new Page<>();
-        data.forEach((k,v)->{
-            if (k.equals("currentPage")){
-                planPage.setCurrent(Long.parseLong(v.toString()));
-            } else if (k.equals("pageSize")) {
-                planPage.setSize(Long.parseLong(v.toString()));
-            } else if (k.equals("date_between")){
-                Map<String,Object> formInstId = (Map<String,Object>) data.get("date_between");
-                planQuery.ge("care_start_time",formInstId.get("start"));
-                planQuery.le("care_start_time",formInstId.get("end"));
-            }else{
-                planQuery.eq(k,v);
-            }
-        });
-        planQuery.eq("is_delete",0);
-        planQuery.orderByAsc("care_start_time");
-        IPage<Plan> selectPage = planMapper.selectPage(planPage, planQuery);
-        return McR.success(selectPage);
+        return McR.success(ybjService.boardQuery(data));
     }
 
     /**
@@ -467,4 +451,25 @@ public class YBJController {
         log.info("删除单条数据:{}",data);
         ybjService.deleteDatabaseOne(data);
     }
+
+    /**
+     * 删除护理计划安排后删除数据
+     * @param
+     */
+    @PostMapping("deleteCarePlan")
+    void breakPersonUpdate(HttpServletRequest request) {
+        Map data = UtilServlet.getParamMap(request);
+        ybjService.breakPersonUpdate(data);
+    }
+
+    /**
+     * 护理计划看板导出excel
+     * @param data 前端传入数据
+     * @param response 响应头
+     * @param request  请求头
+     */
+    @PostMapping("exportExecl")
+    void exportAttendance(@RequestBody Map<String,Object> data, HttpServletResponse response, HttpServletRequest request) {
+        ybjService.execlExport(data,response,request);
+    }
 }

+ 20 - 1
mjava-yibaoju/src/main/java/com/malk/yibaoju/service/YBJService.java

@@ -1,7 +1,11 @@
 package com.malk.yibaoju.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.malk.yibaoju.entity.Plan;
 import lombok.SneakyThrows;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.util.Map;
 
 public interface YBJService {
@@ -71,7 +75,7 @@ public interface YBJService {
      * 编辑保存生成本月月数据库护理计划
      * @param formInstId
      */
-    void thisMonthDataBase(String formInstId, String status);
+    void thisMonthDataBase(String formInstId);
 
     /**
      * 编辑保存生成下月数据库护理计划
@@ -114,4 +118,19 @@ public interface YBJService {
     void breakPersonUpdate(Map<String,Object> data);
 
     void  testApi (String code);
+
+    /**
+     * 护理计划看板导出
+     * @param data
+     * @param response
+     * @param request
+     */
+    void execlExport(Map<String, Object> data, HttpServletResponse response, HttpServletRequest request);
+
+    /**
+     * 护理计划看板、打卡列表查询
+     * @param data
+     * @return
+     */
+    IPage<Plan> boardQuery(Map<String, Object> data);
 }

+ 150 - 30
mjava-yibaoju/src/main/java/com/malk/yibaoju/service/impl/YBJServiceImpl.java

@@ -1,16 +1,21 @@
 package com.malk.yibaoju.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.service.aliwork.YDClient;
 import com.malk.service.aliwork.YDService;
 import com.malk.utils.UtilDateTime;
+import com.malk.utils.UtilExcel;
 import com.malk.utils.UtilMap;
 import com.malk.yibaoju.entity.Plan;
 import com.malk.yibaoju.mapper.PlanMapper;
@@ -22,6 +27,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URL;
@@ -37,6 +44,8 @@ import java.util.Date;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static java.lang.Integer.parseInt;
+
 
 @Service
 @Slf4j
@@ -1071,21 +1080,149 @@ public class YBJServiceImpl implements YBJService {
 
         ydParam = YDParam.builder()
                 .formUuid("FORM-RK966E7105DFD27FA7EQHAOH9IFS2RN6MP3OL2")  //获取护理计划
-                .searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_lo2b6bvf, textField_lryk5xa3", "正常","上海市奉贤区四团社区居家养老服务中心")))//护理对象暂停和正常、月度计划创建只查询正常的护理计划
+                .searchFieldJson(JSON.toJSONString(UtilMap.map("selectField_lo2b6bvf, textField_lryk5xa3", "正常",code)))//护理对象暂停和正常、月度计划创建只查询正常的护理计划
                 .build();
 
         List<Map> dataList = ydService.queryFormData_all(ydParam);
 
         log.info("时间:{}",dayOfMonth);
-        if (dayOfMonth>24){
-            log.info("开始");
-            dataList.forEach(e->{
-                deleteDatabaseInfo(e.get("formInstanceId").toString());
+//        if (dayOfMonth>24){
+        log.info("开始");
+        dataList.forEach(e->{
+            deleteDatabaseInfo(e.get("formInstanceId").toString());
 //                log.info("流程id:{}",e.get("formInstanceId").toString());
-                log.info("护理对象:{}",e.get("textField_lo55rupj").toString());
-                insertDatabaseNextMonth(e.get("formInstanceId").toString());
-            });
+            log.info("护理对象:{}",e.get("textField_lo55rupj").toString());
+            thisMonthDataBase(e.get("formInstanceId").toString());
+
+//                insertDatabaseNextMonth(e.get("formInstanceId").toString());
+        });
+//        }
+    }
+
+    @Override
+    public void execlExport(Map<String, Object> data, HttpServletResponse response, HttpServletRequest request) {
+        if (data.isEmpty()){
+            return;
+        }
+        List<Plan> records = boardQuery(data).getRecords();
+        if (ArrayUtil.isNotEmpty(records)){
+            log.info("records:{}",records.toString());
+        }
+        String formInstId = data.get("formInstId").toString();
+        log.info("已获取流程实例ID为:{}",data.get("formInstId").toString());
+        // 动态表头模板导出
+        Map formData = ydClient.queryData(YDParam.builder()
+                        .appType("APP_ERBDTFS82HOVBPL3NFH0")
+                        .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                        .formInstanceId(formInstId)
+                        .build(),
+                YDConf.FORM_QUERY.retrieve_id).getFormData();
+        log.info("formData:{}",formData);
+        //获取主表字段
+        final String[] keys = {""};
+        final String[] valuses = {""};
+        formData.forEach((k,v)->{
+            if (!k.toString().equals("pageSection_lr3gzi9i") && !k.toString().equals("pageSection_ltxyt76g")){
+                keys[0] = keys[0] + k + ", ";
+                valuses[0] = valuses[0] + v.toString() + ", ";
+            }
+        });
+        Map<String, String> dataMain = UtilMap.map(keys[0], valuses[0]);
+        log.info("dataMain:{}",dataMain);
+        //获取订单日期
+        long dateFiled = Long.parseLong(formData.get("dateField_lr26l3h2").toString());
+        if (ObjectUtil.isNotEmpty(dateFiled)){
+            String dateStr = DateUtil.date(dateFiled).toString("yyyy-MM-dd");
+            dataMain.put("dateField_lr26l3h2",dateStr);
+        }
+        //获取供应商名称
+        String association = formData.get("associationFormField_lr26l3he_id").toString();
+        log.info(association);
+        if (ObjectUtil.isNotEmpty(association)){
+            association = JSON.parse(association).toString();
+            JSONArray jsonArray = JSON.parseArray(association);
+            JSONObject jsonObject = (JSONObject) jsonArray.get(0);
+            String title = jsonObject.get("title").toString();
+            dataMain.put("title",title);
+        }
+        //获取文件标题
+        String fileName = dataMain.get("textField_lr26y1io") + dataMain.get("textField_lz2fk0wc") + "采购订单";
+
+        List<Map> dataList = ydService.queryDetails(YDParam.builder().
+                appType("APP_ERBDTFS82HOVBPL3NFH0")
+                .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
+                .formInstanceId(formInstId)
+                .formUuid("FORM-61F329A9DFFE4CF0BBEC0FDC34C42C03QJKQ")
+                //测试
+//                .formUuid("FORM-44AF067BF733464F8431620612726615RNNV")
+                .tableFieldId("tableField_ltxyt76f")
+                .build());
+        log.info("dataList1:{}",dataList);
+        for (int i = 0; i < dataList.size(); i++) {
+            dataList.get(i).put("row",i+1);
+            String person = dataList.get(i).get("textField_lu2gzzab").toString();
+            String phone = dataList.get(i).get("textField_lu2gzzac").toString();
+            final String[] address = {""};
+            if (ObjectUtil.isNotNull(dataList.get(i).get("addressField_m1mxnnno"))){
+                Object parse = JSON.parse(dataList.get(i).get("addressField_m1mxnnno").toString());
+                JSONObject jsonObject = (JSONObject) parse;
+                JSONArray jsonArray = JSON.parseArray(jsonObject.get("regionText").toString());
+                jsonArray.forEach(e->{
+                    JSONObject object = (JSONObject) e;
+                    String zhCn = object.get("zh_CN").toString();
+                    address[0]  =  address[0] + zhCn + "/";
+                });
+                String substring = address[0].substring(0, address[0].length() - 1);
+                dataList.get(i).put("addressField_m1mxnnno",substring);
+            }
+            String information = person + " " + phone;
+            dataList.get(i).put("information",information);
         }
+        log.info("dataList:{}",dataList);
+        String text = "一、订单说明:\n" +
+                "1.供应商需按订单内容,向采购方按时、按量提供质量合格的商品(如一张订单分多次送货的,将以末次送货时间作为该订单的送货时间)。\n" +
+                "2.供应商配送物品与订单不符,采购方接收人有权拒收、要求换货或给与相应的赔偿。\n" +
+                "3.供应商未按订单约定时间配送物品,需按照订单总价的5%作为单日违约金,按照延迟天数向采购方支付。\n" +
+                "4.供应商送货时,需向采购方接收人提供供应商送货签收单据的客户联,采购方将作为付款的书面依据留存。\n" +
+                "5.供应商完成物品配送后,5个工作日内需向采购方提交与订单内容相符的增值税专用发票。\n" +
+                "6.采购方在收到供应商提供的与订单相符的物品及相应发票和单据后,将按照双方约定的付款周期支付货款。\n" +
+                "7.采购方以传真和邮件方式,向供应商提供《采购订单》;供应商接收《采购订单》后,需以传真或邮件方式进行签收。\n" +
+                "8.采购方以供应商传真或邮件签收,作为该《采购订单》正式履行的依据。\n" +
+                "9.采购订单作为供需双方的日常业务办理依据,双方合作的相关法律依据以双方签订的合作协议为准。\n" +
+                "10.严禁除采购以外的任何人员直接向供应商订购物资,如供应商在未收到采购订单的情况下进行物资配送,采购一律不予结算该账款。\n" +
+                "严禁供应商向除采购方以外的任何第三方泄露采购单价,造成采购方名誉、信誉、财产的一切损失将由供应商承担。\n" +
+                "二、备注:采购订单敲章后与发票一起寄回,以便后期确认。\n" +
+                "发票寄送地址:上海市宝山区双城路803弄宝莲城9号楼27层\n" +
+                "联系人:浦水菊  联系电话:60671366  转 828";
+        dataMain.put("text",text);
+        int numSum = dataList.stream().mapToInt(e -> e.get("numberField_ltxyt75z").toString().equals("") ? 0 : parseInt(e.get("numberField_ltxyt75z").toString())).sum();
+        Double sumTotal = dataList.stream().mapToDouble(e -> e.get("numberField_ltxyt764").toString().equals("") ? 0 : Double.parseDouble(e.get("numberField_ltxyt764").toString())).sum();
+        dataMain.put("num_sum",String.valueOf(numSum));
+        dataMain.put("sum_total",String.valueOf(sumTotal));
+
+        UtilExcel.exportMapAndListByTemplate(response, dataMain, dataList, Map.class, fileName, "Template.xlsx");
+    }
+
+    @Override
+    public IPage<Plan> boardQuery(Map<String, Object> data) {
+        QueryWrapper<Plan> planQuery = new QueryWrapper<>();
+        IPage<Plan> planPage = new Page<>();
+        data.forEach((k,v)->{
+            if (k.equals("currentPage")){
+                planPage.setCurrent(Long.parseLong(v.toString()));
+            } else if (k.equals("pageSize")) {
+                planPage.setSize(Long.parseLong(v.toString()));
+            } else if (k.equals("date_between")){
+                Map<String,Object> formInstId = (Map<String,Object>) data.get("date_between");
+                planQuery.ge("care_start_time",formInstId.get("start"));
+                planQuery.le("care_start_time",formInstId.get("end"));
+            }else{
+                planQuery.eq(k,v);
+            }
+        });
+        planQuery.eq("is_delete",0);
+        planQuery.orderByAsc("care_start_time");
+        return planMapper.selectPage(planPage, planQuery);
     }
 
     /**
@@ -1113,7 +1250,7 @@ public class YBJServiceImpl implements YBJService {
                         "`care_date_text`,`start_time_text`,`end_time_text`,`sign_in_photo`, `sign_in_photo_down`, `sign_in_photo_name`, `sign_out_photo`, " +
                         "`sign_out_photo_down`, `sign_out_photo_name`, `sign_in_longitude`, `sign_in_latitude`, `sign_in_time`, `sign_in_position`, " +
                         "`sign_out_longitude`, `sign_out_latitude`, `sign_out_time`, `sign_out_position`, `sign_in_distance`, `sign_out_distance` " +
-                        "FROM `yida_plan_details` where  data_month = '" + dataMonths.get(j) + "' AND is_cogradient = '否' AND care_date_text = '2024-12-31' " +
+                        "FROM `yida_plan_details` where  data_month = '" + dataMonths.get(j) + "' AND is_cogradient = '否' AND care_date_text > '2024-12-31' " +
                         "AND is_delete = '0' ORDER BY care_date_text ASC,id ASC LIMIT 400";
                 ps = connection.prepareStatement(selectSql);
                 ResultSet rs = ps.executeQuery(selectSql);
@@ -1132,8 +1269,8 @@ public class YBJServiceImpl implements YBJService {
                     hashMap.put("selectField_lo3pmohy",rs.getString("within_the_week"));  //护理时间  (星期几)
                     hashMap.put("dateField_lred6eoj", rs.getString("care_start_time")); //护理开始时间。 用当前日期+护理计划的  时分    转成时间戳
                     hashMap.put("dateField_lred6eok", rs.getString("care_end_time")); //护理结束时间。 用当前日期+护理计划的  时分    转成时间戳
-                    hashMap.put("selectField_lqcgsbw2", "未执行");  //执行情况
-                    hashMap.put("selectField_lo56u5fn", "待上报");  //任务状态
+                    hashMap.put("selectField_lqcgsbw2", rs.getString("execute_status"));  //执行情况
+                    hashMap.put("selectField_lo56u5fn", rs.getString("task_status"));  //任务状态
 
                     hashMap.put("textField_lvae7q5n", rs.getString("care_object_longitude")); //护理对象经度
                     hashMap.put("textField_lvae7q5o", rs.getString("care_object_latitude"));  //护理对象纬度
@@ -1181,24 +1318,7 @@ public class YBJServiceImpl implements YBJService {
 
                     times++;
                     ids.add(rs.getInt("id"));
-//                    if (times%200==0 && ObjectUtil.isNotNull(ids)){
-//                        for (int i = 0; i < ids.size(); i++) {
-//                            YDParam ydParam = YDParam.builder()
-//                                    .formUuid(formId)
-//                                    .searchFieldJson(JSON.toJSONString(UtilMap.map("textField_m3wp95ge",ids.get(i))))
-//                                    .build();
-//                            List<Map> dataList = (List<Map>) ydClient.queryData(ydParam, YDConf.FORM_QUERY.retrieve_search_form).getData();
-//                            if(dataList.size()>0){
-//                                Map map = (Map) dataList.get(0);
-//                                String updateSql = "UPDATE `yida_plan_details` SET is_cogradient = '是', plan_inst_id = '"+map.get("formInstanceId")+"' " +
-//                                        "where data_month in ('" + dataMonth + "','"+nextDataMonth+"') AND is_cogradient = '否' AND id = '" + ids.get(i) + "';";
-//                                ps = connection.prepareStatement(updateSql);
-//                                ps.executeUpdate();
-//                            }
-//                        }
-//                        Thread.sleep(2000);
-//                        ids.clear();
-//                    }
+
                     if (times%200==0){
                         Thread.sleep(4000);
                     }
@@ -1284,7 +1404,7 @@ public class YBJServiceImpl implements YBJService {
      * @param formInstId
      */
     @Override
-    public void thisMonthDataBase(String formInstId, String status){
+    public void thisMonthDataBase(String formInstId){
         log.info("开始生成当月数据库未上报护理计划:{}",new Date());
         //根据实例ID  查询护理计划
         YDParam ydParam = YDParam.builder()

BIN=BIN
mjava-yibaoju/src/main/resources/templates/Template.xlsx


+ 3 - 1
mjava/src/main/java/com/malk/utils/UtilExcel.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.fill.FillConfig;
 import com.google.common.base.Strings;
 import com.malk.server.common.McException;
 import com.malk.server.common.McREnum;
@@ -238,9 +239,10 @@ public class UtilExcel {
         UtilExcel.setResponseHeader(response, fileName, ".xlsx");
         ExcelWriter workBook = EasyExcel.write(response.getOutputStream(), dtoClass).withTemplate(inputStream).build();
         WriteSheet sheet = EasyExcel.writerSheet().build();
+        FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build();
         // 先单组数据填充,再多组数据填充
+        workBook.fill(dataList, fillConfig, sheet);
         workBook.fill(dataMain, sheet);
-        workBook.fill(dataList, sheet);
         workBook.finish();
     }