Explorar o código

Merge branch 'refs/heads/master' into openIm

wjj hai 1 mes
pai
achega
91b682afed

+ 11 - 6
fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java

@@ -2,10 +2,7 @@ package com.fs.his.controller;
 
 import java.math.BigDecimal;
 import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import cn.hutool.core.util.StrUtil;
@@ -224,11 +221,19 @@ public class FsStoreOrderController extends BaseController
     @PreAuthorize("@ss.hasPermi('store:storeOrder:export')")
     @Log(title = "导出订单", businessType = BusinessType.EXPORT)
     @GetMapping("/orderExport")
-    public AjaxResult orderExport(FsStoreOrderParam param) {
+    public AjaxResult orderExport(FsStoreOrderParam param,String filter) {
         Integer exportType1 = exportTaskService.isExportType1(SecurityUtils.getUserId());
 //        if (exportType1>0){
 //            return AjaxResult.error("你已经有正在导出的任务");
 //        }
+        // 1. 处理filter参数:将逗号分隔的字符串拆分为ArrayList<String>
+        ArrayList<String> filterList = new ArrayList<>();
+        if (StringUtils.isNotBlank(filter)) {
+            // 按逗号拆分,同时去除可能的空格(如filter传"orderId, orderCode"时兼容)
+            String[] filterArr = filter.split("\\s*,\\s*");
+            filterList.addAll(Arrays.asList(filterArr));
+        }
+
         if (fsStoreOrderService.isEntityNull(param)){
             return AjaxResult.error("请筛选数据导出");
         }
@@ -255,7 +260,7 @@ public class FsStoreOrderController extends BaseController
         exportTaskService.insertFsExportTask(task);
         param.setTaskId(task.getTaskId());
         boolean checkPhone = isCheckPhone();
-        exportTaskService.exportStore1Data(param,checkPhone);
+        exportTaskService.exportStore1Data(param,checkPhone, filterList);
 
         return new AjaxResult(200,"后台正在导出,请等待...任务ID:"+task.getTaskId(),task.getTaskId());
 

+ 2 - 2
fs-admin/src/main/resources/application.yml

@@ -4,11 +4,11 @@ server:
 # Spring配置
 spring:
   profiles:
-#    active: druid-myhk-test
+    active: druid-jnmy-test
 #    active: druid-hdt
 #    active: druid-yzt
 #    active: druid-sxjz
 #    active: druid-sft
 #    active: druid-fby
-    active: dev-yjb
+#    active: dev
 

+ 140 - 0
fs-common/src/main/java/com/fs/common/utils/poi/ExcelUtil.java

@@ -1274,4 +1274,144 @@ public class ExcelUtil<T>
         }
         return sheetIndexPicMap;
     }
