临时提交

This commit is contained in:
磷叶 2025-02-28 18:03:12 +08:00
parent 65c0d94643
commit 9e18014c22
10 changed files with 47 additions and 25 deletions

View File

@ -2,11 +2,13 @@ package com.ruoyi.bst.order.domain;
import com.ruoyi.common.annotation.Excel; import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.validate.ValidGroup;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.Min; import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
import java.math.BigDecimal; import java.math.BigDecimal;
@ -81,4 +83,9 @@ public class Order extends BaseEntity
@ApiModelProperty("名称") @ApiModelProperty("名称")
private String name; private String name;
@Excel(name = "单位")
@ApiModelProperty("单位")
@NotBlank(message = "单位不允许为空", groups = {ValidGroup.Create.class})
private String unit;
} }

View File

@ -24,7 +24,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
bo.material, bo.material,
bo.content_num, bo.content_num,
bo.package_size, bo.package_size,
bo.name bo.name,
bo.unit
from bst_order bo from bst_order bo
</sql> </sql>
@ -44,6 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="query.eqCustomOrderNo != null and query.eqCustomOrderNo != ''">and bo.custom_order_no = #{query.eqCustomOrderNo}</if> <if test="query.eqCustomOrderNo != null and query.eqCustomOrderNo != ''">and bo.custom_order_no = #{query.eqCustomOrderNo}</if>
<if test="query.packageSize != null and query.packageSize != ''"> and bo.package_size like concat('%', #{query.packageSize}, '%')</if> <if test="query.packageSize != null and query.packageSize != ''"> and bo.package_size like concat('%', #{query.packageSize}, '%')</if>
<if test="query.name != null and query.name != ''"> and bo.name like concat('%', #{query.name}, '%')</if> <if test="query.name != null and query.name != ''"> and bo.name like concat('%', #{query.name}, '%')</if>
<if test="query.unit != null and query.unit != ''"> and bo.unit like concat('%', #{query.unit}, '%')</if>
<if test="query.statusList != null and query.statusList.size() > 0"> <if test="query.statusList != null and query.statusList.size() > 0">
and bo.status in and bo.status in
<foreach item="item" collection="query.statusList" open="(" separator="," close=")"> <foreach item="item" collection="query.statusList" open="(" separator="," close=")">
@ -98,6 +100,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="contentNum != null">content_num,</if> <if test="contentNum != null">content_num,</if>
<if test="packageSize != null">package_size,</if> <if test="packageSize != null">package_size,</if>
<if test="name != null">`name`,</if> <if test="name != null">`name`,</if>
<if test="unit != null">unit,</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="orderNo != null and orderNo != ''">#{orderNo},</if> <if test="orderNo != null and orderNo != ''">#{orderNo},</if>
@ -116,6 +119,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="contentNum != null">#{contentNum},</if> <if test="contentNum != null">#{contentNum},</if>
<if test="packageSize != null">#{packageSize},</if> <if test="packageSize != null">#{packageSize},</if>
<if test="name != null">#{name},</if> <if test="name != null">#{name},</if>
<if test="unit != null">#{unit},</if>
</trim> </trim>
</insert> </insert>
@ -154,6 +158,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="data.contentNum != null">content_num = #{data.contentNum},</if> <if test="data.contentNum != null">content_num = #{data.contentNum},</if>
<if test="data.packageSize != null">package_size = #{data.packageSize},</if> <if test="data.packageSize != null">package_size = #{data.packageSize},</if>
<if test="data.name != null">`name` = #{data.name},</if> <if test="data.name != null">`name` = #{data.name},</if>
<if test="data.unit != null">unit = #{data.unit},</if>
</sql> </sql>
<delete id="deleteOrderById" parameterType="Long"> <delete id="deleteOrderById" parameterType="Long">

View File

@ -14,13 +14,17 @@ public interface OrderAssembler {
* 拼接产品列表 * 拼接产品列表
* *
* @param list 订单列表 * @param list 订单列表
* @param assembleProcess 是否拼接工序
* @param assembleProgress
*/ */
void assembleProdList(List<OrderVO> list, boolean assembleProcess, boolean assembleProgress); void assembleProdList(List<OrderVO> list);
/** /**
* 拼接进度 * 拼接进度
*/ */
void assembleProgress(List<OrderVO> list); void assembleProgress(List<OrderVO> list);
/**
* 拼接工序列表
*/
void assembleProdProcessList(List<OrderVO> list);
} }

View File

@ -29,7 +29,7 @@ public class OrderAssemblerImpl implements OrderAssembler {
private OrderProdAssembler orderProdAssembler; private OrderProdAssembler orderProdAssembler;
@Override @Override
public void assembleProdList(List<OrderVO> list, boolean assembleProcess, boolean assembleProgress) { public void assembleProdList(List<OrderVO> list) {
if (CollectionUtils.isEmptyElement(list)) { if (CollectionUtils.isEmptyElement(list)) {
return; return;
} }
@ -46,7 +46,6 @@ public class OrderAssemblerImpl implements OrderAssembler {
// 拼接明细 // 拼接明细
if (assembleProcess) { if (assembleProcess) {
orderProdAssembler.assembleProcessList(prodList, true);
} }
// 分组 // 分组
@ -70,10 +69,21 @@ public class OrderAssemblerImpl implements OrderAssembler {
return; return;
} }
this.assembleProdList(list);
for (OrderVO order : list) { for (OrderVO order : list) {
order.setTotalNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getNum)); order.setTotalNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getNum));
order.setReportNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getReportNum)); order.setReportNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getReportNum));
order.setStoreNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getStoreNum)); order.setStoreNum(CollectionUtils.sumDecimal(order.getProdList(), OrderProdVO::getStoreNum));
} }
} }
@Override
public void assembleProdProcessList(List<OrderVO> list) {
if (CollectionUtils.isEmptyElement(list)) {
return;
}
List<OrderProdVO> prodList = list.stream().map(OrderVO::getProdList).flatMap(List::stream).collect(Collectors.toList());
orderProdAssembler.assembleProcessList(prodList);
}
} }

