From eb1edbfee9cb19cd5efbbf4c10e62156cbac112c 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, 5 Mar 2025 18:03:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/bst/order/domain/OrderVO.java | 13 +++-- .../prodProcess/domain/ProdProcessQuery.java | 3 ++ .../domain/vo/ProdProcessNameVO.java | 27 ++++++++++ .../prodProcess/mapper/ProdProcessMapper.java | 6 +++ .../prodProcess/mapper/ProdProcessMapper.xml | 14 ++++++ .../service/IProdProcessService.java | 6 +++ .../service/ProdProcessAssembler.java | 12 +++++ .../impl/ProdProcessAssemblerImpl.java | 50 +++++++++++++++++++ .../service/impl/ProdProcessServiceImpl.java | 6 +++ .../ruoyi/web/bst/ProdProcessController.java | 19 +++++++ .../src/main/resources/application-druid.yml | 4 +- 11 files changed, 155 insertions(+), 5 deletions(-) create mode 100644 common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/vo/ProdProcessNameVO.java diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java index 8980774..bb9fcde 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/order/domain/OrderVO.java @@ -41,13 +41,20 @@ public class OrderVO extends Order{ if (this.storeNum == null || this.getTotalNum() == null) { return BigDecimal.ZERO; } + BigDecimal total = this.getTotalNum(); + if (this.getNum() != null) { + total = total.subtract(this.getNum()); + } + if (total.compareTo(BigDecimal.ZERO) <= 0) { + return BigDecimal.ZERO; + } + return this.storeNum - .subtract(this.getNum()) .multiply(new BigDecimal(100)) - .divide(this.getTotalNum(), 2, RoundingMode.HALF_UP); + .divide(total, 2, RoundingMode.HALF_UP); } - @ApiModelProperty("产品进度") + @ApiModelProperty("成品进度") public BigDecimal getEndProgress() { if (this.endStoreNum == null || this.getNum() == null) { return BigDecimal.ZERO; diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java index 2c7c502..cc300b5 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/ProdProcessQuery.java @@ -23,4 +23,7 @@ public class ProdProcessQuery extends ProdProcessVO{ @ApiModelProperty("订单状态列表") private List<String> orderStatusList; + + @ApiModelProperty("精准产品名称列表") + private List<String> eqNames; } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/vo/ProdProcessNameVO.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/vo/ProdProcessNameVO.java new file mode 100644 index 0000000..bb6d958 --- /dev/null +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/domain/vo/ProdProcessNameVO.java @@ -0,0 +1,27 @@ +package com.ruoyi.bst.prodProcess.domain.vo; + +import com.ruoyi.bst.prodProcess.domain.ProdProcessVO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class ProdProcessNameVO { + + @ApiModelProperty("产品名称") + private String name; + + @ApiModelProperty("总数量") + private BigDecimal totalNum; + + @ApiModelProperty("上报数量") + private BigDecimal reportNum; + + @ApiModelProperty("入库数量") + private BigDecimal storeNum; + + @ApiModelProperty("工序列表") + private List<ProdProcessVO> processList; +} diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.java index 183ffe9..641ae8d 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.java @@ -3,6 +3,7 @@ package com.ruoyi.bst.prodProcess.mapper; import com.ruoyi.bst.prodProcess.domain.ProdProcess; import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery; import com.ruoyi.bst.prodProcess.domain.ProdProcessVO; +import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -82,4 +83,9 @@ public interface ProdProcessMapper * 查询汇总 */ public List<Map<String, Object>> selectSum(@Param("query")ProdProcessQuery query, @Param("groupBy")List<String> groupBy); + + /** + * 查询名称列表 + */ + public List<ProdProcessNameVO> selectProdProcessNames(@Param("query") ProdProcessQuery query); } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml index f1e8307..ca0b692 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/mapper/ProdProcessMapper.xml @@ -69,6 +69,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" <if test="query.deptName != null and query.deptName != ''"> and sd.dept_name like concat('%', #{query.deptName}, '%')</if> <if test="query.orderId != null">and bop.order_id = #{query.orderId}</if> <if test="query.orderStatus != null">and bo.status = #{query.orderStatus}</if> + <if test="query.eqNames != null and query.eqNames.size() > 0"> + and bop.name in + <foreach collection="query.eqNames" item="item" open="(" close=")" separator=","> + #{item} + </foreach> + </if> <if test="query.orderProdIds != null and query.orderProdIds.size() > 0"> and bpp.order_prod_id in <foreach collection="query.orderProdIds" item="item" open="(" close=")" separator=","> @@ -343,4 +349,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" </if> </select> + <!-- selectProdProcessNames --> + <select id="selectProdProcessNames" resultType="ProdProcessNameVO"> + select distinct bop.name + from <include refid="searchTables"/> + <where> + <include refid="searchCondition"/> + </where> + </select> </mapper> diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/IProdProcessService.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/IProdProcessService.java index 5188cfe..382ab43 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/IProdProcessService.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/IProdProcessService.java @@ -3,6 +3,7 @@ package com.ruoyi.bst.prodProcess.service; import com.ruoyi.bst.prodProcess.domain.ProdProcess; import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery; import com.ruoyi.bst.prodProcess.domain.ProdProcessVO; +import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO; import java.util.List; @@ -85,4 +86,9 @@ public interface IProdProcessService int logicDelByOrderId(Long orderId); List<ProdProcessVO> selectByIds(List<Long> ids); + + /** + * 查询名称列表 + */ + List<ProdProcessNameVO> selectProdProcessNames(ProdProcessQuery query); } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/ProdProcessAssembler.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/ProdProcessAssembler.java index ce06ccd..a8afc31 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/ProdProcessAssembler.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/ProdProcessAssembler.java @@ -1,7 +1,9 @@ package com.ruoyi.bst.prodProcess.service; import com.ruoyi.bst.prodProcess.domain.ProdProcessBO; +import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery; import com.ruoyi.bst.prodProcess.domain.ProdProcessVO; +import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO; import java.util.List; @@ -31,4 +33,14 @@ public interface ProdProcessAssembler { * 拼接进度 */ void assembleProgress(List<ProdProcessVO> list); + + /** + * 拼接明细 + */ + void assembleProdList(List<ProdProcessNameVO> list, ProdProcessQuery query); + + /** + * 拼接总数量 + */ + void assembleTotalNum(List<ProdProcessNameVO> list); } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessAssemblerImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessAssemblerImpl.java index 4f7026d..9020555 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessAssemblerImpl.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessAssemblerImpl.java @@ -2,7 +2,10 @@ package com.ruoyi.bst.prodProcess.service.impl; import com.ruoyi.bst.prodProcess.domain.ProdProcess; import com.ruoyi.bst.prodProcess.domain.ProdProcessBO; +import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery; import com.ruoyi.bst.prodProcess.domain.ProdProcessVO; +import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO; +import com.ruoyi.bst.prodProcess.service.IProdProcessService; import com.ruoyi.bst.prodProcess.service.ProdProcessAssembler; import com.ruoyi.bst.store.domain.StoreQuery; import com.ruoyi.bst.store.domain.enums.StoreGroupBy; @@ -17,8 +20,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Objects; +import java.util.stream.Collectors; /** * @author wjh @@ -32,6 +38,9 @@ public class ProdProcessAssemblerImpl implements ProdProcessAssembler { @Autowired private IStoreService storeService; + @Autowired + private IProdProcessService prodProcessService; + @Override public void assembleDept(List<ProdProcessBO> list) { if (CollectionUtils.isEmptyElement(list)) { @@ -100,4 +109,45 @@ public class ProdProcessAssemblerImpl implements ProdProcessAssembler { this.assembleReportNum(list); this.assembleStoreNum(list); } + + @Override + public void assembleProdList(List<ProdProcessNameVO> list, ProdProcessQuery query) { + if (CollectionUtils.isEmptyElement(list)) { + return; + } + + // 查询列表 + query.setEqNames(CollectionUtils.map(list, ProdProcessNameVO::getName)); + List<ProdProcessVO> prodList = prodProcessService.selectProdProcessList(query); + // 拼接进度 + this.assembleProgress(prodList); + // 分组 + Map<String, List<ProdProcessVO>> group = prodList.stream().collect(Collectors.groupingBy(ProdProcessVO::getOrderProdName)); + + // 组装数据 + for (ProdProcessNameVO vo : list) { + List<ProdProcessVO> groupList = group.get(vo.getName()); + if (groupList == null) { + groupList = new ArrayList<>(); + } + vo.setProcessList(groupList); + } + + } + + @Override + public void assembleTotalNum(List<ProdProcessNameVO> list) { + if (CollectionUtils.isEmptyElement(list)) { + return; + } + for (ProdProcessNameVO vo : list) { + List<ProdProcessVO> processList = vo.getProcessList(); + if (CollectionUtils.isEmptyElement(processList)) { + continue; + } + vo.setTotalNum(CollectionUtils.sumDecimal(processList, ProdProcessVO::getNum)); + vo.setReportNum(CollectionUtils.sumDecimal(processList, ProdProcessVO::getReportNum)); + vo.setStoreNum(CollectionUtils.sumDecimal(processList, ProdProcessVO::getStoreNum)); + } + } } diff --git a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessServiceImpl.java b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessServiceImpl.java index c1d29bf..a814265 100644 --- a/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessServiceImpl.java +++ b/common-ruoyi/ruoyi-system/src/main/java/com/ruoyi/bst/prodProcess/service/impl/ProdProcessServiceImpl.java @@ -3,6 +3,7 @@ package com.ruoyi.bst.prodProcess.service.impl; import com.ruoyi.bst.prodProcess.domain.ProdProcess; import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery; import com.ruoyi.bst.prodProcess.domain.ProdProcessVO; +import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO; import com.ruoyi.bst.prodProcess.mapper.ProdProcessMapper; import com.ruoyi.bst.prodProcess.service.IProdProcessService; import com.ruoyi.common.utils.DateUtils; @@ -155,4 +156,9 @@ public class ProdProcessServiceImpl implements IProdProcessService } return prodProcessMapper.batchInsert(list); } + + @Override + public List<ProdProcessNameVO> selectProdProcessNames(ProdProcessQuery query) { + return prodProcessMapper.selectProdProcessNames(query); + } } diff --git a/ruoyi-web/src/main/java/com/ruoyi/web/bst/ProdProcessController.java b/ruoyi-web/src/main/java/com/ruoyi/web/bst/ProdProcessController.java index 7854d90..22539c8 100644 --- a/ruoyi-web/src/main/java/com/ruoyi/web/bst/ProdProcessController.java +++ b/ruoyi-web/src/main/java/com/ruoyi/web/bst/ProdProcessController.java @@ -3,6 +3,7 @@ package com.ruoyi.web.bst; import com.ruoyi.bst.prodProcess.domain.ProdProcess; import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery; import com.ruoyi.bst.prodProcess.domain.ProdProcessVO; +import com.ruoyi.bst.prodProcess.domain.vo.ProdProcessNameVO; import com.ruoyi.bst.prodProcess.service.IProdProcessService; import com.ruoyi.bst.prodProcess.service.ProdProcessAssembler; import com.ruoyi.common.annotation.DataScope; @@ -120,4 +121,22 @@ public class ProdProcessController extends BaseController { return toAjax(prodProcessService.deleteProdProcessByIds(ids)); } + + /** + * 按名称分组查询 + */ + @PreAuthorize("@ss.hasPermi('bst:prodProcess:list')") + @GetMapping("/groupByName") + @DataScope(deptAlias = "sd") + public TableDataInfo groupByName(ProdProcessQuery query){ + startPage(); + // 查询名称列表 + List<ProdProcessNameVO> list = prodProcessService.selectProdProcessNames(query); + + // 拼接明细 + prodProcessAssembler.assembleProdList(list, query); + // 汇总数量 + prodProcessAssembler.assembleTotalNum(list); + return getDataTable(list); + } } diff --git a/ruoyi-web/src/main/resources/application-druid.yml b/ruoyi-web/src/main/resources/application-druid.yml index 303cada..57ccb31 100644 --- a/ruoyi-web/src/main/resources/application-druid.yml +++ b/ruoyi-web/src/main/resources/application-druid.yml @@ -6,9 +6,9 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://localhost:3306/factory?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://61.174.243.28:15864/factory?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root - password: 123456 + password: a22dae15cab2bde7 # 从库数据源 slave: # 从数据源开关/默认关闭