+    /**
+     * 对list数据源将其里面的数据导入到excel表单(只导出选中的列)
+     *
+     * @param list 导出数据集合
+     * @param sheetName 工作表的名称
+     * @param selectedFields 选中的字段列表
+     * @return 结果
+     */
+    public AjaxResult exportExcelSelectedColumns(List<T> list, String sheetName, List<String> selectedFields) {
+        this.init(list, sheetName, Type.EXPORT);
+        return exportExcelSelectedColumns(selectedFields);
+    }
+
+    /**
+     * 对list数据源将其里面的数据导入到excel表单(只导出选中的列)
+     *
+     * @param response 返回数据
+     * @param list 导出数据集合
+     * @param sheetName 工作表的名称
+     * @param selectedFields 选中的字段列表
+     * @return 结果
+     * @throws IOException
+     */
+    public void exportExcelSelectedColumns(HttpServletResponse response, List<T> list, String sheetName, List<String> selectedFields) throws IOException {
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setCharacterEncoding("utf-8");
+        this.init(list, sheetName, Type.EXPORT);
+        exportExcelSelectedColumns(response.getOutputStream(), selectedFields);
+    }
+
+    /**
+     * 对list数据源将其里面的数据导入到excel表单(只导出选中的列)
+     *
+     * @param selectedFields 选中的字段列表
+     * @return 结果
+     */
+    public void exportExcelSelectedColumns(OutputStream out, List<String> selectedFields) {
+        try {
+            writeSelectedSheet(selectedFields);
+            wb.write(out);
+        } catch (Exception e) {
+            log.error("导出Excel异常{}", e.getMessage());
+        } finally {
+            IOUtils.closeQuietly(wb);
+            IOUtils.closeQuietly(out);
+        }
+    }
+
+    /**
+     * 对list数据源将其里面的数据导入到excel表单(只导出选中的列)
+     *
+     * @param selectedFields 选中的字段列表
+     * @return 结果
+     */
+    public AjaxResult exportExcelSelectedColumns(List<String> selectedFields) {
+        OutputStream out = null;
+        try {
+            writeSelectedSheet(selectedFields);
+            String filename = encodingFilename(sheetName);
+            out = new FileOutputStream(getAbsoluteFile(filename));
+            wb.write(out);
+            return AjaxResult.success(filename);
+        } catch (Exception e) {
+            log.error("导出Excel异常{}", e.getMessage());
+            throw new UtilException("导出Excel失败,请联系网站管理员!");
+        } finally {
+            IOUtils.closeQuietly(wb);
+            IOUtils.closeQuietly(out);
+        }
+    }
+
+    /**
+     * 创建写入数据到Sheet(只写入选中的列)
+     */
+    public void writeSelectedSheet(List<String> selectedFields) {
+        // 筛选出选中的字段
+        List<Object[]> selectedFieldList = filterSelectedFields(selectedFields);
+
+        // 取出一共有多少个sheet.
+        double sheetNo = Math.ceil(list.size() / sheetSize);
+        for (int index = 0; index <= sheetNo; index++) {
+            createSheet(sheetNo, index);
+
+            // 产生一行
+            Row row = sheet.createRow(0);
+            int column = 0;
+            // 写入各个字段的列头名称(只写入选中的字段)
+            for (Object[] os : selectedFieldList) {
+                Excel excel = (Excel) os[1];
+                this.createCell(excel, row, column++);
+            }
+            if (Type.EXPORT.equals(type)) {
+                fillSelectedExcelData(index, row, selectedFieldList);
+                addStatisticsRow();
+            }
+        }
+    }
+
+    /**
+     * 筛选出选中的字段
+     */
+    private List<Object[]> filterSelectedFields(List<String> selectedFields) {
+        if (selectedFields == null || selectedFields.isEmpty()) {
+            return this.fields; // 如果没有选择字段,返回所有字段
+        }
+
+        List<Object[]> selectedFieldList = new ArrayList<>();
+        for (Object[] fieldInfo : this.fields) {
+            Field field = (Field) fieldInfo[0];
+            if (selectedFields.contains(field.getName())) {
+                selectedFieldList.add(fieldInfo);
+            }
+        }
+        return selectedFieldList;
+    }
+
+    /**
+     * 填充excel数据(只填充选中的列)
+     *
+     * @param index 序号
+     * @param row 单元格行
+     * @param selectedFieldList 选中的字段列表
+     */
+    public void fillSelectedExcelData(int index, Row row, List<Object[]> selectedFieldList) {
+        int startNo = index * sheetSize;
+        int endNo = Math.min(startNo + sheetSize, list.size());
+        for (int i = startNo; i < endNo; i++) {
+            row = sheet.createRow(i + 1 - startNo);
+            // 得到导出对象.
+            T vo = (T) list.get(i);
+            int column = 0;
+            for (Object[] os : selectedFieldList) {
+                Field field = (Field) os[0];
+                Excel excel = (Excel) os[1];
+                // 设置实体类私有属性可访问
+                field.setAccessible(true);
+                this.addCell(excel, row, vo, field, column++);
+            }
+        }
+    }
 }

+ 2 - 2
fs-company/src/main/java/com/fs/company/controller/store/FsStoreOrderController.java

@@ -130,7 +130,7 @@ public class FsStoreOrderController extends BaseController
         task.setCompanyUserId(userId);
         exportTaskService.insertFsExportTask(task);
         param.setTaskId(task.getTaskId());
-        exportTaskService.exportStore1Data(param,false);
+        exportTaskService.exportStore1Data(param,false, null);
         return new AjaxResult(200,"后台正在导出,请等待...任务ID:"+task.getTaskId(),task.getTaskId());
 
 
@@ -172,7 +172,7 @@ public class FsStoreOrderController extends BaseController
         task.setCompanyUserId(userId);
         exportTaskService.insertFsExportTask(task);
         param.setTaskId(task.getTaskId());