View File

@ -51,6 +51,7 @@ public class OrderConverterImpl implements OrderConverter {
bo.setContentNum(data.getContentNum()); bo.setContentNum(data.getContentNum());
bo.setPackageSize(data.getPackageSize()); bo.setPackageSize(data.getPackageSize());
bo.setName(data.getName()); bo.setName(data.getName());
bo.setUnit(data.getUnit());
if (submit) { if (submit) {
bo.setStatus(OrderStatus.RELEASED.getStatus()); bo.setStatus(OrderStatus.RELEASED.getStatus());
} else { } else {
@ -81,6 +82,7 @@ public class OrderConverterImpl implements OrderConverter {
bo.setContentNum(data.getContentNum()); bo.setContentNum(data.getContentNum());
bo.setPackageSize(data.getPackageSize()); bo.setPackageSize(data.getPackageSize());
bo.setName(data.getName()); bo.setName(data.getName());
bo.setUnit(data.getUnit());
if (submit) { if (submit) {
bo.setStatus(OrderStatus.RELEASED.getStatus()); bo.setStatus(OrderStatus.RELEASED.getStatus());
} }

View File

@ -238,7 +238,6 @@ public class OrderServiceImpl implements OrderService
ServiceUtil.assertion(!OrderStatus.canFinished().contains(old.getStatus()), "当前订单状态不允许完工"); ServiceUtil.assertion(!OrderStatus.canFinished().contains(old.getStatus()), "当前订单状态不允许完工");
List<OrderVO> list = Collections.singletonList(old); List<OrderVO> list = Collections.singletonList(old);
orderAssembler.assembleProdList(list, false, true);
orderAssembler.assembleProgress(list); orderAssembler.assembleProgress(list);
ServiceUtil.assertion(old.getProgress().compareTo(new BigDecimal("100")) < 0, "当前订单进度:%s%%暂不满足完工条件100%%", old.getProgress()); ServiceUtil.assertion(old.getProgress().compareTo(new BigDecimal("100")) < 0, "当前订单进度:%s%%暂不满足完工条件100%%", old.getProgress());
@ -261,26 +260,27 @@ public class OrderServiceImpl implements OrderService
ServiceUtil.assertion(file == null, "请选择需要解析的数据"); ServiceUtil.assertion(file == null, "请选择需要解析的数据");
ExcelUtil<OrderProdVO> util = new ExcelUtil<>(OrderProdVO.class); ExcelUtil<OrderProdVO> util = new ExcelUtil<>(OrderProdVO.class);
try { try {
Map<String, Object> data = util.importMixedExcel(file.getInputStream(), 7, 8); Map<String, Object> data = util.importMixedExcel(file.getInputStream(), 8, 9);
List<OrderProdVO> body = (List<OrderProdVO>) data.get("body"); List<OrderProdVO> body = (List<OrderProdVO>) data.get("body");
// 查询全部部门 // 查询全部部门
List<SysDeptVO> depts = deptService.selectDeptList(new SysDeptQuery()); List<SysDeptVO> depts = deptService.selectDeptList(new SysDeptQuery());
// 将处理方式转为部门数据 for (int i = 0; i < body.size(); i++) {
for (OrderProdVO item : body) { OrderProdVO item = body.get(i);
String handleWay = item.getHandleWay(); String handleWay = item.getHandleWay();
if (StringUtils.isBlank(handleWay)) { if (StringUtils.isBlank(handleWay)) {
continue; continue;
} }
// 将处理方式转为部门数据
// 通过部门名称或者工序简称来匹配部门 // 通过部门名称或者工序简称来匹配部门
List<String> handleWayList = Arrays.asList(handleWay.split("\\+")); List<String> handleWayList = Arrays.asList(handleWay.split("\\+"));
List<ProdProcessVO> processList = new ArrayList<>(); List<ProdProcessVO> processList = new ArrayList<>();
for (int i = 0; i < handleWayList.size(); i++) { for (int j = 0; j < handleWayList.size(); j++) {
String way = handleWayList.get(i).trim(); String way = handleWayList.get(j).trim();
SysDeptVO dept = depts.stream() SysDeptVO dept = depts.stream()
.filter(deptItem -> { .filter(deptItem -> {
List<String> deptProcess = new ArrayList<>(); List<String> deptProcess = new ArrayList<>();
@ -295,7 +295,7 @@ public class OrderServiceImpl implements OrderService
process.setDeptId(dept.getDeptId()); process.setDeptId(dept.getDeptId());
process.setDeptName(dept.getDeptName()); process.setDeptName(dept.getDeptName());
process.setNum(item.getNum()); process.setNum(item.getNum());
if (i == handleWayList.size() - 1) { if (j == handleWayList.size() - 1) {
process.setIsEnd(true); process.setIsEnd(true);
} else { } else {
process.setIsEnd(false); process.setIsEnd(false);

View File

@ -39,6 +39,7 @@ public class OrderProd extends BaseEntity
@Excel(name = "是否成品") @Excel(name = "是否成品")
@ApiModelProperty("是否成品") @ApiModelProperty("是否成品")
@NotNull(message = "是否成品不能为空", groups = {ValidGroup.Create.class})
private Boolean isEnd; private Boolean isEnd;
@Excel(name = "物料编号") @Excel(name = "物料编号")

View File

@ -13,7 +13,7 @@ public interface OrderProdAssembler {
/** /**
* 拼接工序列表 * 拼接工序列表
*/ */
void assembleProcessList(List<OrderProdVO> list, boolean progress); void assembleProcessList(List<OrderProdVO> list);
/** /**
* 拼接进度 * 拼接进度

View File

@ -8,7 +8,6 @@ import com.ruoyi.bst.prodProcess.domain.ProdProcessQuery;
import com.ruoyi.bst.prodProcess.domain.ProdProcessVO; import com.ruoyi.bst.prodProcess.domain.ProdProcessVO;
import com.ruoyi.bst.prodProcess.service.IProdProcessService; import com.ruoyi.bst.prodProcess.service.IProdProcessService;
import com.ruoyi.bst.prodProcess.service.ProdProcessAssembler; import com.ruoyi.bst.prodProcess.service.ProdProcessAssembler;
import com.ruoyi.bst.store.service.IStoreService;
import com.ruoyi.common.utils.collection.CollectionUtils; import com.ruoyi.common.utils.collection.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -33,11 +32,8 @@ public class OrderProdAssemblerImpl implements OrderProdAssembler {
@Autowired @Autowired
private ProdProcessAssembler prodProcessAssembler; private ProdProcessAssembler prodProcessAssembler;
@Autowired
private IStoreService storeService;
@Override @Override
public void assembleProcessList(List<OrderProdVO> list, boolean progress) { public void assembleProcessList(List<OrderProdVO> list) {
if (CollectionUtils.isEmptyElement(list)) { if (CollectionUtils.isEmptyElement(list)) {
return; return;
} }
@ -45,9 +41,6 @@ public class OrderProdAssemblerImpl implements OrderProdAssembler {
ProdProcessQuery query = new ProdProcessQuery(); ProdProcessQuery query = new ProdProcessQuery();
query.setOrderProdIds(CollectionUtils.map(list, OrderProdVO::getId)); query.setOrderProdIds(CollectionUtils.map(list, OrderProdVO::getId));
List<ProdProcessVO> processList = prodProcessService.selectProdProcessList(query); List<ProdProcessVO> processList = prodProcessService.selectProdProcessList(query);
if (progress) {
prodProcessAssembler.assembleProgress(processList);
}
Map<Long, List<ProdProcessVO>> group = processList.stream().collect(Collectors.groupingBy(ProdProcess::getOrderProdId)); Map<Long, List<ProdProcessVO>> group = processList.stream().collect(Collectors.groupingBy(ProdProcess::getOrderProdId));
for (OrderProdVO prod : list) { for (OrderProdVO prod : list) {

View File

@ -52,8 +52,8 @@ public class OrderController extends BaseController
startPage(); startPage();
startOrderBy(); startOrderBy();
List<OrderVO> list = orderService.selectOrderList(query); List<OrderVO> list = orderService.selectOrderList(query);
orderAssembler.assembleProdList(list);
orderAssembler.assembleProdList(list, true, true); orderAssembler.assembleProdProcessList(list);
orderAssembler.assembleProgress(list); orderAssembler.assembleProgress(list);
return getDataTable(list); return getDataTable(list);
} }