From 681462a70fc60a1b763c6f7656e537a092269c97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A3=B7=E5=8F=B6?= <14103883+leaf-phos@user.noreply.gitee.com> Date: Wed, 20 Nov 2024 22:09:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/constant/Constants.java | 7 +- .../common/core/domain/entity/SysUser.java | 7 + .../utils/collection/CollectionUtils.java | 4 + .../web/yh/logImport/domain/LogImport.java | 3 + .../domain/enums/LogImportBizType.java | 4 +- .../logImport/domain/enums/LogImportType.java | 20 ++ .../yh/logImport/mapper/LogImportMapper.xml | 9 +- .../logImport/service/ILogImportService.java | 6 +- .../service/impl/LogImportServiceImpl.java | 6 +- .../controller/MaterialController.java | 3 +- .../yh/material/service/MaterialService.java | 2 +- .../service/impl/MaterialServiceImpl.java | 65 +++--- .../price/service/impl/PriceServiceImpl.java | 3 +- .../controller/ProdOrderController.java | 9 +- .../web/yh/prodOrder/domain/ProdOrder.java | 10 +- .../domain/dto/ProdOrderSyncQuery.java | 22 ++ .../domain/enums/ProdOrderErpStatus.java | 38 ++++ .../domain/vo/ProdOrderImportContentVO.java | 45 ++++ .../yh/prodOrder/mapper/ProdOrderMapper.java | 8 + .../yh/prodOrder/mapper/ProdOrderMapper.xml | 10 + .../prodOrder/service/ProdOrderService.java | 11 +- .../service/impl/ProdOrderConverterImpl.java | 10 +- .../service/impl/ProdOrderServiceImpl.java | 214 +++++++++++------- .../yh/report/domain/dto/ReportVerifyDTO.java | 10 +- .../service/impl/ReportServiceImpl.java | 33 +++ .../web/yh/report/utils/ReportUtils.java | 24 ++ .../domain/ReportOrderProdVO.java | 18 ++ .../mapper/ReportOrderProdMapper.xml | 8 +- .../yh/unit/controller/UnitController.java | 3 +- .../web/yh/unit/service/UnitService.java | 2 +- .../yh/unit/service/impl/UnitServiceImpl.java | 58 ++--- 31 files changed, 507 insertions(+), 165 deletions(-) create mode 100644 ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/enums/LogImportType.java create mode 100644 ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/dto/ProdOrderSyncQuery.java create mode 100644 ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/enums/ProdOrderErpStatus.java create mode 100644 ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/vo/ProdOrderImportContentVO.java create mode 100644 ruoyi-web/src/main/java/com/ruoyi/web/yh/report/utils/ReportUtils.java diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java index 0c384c6..bb32106 100644 --- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -5,7 +5,7 @@ import io.jsonwebtoken.Claims; /** * 通用常量信息 - * + * * @author ruoyi */ public class Constants @@ -170,4 +170,9 @@ public class Constants */ public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config", "com.ruoyi.generator" }; + + /** + * 系统 用户ID + */ + public static final Long SYSTEM_USER_ID = 0L; } diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index bda7152..7224989 100644 --- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -132,6 +132,13 @@ public class SysUser extends BaseEntity this.userId = userId; } + public static SysUser system() { + SysUser user = new SysUser(); + user.setUserId(0L); + user.setNickName("系统"); + return user; + } + public boolean isAdmin() { return isAdmin(this.userId); diff --git a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/utils/collection/CollectionUtils.java b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/utils/collection/CollectionUtils.java index f707f3c..296aacd 100644 --- a/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/utils/collection/CollectionUtils.java +++ b/common-ruoyi/ruoyi-common/src/main/java/com/ruoyi/common/utils/collection/CollectionUtils.java @@ -106,6 +106,10 @@ public class CollectionUtils extends org.springframework.util.CollectionUtils { return list.stream().map(keyMapper).filter(Objects::nonNull).distinct().collect(Collectors.toList()); } + public static List map(Function keyMapper, T ...arrays) { + return map(Arrays.asList(arrays), keyMapper); + } + public static Set mapToSet(Collection collection, Function keyMapper) { return collection.stream().map(keyMapper).filter(Objects::nonNull).collect(Collectors.toSet()); } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/LogImport.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/LogImport.java index b119b79..bd25402 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/LogImport.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/LogImport.java @@ -39,4 +39,7 @@ public class LogImport extends BaseEntity @ApiModelProperty("完成时间") private LocalDateTime finishedTime; + @Excel(name = "日志类型", readConverterExp = "1=导入日志,2=同步日志") + @ApiModelProperty("日志类型") + private String type; } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/enums/LogImportBizType.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/enums/LogImportBizType.java index ec35c45..fdbaaaa 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/enums/LogImportBizType.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/enums/LogImportBizType.java @@ -2,6 +2,7 @@ package com.ruoyi.web.yh.logImport.domain.enums; import com.ruoyi.web.yh.logImportDetail.domain.interfaces.ImportContent; import com.ruoyi.web.yh.price.domain.vo.PriceImportContentVO; +import com.ruoyi.web.yh.prodOrder.domain.vo.ProdOrderImportContentVO; import lombok.AllArgsConstructor; import lombok.Getter; @@ -14,7 +15,8 @@ import lombok.Getter; @AllArgsConstructor public enum LogImportBizType { - PRICE("1", "单价", PriceImportContentVO.class); + PRICE("1", "单价", PriceImportContentVO.class), + PROD_ORDER("2", "生产订单", ProdOrderImportContentVO.class); private final String type; private final String msg; diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/enums/LogImportType.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/enums/LogImportType.java new file mode 100644 index 0000000..e6d71cd --- /dev/null +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/domain/enums/LogImportType.java @@ -0,0 +1,20 @@ +package com.ruoyi.web.yh.logImport.domain.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * @author wjh + * 2024/11/20 + */ +@Getter +@AllArgsConstructor +public enum LogImportType { + + IMPORT("1", "导入"), + SYNC("2", "同步"); + + private final String type; + private final String msg; + +} diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/mapper/LogImportMapper.xml b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/mapper/LogImportMapper.xml index d464579..9b11c28 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/mapper/LogImportMapper.xml +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/mapper/LogImportMapper.xml @@ -14,7 +14,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bli.create_id, bli.create_by, bli.create_time, - bli.finished_time + bli.finished_time, + bli.type from bst_log_import bli @@ -24,6 +25,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and bli.biz_type = #{query.bizType} and bli.create_id = #{query.createId} and bli.finished_time = #{query.finishedTime} + and type = #{query.type} ${query.params.dataScope} @@ -48,6 +50,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" create_by, create_time, finished_time, + type, #{status}, @@ -56,6 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{createBy}, #{createTime}, #{finishedTime}, + #{type}, @@ -68,12 +72,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - status = #{data.status}, + `status` = #{data.status}, biz_type = #{data.bizType}, create_id = #{data.createId}, create_by = #{data.createBy}, create_time = #{data.createTime}, finished_time = #{data.finishedTime}, + type = #{data.type}, diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/service/ILogImportService.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/service/ILogImportService.java index 4b12399..05b92be 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/service/ILogImportService.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/service/ILogImportService.java @@ -7,8 +7,7 @@ import com.ruoyi.web.yh.logImport.domain.LogImport; import com.ruoyi.web.yh.logImport.domain.LogImportVO; import com.ruoyi.web.yh.logImport.domain.LogImportQuery; import com.ruoyi.web.yh.logImport.domain.enums.LogImportBizType; -import com.ruoyi.web.yh.logImportDetail.domain.enums.LogImportDetailType; -import com.ruoyi.web.yh.price.domain.PriceVO; +import com.ruoyi.web.yh.logImport.domain.enums.LogImportType; /** * 导入日志Service接口 @@ -69,10 +68,11 @@ public interface ILogImportService /** * 新增一个默认日志 * + * @param type * @param bizType * @param user */ - LogImportVO addDefaultLog(LogImportBizType bizType, SysUser user); + LogImportVO addDefaultLog(LogImportType type, LogImportBizType bizType, SysUser user); /** diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/service/impl/LogImportServiceImpl.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/service/impl/LogImportServiceImpl.java index fcae979..b733f46 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/service/impl/LogImportServiceImpl.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/logImport/service/impl/LogImportServiceImpl.java @@ -1,6 +1,5 @@ package com.ruoyi.web.yh.logImport.service.impl; -import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -9,7 +8,7 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.web.yh.logImport.domain.enums.LogImportBizType; import com.ruoyi.web.yh.logImport.domain.enums.LogImportStatus; -import com.ruoyi.web.yh.logImportDetail.domain.enums.LogImportDetailType; +import com.ruoyi.web.yh.logImport.domain.enums.LogImportType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.web.yh.logImport.mapper.LogImportMapper; @@ -107,12 +106,13 @@ public class LogImportServiceImpl implements ILogImportService } @Override - public LogImportVO addDefaultLog(LogImportBizType bizType, SysUser user) { + public LogImportVO addDefaultLog(LogImportType type, LogImportBizType bizType, SysUser user) { LogImport po = new LogImport(); po.setStatus(LogImportStatus.PROCESSING.getStatus()); po.setBizType(bizType.getType()); po.setCreateId(user.getUserId()); po.setCreateBy(user.getNickName()); + po.setType(type.getType()); int insert = this.insertLogImport(po); ServiceUtil.assertion(insert != 1, "新增导入日志失败"); diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/controller/MaterialController.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/controller/MaterialController.java index 5bbd02a..0c8a4b8 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/controller/MaterialController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/controller/MaterialController.java @@ -117,6 +117,7 @@ public class MaterialController extends BaseController @Log(title = LOG_TITLE, businessType = BusinessType.SYNC, bizType = LogBizType.MATERIAL) @PutMapping("/sync") public AjaxResult sync() { - return success(materialService.sync()); + materialService.sync(); + return success(); } } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/service/MaterialService.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/service/MaterialService.java index b8925f2..0ec50a5 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/service/MaterialService.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/service/MaterialService.java @@ -61,6 +61,6 @@ public interface MaterialService */ public int deleteMaterialById(Long id); - int sync(); + void sync(); } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/service/impl/MaterialServiceImpl.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/service/impl/MaterialServiceImpl.java index 8bedb15..3116ba4 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/service/impl/MaterialServiceImpl.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/material/service/impl/MaterialServiceImpl.java @@ -124,43 +124,44 @@ public class MaterialServiceImpl implements MaterialService } @Override - public int sync() { - // 查询字段 - List fieldKeys = Arrays.asList( - K3MaterialField.F_MATERIAL_ID, - K3MaterialField.F_NUMBER, - K3MaterialField.F_NAME, - K3MaterialField.F_SPECIFICATION - ); - int startRow = 0; - int limit = 10000; - int size = 0; + public void sync() { + scheduledExecutorService.schedule(() -> { + // 查询字段 + List fieldKeys = Arrays.asList( + K3MaterialField.F_MATERIAL_ID, + K3MaterialField.F_NUMBER, + K3MaterialField.F_NAME, + K3MaterialField.F_SPECIFICATION + ); + int startRow = 0; + int limit = 10000; + int size = 0; - // 一直查询,直到查到的数据量比limit小,说明查完了 - while(true) { - // 查询ERP数据 - List erpList = k3Service.selectList(K3FormIds.MATERIAL, fieldKeys, startRow, limit); + // 一直查询,直到查到的数据量比limit小,说明查完了 + while(true) { + // 查询ERP数据 + List erpList = k3Service.selectList(K3FormIds.MATERIAL, fieldKeys, startRow, limit); - // 转为PO - List materialList = materialConverter.toPoByErpList(fieldKeys, erpList); + // 转为PO + List materialList = materialConverter.toPoByErpList(fieldKeys, erpList); - // 保存 - for (Material material : materialList) { - scheduledExecutorService.schedule(() -> { - this.saveByErpId(material); - }, 0, TimeUnit.SECONDS); + // 保存 + for (Material material : materialList) { + scheduledExecutorService.schedule(() -> { + this.saveByErpId(material); + }, 0, TimeUnit.SECONDS); + } + + size += materialList.size(); + + if (materialList.size() < limit) { + break; + } else { + startRow += limit; + } } + }, 0, TimeUnit.SECONDS); - size += materialList.size(); - - if (materialList.size() < limit) { - break; - } else { - startRow += limit; - } - } - - return size; } /** diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/price/service/impl/PriceServiceImpl.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/price/service/impl/PriceServiceImpl.java index 25b8265..6a06309 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/price/service/impl/PriceServiceImpl.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/price/service/impl/PriceServiceImpl.java @@ -21,6 +21,7 @@ import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.web.yh.logImport.domain.LogImportVO; import com.ruoyi.web.yh.logImport.domain.enums.LogImportBizType; +import com.ruoyi.web.yh.logImport.domain.enums.LogImportType; import com.ruoyi.web.yh.logImport.service.ILogImportService; import com.ruoyi.web.yh.logImportDetail.domain.enums.LogImportDetailType; import com.ruoyi.web.yh.logImportDetail.service.ILogImportDetailService; @@ -305,7 +306,7 @@ public class PriceServiceImpl implements PriceService ServiceUtil.assertion(user == null, "操作人不存在"); // 新增一个日志 - LogImportVO importLog = logImportService.addDefaultLog(LogImportBizType.PRICE, user); + LogImportVO importLog = logImportService.addDefaultLog(LogImportType.IMPORT, LogImportBizType.PRICE, user); ServiceUtil.assertion(importLog == null, "创建导入日志失败"); // 开始异步导入 diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/controller/ProdOrderController.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/controller/ProdOrderController.java index 69cda19..8e5362d 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/controller/ProdOrderController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/controller/ProdOrderController.java @@ -3,9 +3,10 @@ package com.ruoyi.web.yh.prodOrder.controller; import java.util.List; import javax.servlet.http.HttpServletResponse; -import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constants.LogTitle; import com.ruoyi.common.enums.LogBizType; +import com.ruoyi.web.yh.prodOrder.domain.dto.ProdOrderSyncQuery; +import com.ruoyi.web.yh.prodOrder.domain.enums.ProdOrderErpStatus; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -124,8 +125,10 @@ public class ProdOrderController extends BaseController @PreAuthorize("@ss.hasPermi('yh:productOrder:sync')") @Log(title = LogTitle.PROD_ORDER, businessType = BusinessType.SYNC, bizType = LogBizType.PROD_ORDER) @PutMapping("/sync") - public AjaxResult sync() { - return success(prodOrderService.sync()); + public AjaxResult sync(@RequestBody ProdOrderSyncQuery query) { + query.setStatusList(ProdOrderErpStatus.canSync()); + prodOrderService.sync(query, getUserId()); + return success(); } } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/ProdOrder.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/ProdOrder.java index 8a22d23..fec23a2 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/ProdOrder.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/ProdOrder.java @@ -114,11 +114,17 @@ public class ProdOrder extends BaseEntity @ApiModelProperty("ERP基本单位未入库数量") private BigDecimal erpBaseNoStockInQty; - @Excel(name = "已审核通过的基础数量") - @ApiModelProperty("已审核通过的基础数量") + @Excel(name = "已审核通过的基本数量") + @ApiModelProperty("已审核通过的基本数量") private BigDecimal verifiedBaseNum; @Excel(name = "ERP明细基本单位ID") @ApiModelProperty("ERP明细基本单位ID") private String erpBaseUnitId; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "最近同步时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty("最近同步时间") + private LocalDateTime syncTime; + } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/dto/ProdOrderSyncQuery.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/dto/ProdOrderSyncQuery.java new file mode 100644 index 0000000..48534b5 --- /dev/null +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/dto/ProdOrderSyncQuery.java @@ -0,0 +1,22 @@ +package com.ruoyi.web.yh.prodOrder.domain.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * 同步生产订单的查询参数 + * @author wjh + * 2024/11/20 + */ +@Data +public class ProdOrderSyncQuery { + + @ApiModelProperty("业务状态列表") + private List statusList; + + @ApiModelProperty("生产订单ID") + private String id; + +} diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/enums/ProdOrderErpStatus.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/enums/ProdOrderErpStatus.java new file mode 100644 index 0000000..34b720f --- /dev/null +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/enums/ProdOrderErpStatus.java @@ -0,0 +1,38 @@ +package com.ruoyi.web.yh.prodOrder.domain.enums; + +import com.ruoyi.common.utils.collection.CollectionUtils; +import com.ruoyi.web.yh.prodOrder.domain.dto.ProdOrderSyncQuery; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @author wjh + * 2024/11/20 + */ +@Getter +@AllArgsConstructor +public enum ProdOrderErpStatus { + + PLAN("1", "计划"), + PLAN_CONFIRM("2", "计划确认"), + ISSUED("3", "下达"), + START_WORK("4", "开工"), + END_WORK("5", "完工"), + CLOSED("6", "结案"), + FINISHED("7", "结算"); + + private final String status; + private final String msg; + + /** + * 允许同步的状态列表 + */ + public static List canSync() { + return CollectionUtils.map(ProdOrderErpStatus::getStatus, START_WORK, END_WORK, CLOSED, FINISHED); + } + +} diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/vo/ProdOrderImportContentVO.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/vo/ProdOrderImportContentVO.java new file mode 100644 index 0000000..5b5a8ac --- /dev/null +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/domain/vo/ProdOrderImportContentVO.java @@ -0,0 +1,45 @@ +package com.ruoyi.web.yh.prodOrder.domain.vo; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.constants.DictType; +import com.ruoyi.web.yh.logImportDetail.domain.interfaces.ImportContent; +import com.ruoyi.web.yh.prodOrder.domain.ProdOrder; +import com.ruoyi.web.yh.prodOrder.domain.ProdOrderVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.apache.poi.ss.usermodel.IndexedColors; + +/** + * @author wjh + * 2024/11/20 + */ +@Data +public class ProdOrderImportContentVO extends ProdOrder implements ImportContent { + + @Excel( + name = "导入结果", + dictType = DictType.LOG_IMPORT_DETAIL_TYPE, + comboReadDict = true, + backgroundColor = IndexedColors.YELLOW, + headerBackgroundColor = IndexedColors.YELLOW, + color = IndexedColors.RED, + headerColor = IndexedColors.RED, + sort = 0 + ) + private String importResult; + + @Excel( + name = "导入信息", + width = 30, + backgroundColor = IndexedColors.YELLOW, + headerBackgroundColor = IndexedColors.YELLOW, + color = IndexedColors.RED, + headerColor = IndexedColors.RED, + sort = 1 + ) + private String importMessage; + + @Excel(name = "部门名称", prompt = "必填") + @ApiModelProperty("部门名称") + private String deptName; +} diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/mapper/ProdOrderMapper.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/mapper/ProdOrderMapper.java index fcf2c98..5699b8f 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/mapper/ProdOrderMapper.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/mapper/ProdOrderMapper.java @@ -1,5 +1,6 @@ package com.ruoyi.web.yh.prodOrder.mapper; +import java.math.BigDecimal; import java.util.List; import com.ruoyi.web.yh.prodOrder.domain.ProdOrder; import com.ruoyi.web.yh.prodOrder.domain.ProdOrderVO; @@ -61,4 +62,11 @@ public interface ProdOrderMapper * @return 结果 */ public int deleteProdOrderByIds(Long[] ids); + + /** + * 增加已审核通过的基础数量 + * @param orderId 订单ID + * @param num 基础数量 + */ + int addVerifiedBaseNum(@Param("orderId") Long orderId, @Param("num") BigDecimal num); } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/mapper/ProdOrderMapper.xml b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/mapper/ProdOrderMapper.xml index 4d10ec6..7f87bdc 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/mapper/ProdOrderMapper.xml +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/mapper/ProdOrderMapper.xml @@ -35,6 +35,7 @@ bpo.erp_base_no_stock_in_qty, bpo.verified_base_num, bpo.erp_base_unit_id, + bpo.sync_time, bm.erp_number as material_number, sd.dept_name as work_shop_name, sd.dept_id as dept_id, @@ -119,6 +120,7 @@ erp_base_no_stock_in_qty, verified_base_num, erp_base_unit_id, + sync_time, #{erpId}, @@ -145,9 +147,16 @@ #{erpBaseNoStockInQty}, #{verifiedBaseNum}, #{erpBaseUnitId}, + #{syncTime}, + + update bst_prod_order + set verified_base_num = verified_base_num + #{num} + where id = #{orderId} + + update bst_prod_order @@ -181,6 +190,7 @@ erp_base_no_stock_in_qty = #{data.erpBaseNoStockInQty}, verified_base_num = #{data.verifiedBaseNum}, erp_base_unit_id = #{data.erpBaseUnitId}, + sync_time = #{data.syncTime}, diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/ProdOrderService.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/ProdOrderService.java index fa20c83..d8e9d27 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/ProdOrderService.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/ProdOrderService.java @@ -1,9 +1,11 @@ package com.ruoyi.web.yh.prodOrder.service; +import java.math.BigDecimal; import java.util.List; import com.ruoyi.web.yh.prodOrder.domain.ProdOrder; import com.ruoyi.web.yh.prodOrder.domain.ProdOrderVO; import com.ruoyi.web.yh.prodOrder.domain.ProdOrderQuery; +import com.ruoyi.web.yh.prodOrder.domain.dto.ProdOrderSyncQuery; /** * 生产订单Service接口 @@ -64,7 +66,7 @@ public interface ProdOrderService /** * 从ERP同步数据 */ - int sync(); + void sync(ProdOrderSyncQuery query, Long operaId); /** * 根据单据编号查询单据 @@ -77,4 +79,11 @@ public interface ProdOrderService * @return */ ProdOrderVO selectOne(ProdOrderQuery query); + + /** + * 增加已审核的基本单位数量 + * @param orderId 订单ID + * @param num 增加数量 + */ + int addVerifiedBaseNum(Long orderId, BigDecimal num); } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/impl/ProdOrderConverterImpl.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/impl/ProdOrderConverterImpl.java index 0490d8b..d3811d4 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/impl/ProdOrderConverterImpl.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/impl/ProdOrderConverterImpl.java @@ -10,6 +10,7 @@ import com.ruoyi.web.yh.prodOrder.service.ProdOrderConverter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -21,9 +22,6 @@ import java.util.List; @Service public class ProdOrderConverterImpl implements ProdOrderConverter { - @Autowired - private MaterialService materialService; - /** * 将ERP数据转为PO列表 * @@ -39,6 +37,8 @@ public class ProdOrderConverterImpl implements ProdOrderConverter { // 创建erpList大小的对象列表 List result = new ArrayList<>(erpList.size()); + LocalDateTime syncTime = LocalDateTime.now(); + for (JSONArray row : erpList) { ProdOrder po = new ProdOrder(); for (int i = 0; i < headers.size(); i++) { @@ -110,6 +110,10 @@ public class ProdOrderConverterImpl implements ProdOrderConverter { default: break; } } + + // 同步时间 + po.setSyncTime(syncTime); + result.add(po); } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/impl/ProdOrderServiceImpl.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/impl/ProdOrderServiceImpl.java index 852dc9f..49cfcea 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/impl/ProdOrderServiceImpl.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/prodOrder/service/impl/ProdOrderServiceImpl.java @@ -1,13 +1,17 @@ package com.ruoyi.web.yh.prodOrder.service.impl; +import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import com.alibaba.fastjson2.JSONArray; import com.github.pagehelper.PageHelper; import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.redis.RedisLock; import com.ruoyi.common.core.redis.enums.RedisLockKey; import com.ruoyi.common.exception.ServiceException; @@ -17,6 +21,15 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.k3cloud.constants.fileds.K3ProdField; import com.ruoyi.common.k3cloud.constants.K3FormIds; import com.ruoyi.common.k3cloud.service.K3Service; +import com.ruoyi.common.utils.collection.CollectionUtils; +import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.web.yh.logImport.domain.LogImportVO; +import com.ruoyi.web.yh.logImport.domain.enums.LogImportBizType; +import com.ruoyi.web.yh.logImport.domain.enums.LogImportType; +import com.ruoyi.web.yh.logImport.service.ILogImportService; +import com.ruoyi.web.yh.logImportDetail.domain.enums.LogImportDetailType; +import com.ruoyi.web.yh.logImportDetail.service.ILogImportDetailService; +import com.ruoyi.web.yh.prodOrder.domain.dto.ProdOrderSyncQuery; import com.ruoyi.web.yh.prodOrder.service.ProdOrderConverter; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -26,7 +39,6 @@ import com.ruoyi.web.yh.prodOrder.domain.ProdOrder; import com.ruoyi.web.yh.prodOrder.domain.ProdOrderVO; import com.ruoyi.web.yh.prodOrder.domain.ProdOrderQuery; import com.ruoyi.web.yh.prodOrder.service.ProdOrderService; -import org.springframework.util.CollectionUtils; /** * 生产订单Service业务层处理 @@ -53,6 +65,15 @@ public class ProdOrderServiceImpl implements ProdOrderService @Autowired private RedisLock redisLock; + @Autowired + private ILogImportService logImportService; + + @Autowired + private ISysUserService userService; + + @Autowired + private ILogImportDetailService logImportDetailService; + /** * 查询生产订单 * @@ -128,62 +149,86 @@ public class ProdOrderServiceImpl implements ProdOrderService } @Override - public int sync() { - // 查询字段 - List fieldKeys = Arrays.asList( - K3ProdField.FID, - K3ProdField.F_BILL_NO, - K3ProdField.F_DOCUMENT_STATUS, - K3ProdField.F_CREATE_DATE, - K3ProdField.F_MODIFY_DATE, - K3ProdField.F_DESCRIPTION, - K3ProdField.F_DATE, - K3ProdField.F_IS_REWORK, - K3ProdField.F_ROW_ID, - K3ProdField.F_MEMO_ITEM, - K3ProdField.F_CONVEY_DATE, - K3ProdField.F_STATUS, - K3ProdField.F_WORK_SHOP_ID, - K3ProdField.F_REQ_SRC, - K3ProdField.F_BASE_UNIT_QTY, - K3ProdField.F_QTY, - K3ProdField.F_UNIT_ID, - K3ProdField.F_BASE_UNIT_ID, - K3ProdField.F_MATERIAL_ID, - K3ProdField.F_NO_STOCK_IN_QTY, - K3ProdField.F_BASE_NO_STOCK_IN_QTY - ); - int startRow = 0; - int limit = 10000; - int size = 0; - - String filterString = "FStatus in (4,5,6,7)"; - - // 一直查询,直到查到的数据量比limit小,说明查完了 - while(true) { - // 查询ERP数据 - List erpList = k3Service.selectList(K3FormIds.PROD_ORDER, fieldKeys, startRow, limit, filterString, ""); - - // 转为PO - List prodOrderList = prodOrderConverter.toPoByErpList(fieldKeys, erpList); - - // 保存 - for (ProdOrder prodOrder : prodOrderList) { - scheduledExecutorService.schedule(() -> { - this.saveByErpRowId(prodOrder); - }, 0, TimeUnit.SECONDS); - } - - size += prodOrderList.size(); - - if (prodOrderList.size() < limit) { - break; - } else { - startRow += limit; - } + public void sync(ProdOrderSyncQuery query, Long operaId) { + // 操作人 + SysUser user = null; + if (Constants.SYSTEM_USER_ID.equals(operaId)) { + user = SysUser.system(); + } else { + user = userService.selectUserById(operaId); } - return size; + // 新增一个日志 + LogImportVO importLog = logImportService.addDefaultLog(LogImportType.SYNC, LogImportBizType.PROD_ORDER, user); + ServiceUtil.assertion(importLog == null, "创建同步日志失败"); + Long logId = importLog.getLogId(); + + scheduledExecutorService.schedule(() -> { + // 查询字段 + List fieldKeys = Arrays.asList( + K3ProdField.FID, + K3ProdField.F_BILL_NO, + K3ProdField.F_DOCUMENT_STATUS, + K3ProdField.F_CREATE_DATE, + K3ProdField.F_MODIFY_DATE, + K3ProdField.F_DESCRIPTION, + K3ProdField.F_DATE, + K3ProdField.F_IS_REWORK, + K3ProdField.F_ROW_ID, + K3ProdField.F_MEMO_ITEM, + K3ProdField.F_CONVEY_DATE, + K3ProdField.F_STATUS, + K3ProdField.F_WORK_SHOP_ID, + K3ProdField.F_REQ_SRC, + K3ProdField.F_BASE_UNIT_QTY, + K3ProdField.F_QTY, + K3ProdField.F_UNIT_ID, + K3ProdField.F_BASE_UNIT_ID, + K3ProdField.F_MATERIAL_ID, + K3ProdField.F_NO_STOCK_IN_QTY, + K3ProdField.F_BASE_NO_STOCK_IN_QTY + ); + int startRow = 0; + int limit = 10000; + int size = 0; + + // 构建过滤条件 + StringBuilder fb = new StringBuilder(); + if (CollectionUtils.isNotEmptyElement(query.getStatusList())) { + fb.append(" and FStatus in (").append(query.getStatusList().stream().map(Object::toString).collect(Collectors.joining(","))).append(")"); + } + if (query.getId() != null) { + fb.append(" and FID = ").append(query.getId()); + } + String filterString = fb.substring(4); + + // 一直查询,直到查到的数据量比limit小,说明查完了 + while(true) { + // 查询ERP数据 + List erpList = k3Service.selectList(K3FormIds.PROD_ORDER, fieldKeys, startRow, limit, filterString, ""); + + // 转为PO + List prodOrderList = prodOrderConverter.toPoByErpList(fieldKeys, erpList); + + // 保存 + for (ProdOrder prodOrder : prodOrderList) { + scheduledExecutorService.schedule(() -> { + this.saveByErpRowId(prodOrder, logId); + }, 0, TimeUnit.SECONDS); + } + + size += prodOrderList.size(); + + if (prodOrderList.size() < limit) { + logImportService.updateLogToFinished(logId); + break; + } else { + startRow += limit; + } + } + + return size; + }, 0, TimeUnit.SECONDS); } /** @@ -217,37 +262,50 @@ public class ProdOrderServiceImpl implements ProdOrderService return list.get(0); } + /** + * 增加已审核的基本单位数量 + * + * @param orderId 订单ID + * @param num 增加数量 + */ + @Override + public int addVerifiedBaseNum(Long orderId, BigDecimal num) { + if (orderId == null || num == null) { + return 0; + } + return prodOrderMapper.addVerifiedBaseNum(orderId, num); + } + /** * 新增或修改 */ - private int saveByErpRowId(ProdOrder prodOrder) { - String errorMsg = "成功"; + private int saveByErpRowId(ProdOrder prodOrder, Long logId) { + if (prodOrder == null || StringUtils.isBlank(prodOrder.getErpRowId())) { + throw new ServiceException("参数错误"); + } + String lockKey = prodOrder.getErpRowId(); + ServiceUtil.assertion(!redisLock.lock(RedisLockKey.SYNC_PROD_BILL, lockKey), "当前生产订单正在处理中,请稍后重试"); + try { - if (prodOrder == null || StringUtils.isBlank(prodOrder.getErpRowId())) { - throw new ServiceException("参数错误"); - } - String lockKey = prodOrder.getErpRowId(); - ServiceUtil.assertion(!redisLock.lock(RedisLockKey.SYNC_PROD_BILL, lockKey), "当前生产订单正在处理中,请稍后重试"); - - try { - // 若数据库中没有,则新增,否则修改 - ProdOrderVO old = this.selectByErpRowId(prodOrder.getErpRowId()); - if (old == null) { - - return this.insertProdOrder(prodOrder); - } else { - prodOrder.setId(old.getId()); - return this.updateProdOrder(prodOrder); - } - } finally { - redisLock.unlock(RedisLockKey.SYNC_PROD_BILL, lockKey); + // 若数据库中没有,则新增,否则修改 + ProdOrderVO old = this.selectByErpRowId(prodOrder.getErpRowId()); + if (old == null) { + int insert = this.insertProdOrder(prodOrder); + ServiceUtil.assertion(insert != 1, "新增失败"); + logImportDetailService.addResult(logId, LogImportDetailType.ADD, prodOrder, null); + return insert; + } else { + prodOrder.setId(old.getId()); + int update = this.updateProdOrder(prodOrder); + ServiceUtil.assertion(update != 1, "修改失败"); + logImportDetailService.addResult(logId, LogImportDetailType.UPDATE, prodOrder, null); + return update; } } catch (Exception e) { - errorMsg = e.getMessage(); + logImportDetailService.addResult(logId, LogImportDetailType.FAIL, prodOrder, e.getMessage()); return 0; } finally { - // TODO 记录日志 - log.info("同步生产订单:{}", errorMsg); + redisLock.unlock(RedisLockKey.SYNC_PROD_BILL, lockKey); } } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/domain/dto/ReportVerifyDTO.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/domain/dto/ReportVerifyDTO.java index 8c2abc3..1bb93e5 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/domain/dto/ReportVerifyDTO.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/domain/dto/ReportVerifyDTO.java @@ -1,5 +1,6 @@ package com.ruoyi.web.yh.report.domain.dto; +import com.ruoyi.framework.web.domain.log.LogBizParam; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -12,7 +13,7 @@ import javax.validation.constraints.Size; * 2024/11/8 */ @Data -public class ReportVerifyDTO { +public class ReportVerifyDTO implements LogBizParam { @ApiModelProperty("报表ID") @NotNull(message = "报表ID不允许为空") @@ -26,4 +27,11 @@ public class ReportVerifyDTO { @Size(max = 1000, message = "审核意见不允许超过1000个字符") private String verifyRemark; + /** + * 获取日志业务ID + */ + @Override + public Object logBizId() { + return reportId; + } } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/service/impl/ReportServiceImpl.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/service/impl/ReportServiceImpl.java index 558d324..5c413d6 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/service/impl/ReportServiceImpl.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/service/impl/ReportServiceImpl.java @@ -1,6 +1,8 @@ package com.ruoyi.web.yh.report.service.impl; +import java.math.BigDecimal; import java.time.LocalDateTime; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -11,10 +13,13 @@ import com.ruoyi.common.utils.ServiceUtil; import com.ruoyi.common.utils.collection.CollectionUtils; import com.ruoyi.common.utils.collection.DiffListVO; import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.web.yh.prodOrder.service.ProdOrderService; import com.ruoyi.web.yh.report.domain.bo.ReportBO; import com.ruoyi.web.yh.report.domain.dto.ReportVerifyDTO; import com.ruoyi.web.yh.report.domain.enums.ReportStatus; +import com.ruoyi.web.yh.report.service.ReportAssembler; import com.ruoyi.web.yh.report.service.ReportValidator; +import com.ruoyi.web.yh.report.utils.ReportUtils; import com.ruoyi.web.yh.reportOrderProd.domain.ReportOrderProd; import com.ruoyi.web.yh.reportOrderProd.domain.ReportOrderProdVO; import com.ruoyi.web.yh.reportOrderProd.domain.bo.ReportOrderProdBO; @@ -66,6 +71,12 @@ public class ReportServiceImpl implements ReportService @Autowired private ReportValidator reportValidator; + @Autowired + private ProdOrderService prodOrderService; + + @Autowired + private ReportAssembler reportAssembler; + /** * 查询报表 * @@ -306,6 +317,8 @@ public class ReportServiceImpl implements ReportService ReportVO report = selectReportByReportId(dto.getReportId()); ServiceUtil.assertion(report == null, "待审核的报表不存在"); ServiceUtil.assertion(!ReportStatus.canVerify().contains(report.getStatus()), "当前报表状态不允许审核,请刷新后重试"); + // 拼接报表订单数据 + reportAssembler.assembleProductList(Collections.singletonList(report), false, true); // 组装修改数据 Report data = new Report(); @@ -323,10 +336,30 @@ public class ReportServiceImpl implements ReportService query.setReportId(report.getReportId()); query.setStatusList(ReportStatus.canVerify()); + // 获取订单数据 + List orderProdList = report.getProductList().stream() + .map(ReportProdVO::getOrderProdList).flatMap(List::stream).collect(Collectors.toList()); + // 修改数据库 Integer result = transactionTemplate.execute(status -> { int update = this.updateByQuery(data, query); ServiceUtil.assertion(update != 1, "审核失败,当前报表状态已发生变化,请刷新后重试"); + + // 关联的订单,全部增加已审核的数量 + for (ReportOrderProdVO orderProd : orderProdList) { + if (orderProd == null) { + continue; + } + ServiceUtil.assertion(orderProd.getOrderId() == null + || orderProd.getNum() == null + || orderProd.getPriceQuantity() == null, + "修改订单审核数量出错:参数错误" + ); + BigDecimal baseNum = ReportUtils.calcOrderProdBaseNum(orderProd); + int add = prodOrderService.addVerifiedBaseNum(orderProd.getOrderId(), baseNum); + ServiceUtil.assertion(add != 1, "更新关联订单失败"); + } + return update; }); diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/utils/ReportUtils.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/utils/ReportUtils.java new file mode 100644 index 0000000..afcd252 --- /dev/null +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/report/utils/ReportUtils.java @@ -0,0 +1,24 @@ +package com.ruoyi.web.yh.report.utils; + +import com.ruoyi.web.yh.reportOrderProd.domain.ReportOrderProdVO; + +import java.math.BigDecimal; + +/** + * @author wjh + * 2024/11/20 + */ + +public class ReportUtils { + + /** + * 计算报表订单产量的基础数量 + */ + public static BigDecimal calcOrderProdBaseNum(ReportOrderProdVO vo) { + if (vo == null || vo.getPriceQuantity() == null || vo.getNum() == null) { + return BigDecimal.ZERO; + } + return vo.getPriceQuantity().multiply(vo.getNum()); + } + +} diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/reportOrderProd/domain/ReportOrderProdVO.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/reportOrderProd/domain/ReportOrderProdVO.java index 820250d..216dcbb 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/reportOrderProd/domain/ReportOrderProdVO.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/reportOrderProd/domain/ReportOrderProdVO.java @@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; +import java.time.LocalDate; /** * @author wjh @@ -15,6 +16,12 @@ public class ReportOrderProdVO extends ReportOrderProd { @ApiModelProperty("报表ID") private Long reportId; + @ApiModelProperty("报表日期") + private LocalDate reportDate; + + @ApiModelProperty("报表状态") + private String reportStatus; + @ApiModelProperty("订单编号") private String orderErpBillNo; @@ -42,4 +49,15 @@ public class ReportOrderProdVO extends ReportOrderProd { @ApiModelProperty("订单已审核通过的基础产量") private BigDecimal verifiedBaseNum; + @ApiModelProperty("工序倍数") + private BigDecimal priceQuantity; + + @ApiModelProperty("工序单位") + private String priceUnit; + + @ApiModelProperty("工序名称") + private String priceName; + + @ApiModelProperty("工序单价") + private BigDecimal pricePrice; } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/reportOrderProd/mapper/ReportOrderProdMapper.xml b/ruoyi-web/src/main/java/com/ruoyi/web/yh/reportOrderProd/mapper/ReportOrderProdMapper.xml index 6b12f88..c6dbdc2 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/reportOrderProd/mapper/ReportOrderProdMapper.xml +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/reportOrderProd/mapper/ReportOrderProdMapper.xml @@ -14,6 +14,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" brop.num, brop.deleted, brp.report_id as report_id, + brp.price_quantity as price_quantity, + brp.price_unit as price_unit, + brp.price_name as price_name, + brp.price_price as price_price, bpo.erp_bill_no as order_erp_bill_no, bpo.erp_qty as order_erp_qty, bpo.erp_no_stock_in_qty as order_erp_no_stock_in_qty, @@ -21,7 +25,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" bpo.erp_base_no_stock_in_qty as order_erp_base_no_stock_in_qty, bpo.verified_base_num as verified_base_num, bu.erp_name as unit_name, - bu_b.erp_name as base_unit_name + bu_b.erp_name as base_unit_name, + br.report_date as report_date, + br.status as report_status from bst_report_order_prod brop left join bst_report_prod brp on brp.id = brop.report_prod_id left join bst_report br on br.report_id = brp.report_id diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/controller/UnitController.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/controller/UnitController.java index 592be9d..e2138f8 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/controller/UnitController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/controller/UnitController.java @@ -118,6 +118,7 @@ public class UnitController extends BaseController @PutMapping("/sync") public AjaxResult sync() { - return toAjax(unitService.sync()); + unitService.sync(); + return success(); } } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/service/UnitService.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/service/UnitService.java index f349fda..aa03e49 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/service/UnitService.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/service/UnitService.java @@ -64,6 +64,6 @@ public interface UnitService /** * 同步ERP单位 */ - int sync(); + void sync(); } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/service/impl/UnitServiceImpl.java b/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/service/impl/UnitServiceImpl.java index 8ea3620..ecb89eb 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/service/impl/UnitServiceImpl.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/yh/unit/service/impl/UnitServiceImpl.java @@ -124,43 +124,43 @@ public class UnitServiceImpl implements UnitService } @Override - public int sync() { -// 查询字段 - List fieldKeys = Arrays.asList( + public void sync() { + // 查询字段 + scheduledExecutorService.schedule(() -> { + List fieldKeys = Arrays.asList( K3UnitField.F_UNIT_ID, K3UnitField.F_NUMBER, K3UnitField.F_NAME, K3UnitField.F_FORBID_STATUS - ); - int startRow = 0; - int limit = 10000; - int size = 0; + ); + int startRow = 0; + int limit = 10000; + int size = 0; - // 一直查询,直到查到的数据量比limit小,说明查完了 - while(true) { - // 查询ERP数据 - List erpList = k3Service.selectList(K3FormIds.UNIT, fieldKeys, startRow, limit); + // 一直查询,直到查到的数据量比limit小,说明查完了 + while(true) { + // 查询ERP数据 + List erpList = k3Service.selectList(K3FormIds.UNIT, fieldKeys, startRow, limit); - // 转为PO - List unitList = unitConverter.toPoByErpList(fieldKeys, erpList); + // 转为PO + List unitList = unitConverter.toPoByErpList(fieldKeys, erpList); - // 保存 - for (Unit unit : unitList) { - scheduledExecutorService.schedule(() -> { - this.saveByErpId(unit); - }, 0, TimeUnit.SECONDS); + // 保存 + for (Unit unit : unitList) { + scheduledExecutorService.schedule(() -> { + this.saveByErpId(unit); + }, 0, TimeUnit.SECONDS); + } + + size += unitList.size(); + + if (unitList.size() < limit) { + break; + } else { + startRow += limit; + } } - - size += unitList.size(); - - if (unitList.size() < limit) { - break; - } else { - startRow += limit; - } - } - - return size; + }, 0, TimeUnit.SECONDS); } private int saveByErpId(Unit unit) {