-        exportTaskService.exportStore1Data(param,false);
+        exportTaskService.exportStore1Data(param,false, null);
         return new AjaxResult(200,"后台正在导出,请等待...任务ID:"+task.getTaskId(),task.getTaskId());
     }
     /**

+ 1 - 0
fs-service/src/main/java/com/fs/his/param/FsStoreOrderParam.java

@@ -3,6 +3,7 @@ package com.fs.his.param;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
+import com.fs.his.vo.FsStoreOrderExportVO;
 import lombok.Data;
 
 import java.io.Serializable;

+ 3 - 1
fs-service/src/main/java/com/fs/his/service/IFsExportTaskService.java

@@ -1,5 +1,6 @@
 package com.fs.his.service;
 
+import java.util.ArrayList;
 import java.util.List;
 import com.fs.his.domain.FsExportTask;
 import com.fs.his.param.FsStoreOrderParam;
@@ -63,7 +64,8 @@ public interface IFsExportTaskService
 
     Integer isExportType1( Long userId);
 
-    public void exportStore1Data(FsStoreOrderParam param,boolean isAdmin);
+    public void exportStore1Data(FsStoreOrderParam param, boolean isAdmin, ArrayList<String>filter);
+
 
     public void exportStoreData(FsStoreOrderParam fsStoreOrder);
 

+ 72 - 8
fs-service/src/main/java/com/fs/his/service/impl/FsExportTaskServiceImpl.java

@@ -1,21 +1,23 @@
 package com.fs.his.service.impl;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
 import com.fs.common.core.domain.AjaxResult;
-import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.config.cloud.CloudHostProper;
-import com.fs.his.domain.FsStoreOrderDf;
 import com.fs.his.mapper.FsStoreOrderMapper;
 import com.fs.his.mapper.FsStorePaymentMapper;
 import com.fs.his.param.FsStoreOrderParam;
 import com.fs.his.param.FsStorePaymentParam;
-import com.fs.his.service.IFsStoreOrderService;
 import com.fs.his.utils.PhoneUtil;
 import com.fs.his.vo.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -32,6 +34,7 @@ import com.fs.his.service.IFsExportTaskService;
 @Service
 public class FsExportTaskServiceImpl implements IFsExportTaskService
 {
+    private static final Logger log = LoggerFactory.getLogger(FsExportTaskServiceImpl.class);
     @Autowired
     private FsExportTaskMapper fsExportTaskMapper;
     @Autowired
@@ -121,11 +124,12 @@ public class FsExportTaskServiceImpl implements IFsExportTaskService
 
     @Async
     @Override
-    public void exportStore1Data(FsStoreOrderParam fsStoreOrder,boolean isAdmin) {
+    public void exportStore1Data(FsStoreOrderParam fsStoreOrder,boolean isAdmin,ArrayList<String> filter) {
         if ("金牛明医".equals(cloudHostProper.getCompanyName())){
-            exportErpData(fsStoreOrder, isAdmin);
+            exportErpData(fsStoreOrder, isAdmin,filter);
         } else {
             List<FsStoreOrderExportVO> list = fsStoreOrderMapper.selectFsStoreOrderListVOByExport(fsStoreOrder);
+
             //对手机号脱敏
             if (list != null) {
                 for (FsStoreOrderExportVO vo : list) {
@@ -144,8 +148,16 @@ public class FsExportTaskServiceImpl implements IFsExportTaskService
                     }
                 }
             }
+            // 动态导出:根据选中的字段生成Excel
             ExcelUtil<FsStoreOrderExportVO> util = new ExcelUtil<FsStoreOrderExportVO>(FsStoreOrderExportVO.class);
-            AjaxResult result= util.exportExcel(list, "订单数据");
+            AjaxResult result;
+            // 如果有选中的字段,只导出这些字段
+            if (filter != null && !filter.isEmpty()) {
+                result = util.exportExcelSelectedColumns(list, "订单数据", filter);
+            } else {
+                // 导出所有字段
+                result = util.exportExcel(list, "订单数据");
+            }
             FsExportTask task=fsExportTaskMapper.selectFsExportTaskByTaskId(fsStoreOrder.getTaskId());
             task.setFinishTime(new Date());
             task.setStatus(1);
@@ -155,7 +167,50 @@ public class FsExportTaskServiceImpl implements IFsExportTaskService
 
     }
 
-    private void exportErpData(FsStoreOrderParam fsStoreOrder, boolean isAdmin) {
+    /**
+     * 检查对象是否至少有一个指定字段有有效值
+     * @param vo 要检查的对象
+     * @param fields 字段列表
+     * @return 是否符合条件
+     */
+    private boolean hasAtLeastOneFieldValue(FsStoreOrderErpExportVO vo, List<String> fields) {
+        if (vo == null || fields == null || fields.isEmpty()) {
+            return false;
+        }
+
+        try {
+            // 通过反射检查每个字段
+            for (String fieldName : fields) {
+                // 根据字段名获取对应的getter方法
+                String getterMethod = "get" +
+                        fieldName.substring(0, 1).toUpperCase() +
+                        fieldName.substring(1);
+
+                Method method = vo.getClass().getMethod(getterMethod);
+                Object value = method.invoke(vo);
+
+                // 检查值是否有效(非空且非空字符串)
+                if (value != null) {
+                    if (value instanceof String) {
+                        if (!((String) value).trim().isEmpty()) {
+                            return true;
+                        }
+                    } else {
+                        // 非字符串类型只要不为null就算有效
+                        return true;
+                    }
+                }
+            }
+        } catch (Exception e) {
+            // 处理反射异常,如字段不存在等情况
+            log.error("检查字段值时发生错误", e);
+        }
+
+        // 所有字段都无效
+        return false;
+    }
+
+    private void exportErpData(FsStoreOrderParam fsStoreOrder, boolean isAdmin,ArrayList<String> filter) {
         List<FsStoreOrderErpExportVO> erpList = fsStoreOrderMapper.selectFsStoreOrderListErpVOByExport(fsStoreOrder);
         //对手机号脱敏
         if (erpList != null) {
@@ -175,8 +230,17 @@ public class FsExportTaskServiceImpl implements IFsExportTaskService
                 }
             }
         }
