Просмотр исходного кода

新增
1、新增出库单明细接口导出
修改
1、修改部分模块时间字段

liangwenxuan 3 месяцев назад
Родитель
Сommit
b9de2fe73a

+ 1 - 1
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/kingdee/KingdeeApiImpl.java

@@ -595,7 +595,7 @@ public class KingdeeApiImpl implements KingdeeApi {
 
     @Override
     public K3CloudApi getK3CloudApi(Long tenantId) {
-        SocialTypeEnum environment = SocialTypeEnum.KINGDEE;
+        SocialTypeEnum environment = SocialTypeEnum.KINGDEE_PRODUCT;
         if (null == tenantId) {
             TenantDO tenantDO = tenantMapper.selectOne(new LambdaQueryWrapperX<TenantDO>().eq(TenantDO::getPackageId, PACKAGE_ID_SYSTEM));
             tenantId = tenantDO.getId();

+ 36 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/biz/MaterialIoController.java

@@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.inbound
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.inboundreturn.MaterialInboundReturnOrderPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.inboundreturn.MaterialInboundReturnOrderPageRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.inboundreturn.MaterialInboundReturnOrderRespVO;
+import cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.outbound.MaterialOutboundOrderExportExcelVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.outbound.MaterialOutboundOrderRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.outboundreturn.MaterialOutboundReturnOrderPageReqVO;
 import cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.outboundreturn.MaterialOutboundReturnOrderPageRespVO;
@@ -180,6 +181,41 @@ public class MaterialIoController {
         return success(materialIoService.getOutboundOrder(id));
     }
 
+    @GetMapping("/outbound/export")
+    @Operation(summary = "导出出库单(单据明细)")
+    @Parameter(name = "id", description = "编号", required = true, example = "1")
+    @TenantIgnore
+    public void exportOutboundOrder(@RequestParam("id") Long id, HttpServletResponse response) throws IOException {
+        MaterialOutboundOrderRespVO order = materialIoService.getOutboundOrder(id);
+
+        List<MaterialOutboundOrderExportExcelVO> excelList = new ArrayList<>();
+        if (order.getItems() != null) {
+            for (cn.iocoder.yudao.module.system.controller.admin.biz.vo.materialio.outbound.MaterialOutboundOrderItemRespVO item : order.getItems()) {
+                MaterialOutboundOrderExportExcelVO row = new MaterialOutboundOrderExportExcelVO();
+                row.setOrderNo(order.getOrderNo());
+                row.setOrderDate(order.getOrderDate());
+                row.setOutDeptName(order.getOutDeptName());
+                row.setOutUser(order.getOutUser());
+                row.setOutReason(order.getOutReason());
+                row.setRemark(order.getRemark());
+                row.setRefInStoreName(item.getRefInStoreName());
+                row.setRefInOrderNo(item.getRefInOrderNo());
+                row.setMaterialNumber(item.getMaterialNumber());
+                row.setMaterialName(item.getMaterialName());
+                row.setMaterialUnit(item.getMaterialUnit());
+                row.setProduceDate(item.getProduceDate());
+                row.setQuantity(item.getQuantity());
+                row.setInUnitPrice(item.getInUnitPrice());
+                row.setSaleUnitPrice(item.getSaleUnitPrice());
+                row.setAmount(item.getAmount());
+                excelList.add(row);
+            }
+        }
+
+        String fileName = (order.getOrderNo() != null ? order.getOrderNo() : "出库单") + ".xlsx";
+        ExcelUtils.write(response, fileName, "数据", MaterialOutboundOrderExportExcelVO.class, excelList);
+    }
+
     @DeleteMapping("/delete")
     @Operation(summary = "删除单据(级联删除明细;不冲销库存)")
     @Parameter(name = "id", description = "单据ID", required = true)

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/RehabilitationAssessmentsDO.java

@@ -42,8 +42,8 @@ public class RehabilitationAssessmentsDO  {
      * 评估时间
      */
     @Schema(description = "评估时间")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date assessmentTime;
     /**
      * 评估次数

+ 2 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/biz/TrainingRecordsDO.java

@@ -42,8 +42,8 @@ public class TrainingRecordsDO{
      * 训练时间
      */
     @Schema(description = "训练时间")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private Date trainingTime;
     /**
      * 康复师

+ 14 - 9
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/KingdeeOrderAbleSyncIdJob.java

@@ -4,9 +4,11 @@ import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
 import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 import cn.iocoder.yudao.module.system.api.kingdee.KingdeeApi;
 import com.google.gson.Gson;
+import com.google.gson.JsonArray;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -29,16 +31,19 @@ public class KingdeeOrderAbleSyncIdJob implements JobHandler {
         logger.info("KingdeeOrderAbleSyncIdJob execute param:{}", jsonParam);
         Gson gson = new Gson();
         JsonObject jsonObject = gson.fromJson(jsonParam, JsonObject.class);
-        JsonElement tenantIdElement = jsonObject.get("tenantId");
-        if (tenantIdElement == null) {
-            return "参数错误,tenantId为空!";
+        JsonArray tenantIds = jsonObject.getAsJsonArray("tenantIds");
+        if (tenantIds == null) {
+            return "参数错误,tenantIds为空!";
         }
-        Long tenantId = tenantIdElement.getAsLong();
-
-        String billingMonth = YearMonth.now().toString();
-        // 应收单
-        Integer syncCount = kingdeeApi.syncArReceivable(tenantId, billingMonth);
-        return String.format("租户{}同步金蝶用户账单数量{}", tenantId, syncCount);
+        JsonElement billingMonthElement = jsonObject.get("billingMonth");
+        String billingMonth = billingMonthElement == null || StringUtils.isBlank(billingMonthElement.getAsString()) ? YearMonth.now().toString() : billingMonthElement.getAsString();
+        StringBuilder msg = new StringBuilder();
+        for (JsonElement tenantId : tenantIds) {
+            // 应收单
+            Integer syncCount = kingdeeApi.syncArReceivable(tenantId.getAsLong(), billingMonth);
+            msg.append(String.format("租户{}同步金蝶用户账单数量{}", tenantId.getAsLong(), syncCount)).append("\n");
+        }
+        return msg.toString();
     }
 
 }

+ 19 - 12
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/ccb/CcbBusinessService.java

@@ -7,17 +7,20 @@ import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpenseOrderItemDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpensePayOrderDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.biz.ExpensePayOrderItemDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.ccb.CcbPayCallbackRecordDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.ccb.MerchantRecordDO;
 import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderItemMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpenseOrderMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpensePayOrderItemMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.biz.ExpensePayOrderMapper;
 import cn.iocoder.yudao.module.system.dal.mysql.ccb.CcbPayCallbackRecordMapper;
+import cn.iocoder.yudao.module.system.dal.mysql.ccb.MerchantRecordMapper;
 import cn.iocoder.yudao.module.system.enums.ErrorCodeConstants;
 import cn.iocoder.yudao.module.system.enums.change.BusinessConstants;
 import cn.iocoder.yudao.module.system.enums.common.BooleanEnum;
 import cn.iocoder.yudao.module.system.util.pay.CcbPayConstant;
 import cn.iocoder.yudao.module.system.util.pay.CcbPayUtils;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -48,22 +51,15 @@ public class CcbBusinessService {
     @Resource
     private ExpensePayOrderItemMapper expensePayOrderItemMapper;
 
+    @Autowired
+    private MerchantRecordMapper merchantRecordMapper;
 
-    public void handleOrderBusiness(Map<String, String> paramMap) throws Exception {
-        // 1.校验商户柜台代码、分行代码(与配置匹配)
-        String callbackPosId = CcbPayUtils.getMapValue(paramMap, "POSID");
-        String callbackBranchId = CcbPayUtils.getMapValue(paramMap, "BRANCHID");
-        if (!CcbPayConstant.POSID.equals(callbackPosId) || !CcbPayConstant.BRANCHID.equals(callbackBranchId)) {
-            String errorMessage = "商户信息不匹配:POSID=" + callbackPosId + ",BRANCHID=" + callbackBranchId;
-            saveCallbackRecord(paramMap, errorMessage);
-            throw new Exception(errorMessage);
-        }
 
+    public void handleOrderBusiness(Map<String, String> paramMap) throws Exception {
+        //1.校验账单是否存在
         String orderId = CcbPayUtils.getMapValue(paramMap, "ORDERID");
         String callbackAmountStr = CcbPayUtils.getMapValue(paramMap, "PAYMENT");
         BigDecimal callbackAmount = new BigDecimal(callbackAmountStr);
-
-        //3.校验账单是否存在
         ExpenseOrderDO expenseOrderDO = expenseOrderMapper.selectOne(new LambdaQueryWrapperX<ExpenseOrderDO>()
                 .eq(ExpenseOrderDO::getBillOrderNumber, orderId)
                 .last("FOR UPDATE"));   //加悲观锁,防止并发操作导致数据不一致的问题
@@ -72,7 +68,18 @@ public class CcbBusinessService {
             saveCallbackRecord(paramMap, errorMessage);
             throw exception(ErrorCodeConstants.COMMON_NOT_FOUND);
         }
-        //4.校验账单是否已经支付
+        // 商户信息
+        MerchantRecordDO merchantRecordDO = merchantRecordMapper.selectOne(new LambdaQueryWrapperX<MerchantRecordDO>()
+                .eq(MerchantRecordDO::getTenantId, expenseOrderDO.getTenantId()));
+        // 2.校验商户柜台代码、分行代码(与配置匹配)
+        String callbackPosId = CcbPayUtils.getMapValue(paramMap, "POSID");
+        String callbackBranchId = CcbPayUtils.getMapValue(paramMap, "BRANCHID");
+        if (!merchantRecordDO.getCounterNumber().equals(callbackPosId) || !CcbPayConstant.BRANCHID.equals(callbackBranchId)) {
+            String errorMessage = "商户信息不匹配:POSID=" + callbackPosId + ",BRANCHID=" + callbackBranchId;
+            saveCallbackRecord(paramMap, errorMessage);
+            throw new Exception(errorMessage);
+        }
+        //3.校验账单是否已经支付
         if (expenseOrderDO.getPayStatus().equals(BooleanEnum.TRUE.getValue())) {
             String errorMessage = "订单已经支付: " + orderId;
             saveCallbackRecord(paramMap, errorMessage);

+ 1 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/reservation/ReservationDepositServiceImpl.java

@@ -54,6 +54,7 @@ public class ReservationDepositServiceImpl implements ReservationDepositService
     @Override
     @Transactional
     public void payFees(ReservationDepositDO reservationDepositDO) {
+        reservationDepositDO.setId(null);
         //修改状态
         ReservationBedDO reservationBedDO = reservationBedMapper.selectById(reservationDepositDO.getReservationId());
         reservationBedDO.setStatus(2);