+
+        // 动态导出:根据选中的字段生成Excel
         ExcelUtil<FsStoreOrderErpExportVO> util = new ExcelUtil<FsStoreOrderErpExportVO>(FsStoreOrderErpExportVO.class);
-        AjaxResult result= util.exportExcel(erpList, "订单数据");
+        AjaxResult result;
+        // 如果有选中的字段,只导出这些字段
+        if (filter != null && !filter.isEmpty()) {
+            result = util.exportExcelSelectedColumns(erpList, "订单数据", filter);
+        } else {
+            // 导出所有字段
+            result = util.exportExcel(erpList, "订单数据");
+        }
         FsExportTask task=fsExportTaskMapper.selectFsExportTaskByTaskId(fsStoreOrder.getTaskId());
         task.setFinishTime(new Date());
         task.setStatus(1);

+ 6 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsPackageOrderServiceImpl.java

@@ -1663,7 +1663,12 @@ public class FsPackageOrderServiceImpl implements IFsPackageOrderService
 
 
         FsPackageOrderComputeParam computeParam=new FsPackageOrderComputeParam();
-        BeanUtil.copyProperties(param,computeParam);
+        computeParam.setCompanyUserId(param.getCompanyUserId());
+        computeParam.setCompanyId(param.getCompanyId());
+        computeParam.setPayType(param.getPayType());
+        if(order.getStoreId() != null){
+            computeParam.setStoreId(order.getStoreId());
+        }
 
         Map<String,Object> moneys=computeOrderMoney(order.getTotalPrice(),computeParam);
         order.setPayMoney((BigDecimal)moneys.get("payMoney"));

+ 5 - 5
fs-service/src/main/java/com/fs/qw/param/QwExternalContactParam.java

@@ -100,16 +100,16 @@ public class QwExternalContactParam {
     private String isBind;
     private String isBindMini;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date lossTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date delTime;
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date eTime;
 
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date sTime;
 
     /**

+ 2 - 0
fs-service/src/main/resources/application-config-druid-hst.yml

@@ -87,3 +87,5 @@ wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:
 
+# 0 代表关闭 1代表开启(润天老商户号的扣款限制)
+enableRedPackAccount: 1