打包状态,生产单状态,工序加逻辑修改

This commit is contained in:
liuzhaotian
2024-07-12 18:44:39 +08:00
parent 7b1c85a06d
commit e6cd2b9540
9 changed files with 228 additions and 8 deletions
@@ -71,4 +71,13 @@ public interface ProcessStepMapper extends BaseMapperX<ProcessStepDO> {
void updateStatus(@Param("processStepSalaryIds") List<ProcessStepSalaryIds> processStepSalaryIds,@Param("nickname") String nickname);
default List<ProcessStepDO> selectOrderStatus(Long orderId, Long organId) {
return selectList(new LambdaQueryWrapperX<ProcessStepDO>()
.eqIfPresent(ProcessStepDO::getOrganId, organId)
.eqIfPresent(ProcessStepDO::getOrderId, orderId)
.eqIfPresent(ProcessStepDO::getStatus,false));
}
}
@@ -0,0 +1,23 @@
package com.cf.imes.module.manage.controller.admin.pack.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;
@Schema(description = "板材和配件ID")
@Data
@ToString(callSuper = true)
public class PlateAndPartIdList {
@Schema(description = "板材ID")
private Long plateId;
@Schema(description = "配件ID")
private Long partsId;
}
@@ -8,6 +8,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import lombok.*;
import java.time.LocalDateTime;
@TableName(value = "`orders`") // 由于 SQL Server 的 system_user 是关键字,所以使用 system_users
@Data
@EqualsAndHashCode(callSuper = true)
@@ -55,6 +57,9 @@ public class OrderDO extends BaseDO {
// 备注
private String remark;
// 生产单的完成时间
private LocalDateTime finishTime;
@@ -2,10 +2,12 @@ package com.cf.imes.module.manage.dal.mysql.pack;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.cf.imes.framework.common.enums.OrderPackageStatusEnum;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.module.manage.controller.admin.pack.vo.PackRespVO;
import com.cf.imes.module.manage.controller.admin.pack.vo.PackageDetailsReqVO;
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateAndPartIdList;
import com.cf.imes.module.manage.controller.admin.pack.vo.PlateDetailsRespVO;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO;
import com.cf.imes.module.manage.dal.dataobject.query.OrderPackageDO;
@@ -64,12 +66,15 @@ public interface OrderPackageMapper extends BaseMapperX<OrderPackageDO> {
}
default List<OrderPackageDO> selectPackList(Long packageId,Long organId) {
default List<OrderPackageDO> selectPackList(Long orderId,Long organId) {
return selectList(new LambdaQueryWrapperX<OrderPackageDO>()
.eq(OrderPackageDO::getOrganId,organId)
.eqIfPresent(OrderPackageDO::getId, packageId));
.eqIfPresent(OrderPackageDO::getOrderId, orderId)
.eqIfPresent(OrderPackageDO::getStatus, OrderPackageStatusEnum.UNPACKED.getStatus()));
}
List<PackRespVO> selectPackPieceCount(@Param("orderIds") List<Long> orderIds, @Param("organId") Long organId);
List<PlateAndPartIdList> selectOrderPack(@Param("orderId") Long orderId,@Param("organId") Long organId);
}
@@ -32,12 +32,6 @@ public interface ProcessStepMapper extends BaseMapperX<OrderProcessStepNDO> {
void updateStatusById(@Param("id") Long id, @Param("salary")BigDecimal salary);
// default List<OrderProcessStepNDO> selectProducitonList(Long orderNo) {
// return selectList(new LambdaQueryWrapperX<OrderProcessStepNDO>()
// .eqIfPresent(OrderProcessStepNDO::getOrderId, orderNo));
//
// }
List<ProductionGroupVO> selectProducitonList(@Param("orderNo") Long orderNo,@Param("organId") Long organId);
@@ -54,4 +48,21 @@ public interface ProcessStepMapper extends BaseMapperX<OrderProcessStepNDO> {
List<OrderProcessStepNDO> selectProcessList(@Param("organId") Long organId);
default List<OrderProcessStepNDO> selectOrderStatus(Long orderId, Long organId) {
return selectList(new LambdaQueryWrapperX<OrderProcessStepNDO>()
.eqIfPresent(OrderProcessStepNDO::getOrganId, organId)
.eqIfPresent(OrderProcessStepNDO::getOrderId, orderId)
.eqIfPresent(OrderProcessStepNDO::getStatus,false));
}
default OrderProcessStepNDO selectOrderProcess(Long orderId, Long organId, Integer type) {
return selectOne(new LambdaQueryWrapperX<OrderProcessStepNDO>()
.eqIfPresent(OrderProcessStepNDO::getOrganId, organId)
.eqIfPresent(OrderProcessStepNDO::getOrderId, orderId)
.eqIfPresent(OrderProcessStepNDO::getType,type));
}
}
@@ -6,24 +6,32 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.cf.imes.framework.common.enums.OrderPackageStatusEnum;
import com.cf.imes.framework.common.enums.OrderPackageTypeEnum;
import com.cf.imes.framework.common.enums.OrderStatusEnum;
import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
import com.cf.imes.framework.common.pojo.PageResult;
import com.cf.imes.framework.common.util.object.BeanUtils;
import com.cf.imes.module.manage.controller.admin.pack.vo.*;
import com.cf.imes.module.manage.controller.admin.process.vo.OrderProcessStepItemVO;
import com.cf.imes.module.manage.controller.admin.process.vo.ProcessRespVO;
import com.cf.imes.module.manage.controller.admin.process.vo.ProcessStepStatus;
import com.cf.imes.module.manage.controller.admin.query.vo.pack.OrderPackageVO;
import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.OrderModuleReqVO;
import com.cf.imes.module.manage.dal.dataobject.pack.OrderBodyDO;
import com.cf.imes.module.manage.dal.dataobject.process.OrderDO;
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepNDO;
import com.cf.imes.module.manage.dal.dataobject.query.OrderItemDO;
import com.cf.imes.module.manage.dal.dataobject.query.OrderPackageDO;
import com.cf.imes.module.manage.dal.dataobject.query.OrderPartsNDO;
import com.cf.imes.module.manage.dal.mysql.pack.OrderBodyMapper;
import com.cf.imes.module.manage.dal.mysql.pack.OrderPackageMapper;
import com.cf.imes.module.manage.dal.mysql.process.ProcessStepItemMapper;
import com.cf.imes.module.manage.dal.mysql.process.ProcessStepMapper;
import com.cf.imes.module.manage.dal.mysql.process.ProductionProcessMapper;
import com.cf.imes.module.manage.dal.mysql.query.OrderItemMapper;
import com.cf.imes.module.manage.dal.mysql.query.OrderPartsMapper;
import com.cf.imes.module.manage.dal.mysql.query.ProductionStatusMapper;
import com.cf.imes.module.manage.service.process.ProductionProcessServiceImpl;
import com.cf.imes.module.manage.util.packageNo.PackageNoUtil;
import com.cf.imes.module.manage.util.page.PageHelperUtil;
import com.cf.imes.module.system.enums.ErrorCodeConstants;
@@ -34,6 +42,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;
@@ -41,6 +50,7 @@ import java.util.stream.Collectors;
import static com.cf.imes.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.cf.imes.framework.common.util.string.SearchUtil.insertSeparator;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getLoginUser;
import static com.cf.imes.framework.security.core.util.SecurityFrameworkUtils.getUserOrganId;
import static com.cf.imes.module.system.enums.ErrorCodeConstants.*;
@@ -67,6 +77,16 @@ public class PackServiceImpl implements PackService {
@Resource
private ProcessStepMapper processStepMapper;
@Resource
private ProductionProcessServiceImpl productionProcessService;
@Resource
private ProcessStepItemMapper processStepItemMapper;
@Resource
private ProductionProcessMapper productionProcessMapper;
// 打包分页查询
@Override
@@ -234,7 +254,17 @@ public class PackServiceImpl implements PackService {
if(reqVO.getAddPartsIdList()!=null) {
orderItemMapper.insertPartsId( orderPackageDO.getId(),reqVO.getAddPartsIdList());
}
// 判断当前生产单的板材和配件是否已全部打包且当前生产单的包裹已全部封包
if(validateOrderPack(reqVO.getOrderId())){
updateOrderStatus(reqVO.getOrderId());
}
return typeConversion(orderPackageDO);
}
@@ -277,6 +307,15 @@ public class PackServiceImpl implements PackService {
orderPackageMapper.updateById(orderPackageDO);
// 判断当前生产单的板材和配件是否已全部打包且当前生产单的包裹已全部封包
if(validateOrderPack(reqVO.getOrderId())){
updateOrderStatus(reqVO.getOrderId());
}
return typeConversion(orderPackageDO);
}
@@ -317,6 +356,11 @@ public class PackServiceImpl implements PackService {
if(packageVO.getAddPlateIdList()!=null) {
orderItemMapper.insertPackId(packageVO.getAddPlateIdList(), orderPackageDO.getId());
}
if(validateOrderPack(packageVO.getOrderId())){
updateOrderStatus(packageVO.getOrderId());
}
return typeConversion(orderPackageDO);
}
@@ -361,11 +405,71 @@ public class PackServiceImpl implements PackService {
orderPackageMapper.updateById(orderPackageDO);
// 判断当前生产单的板材和配件是否已全部打包且当前生产单的包裹已全部封包
if(validateOrderPack(packageVO.getOrderId())){
updateOrderStatus(packageVO.getOrderId());
}
return typeConversion(orderPackageDO);
}
// 判断当前生产单的板材和配件是否已全部打包且当前生产单的包裹已全部封包
public Boolean validateOrderPack(Long orderId){
List<OrderPackageDO> orderPackageDOS = orderPackageMapper.selectPackList(orderId, getUserOrganId());
if(!orderPackageDOS.isEmpty()){
return false;
}
List<PlateAndPartIdList> plateAndPartIdLists = orderPackageMapper.selectOrderPack(orderId, getUserOrganId());
// List<Long> plateList = plateAndPartIdLists.stream().map(PlateAndPartIdList::getPlateId).toList();
//
// List<Long> partsList = plateAndPartIdLists.stream().map(PlateAndPartIdList::getPartsId).toList();
return plateAndPartIdLists.isEmpty() ;
}
// 修改当前生产单的工序状态和生产单的状态
@Transactional(rollbackFor = Exception.class)
public void updateOrderStatus(Long orderId) {
OrderDO orderDO = productionProcessMapper.selectById(orderId);
if(orderDO.getFinishTime() != null){
return;
}
// 判断正确,修改当前生产单对应的打包的工序状态
OrderProcessStepNDO orderProcessStepNDO = processStepMapper.selectOrderProcess(orderId, getUserOrganId(), ProcessProcessingTypeEnum.PACK.getNumber());
// 工序加工添加负责人
String nickname = getLoginUser().getNickname();
BigDecimal salary = productionProcessService.calculateSalary(orderProcessStepNDO.getId(), null);
// 修改生产明细表和步骤表的工序状态
processStepMapper.updateStatus(orderProcessStepNDO.getId(), nickname, salary);
processStepItemMapper.updateStatus(orderProcessStepNDO.getId());
// 修改生产的状态为生产完成
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
orderDO.setFinishTime(LocalDateTime.now());
productionProcessMapper.updateById(orderDO);
}
// 查询包裹
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.log.Log;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.cf.imes.framework.common.enums.OrderStatusEnum;
import com.cf.imes.framework.common.enums.ProcessProcessingTypeEnum;
import com.cf.imes.framework.common.enums.ProcessingStatusEnum;
import com.cf.imes.framework.common.exception.util.ServiceExceptionUtil;
@@ -16,7 +17,9 @@ import com.cf.imes.module.manage.controller.admin.query.vo.productionStatus.Orde
import com.cf.imes.module.manage.dal.dataobject.pack.OrderBodyDO;
import com.cf.imes.module.manage.dal.dataobject.plate.OrderPlateDO;
import com.cf.imes.module.manage.dal.dataobject.plate.PlateDO;
import com.cf.imes.module.manage.dal.dataobject.process.OrderDO;
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepItemNDO;
import com.cf.imes.module.manage.dal.dataobject.process.OrderProcessStepNDO;
import com.cf.imes.module.manage.dal.mysql.pack.OrderBodyMapper;
import com.cf.imes.module.manage.dal.mysql.plate.OrderPlateMapper;
import com.cf.imes.module.manage.dal.mysql.plate.PlateMapper;
@@ -31,6 +34,7 @@ import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -68,6 +72,9 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
@Resource
private OrderPlateMapper orderPlateMapper;
@Resource
private ProductionProcessMapper productionProcessMapper;
@Resource
private ProcessApi processApi;
@@ -152,6 +159,13 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
processStepMapper.updateStatusById(reqVo.getProcessStepId(),salary);
}
// 当前工序已全部加工,修改生产单的状态为生产完成
if(validateOrderStatus(processStepStatuses.getOrderId())){
OrderDO orderDO = productionProcessMapper.selectById(processStepStatuses.getOrderId());
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
orderDO.setFinishTime(LocalDateTime.now());
productionProcessMapper.updateById(orderDO);
}
return;
@@ -176,6 +190,13 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
processStepMapper.updateStatusById(reqVo.getProcessStepId(),salary);
}
// 当前工序已全部加工,修改生产单的状态为生产完成
if(validateOrderStatus(processStepStatuses.getOrderId())){
OrderDO orderDO = productionProcessMapper.selectById(processStepStatuses.getOrderId());
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
orderDO.setFinishTime(LocalDateTime.now());
productionProcessMapper.updateById(orderDO);
}
return;
}
@@ -188,6 +209,23 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
processStepItemMapper.updateStatus(reqVo.getProcessStepId());
// 判断当前工序的状态是否为打包类型,如果是,修改生产的状态为生产完成
if(processStepStatuses.getType().equals(ProcessProcessingTypeEnum.PACK.getNumber())){
OrderDO orderDO = productionProcessMapper.selectById(processStepStatuses.getOrderId());
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
orderDO.setFinishTime(LocalDateTime.now());
productionProcessMapper.updateById(orderDO);
return;
}
// 当前工序已全部加工,修改生产单的状态为生产完成
if(validateOrderStatus(processStepStatuses.getOrderId())){
OrderDO orderDO = productionProcessMapper.selectById(processStepStatuses.getOrderId());
orderDO.setStatus(OrderStatusEnum.FINISH_PRODUCTION.getStatus());
orderDO.setFinishTime(LocalDateTime.now());
productionProcessMapper.updateById(orderDO);
}
}catch (Exception e){
log.error(String.valueOf(e));
@@ -220,6 +258,15 @@ public class ProductionProcessServiceImpl implements ProductionProcessService {
}
public Boolean validateOrderStatus(Long orderId){
// 查询当前生产单的工序是否已全部加工
List<OrderProcessStepNDO> orderProcessStepNDOS = processStepMapper.selectOrderStatus(orderId, getUserOrganId());
return orderProcessStepNDOS.isEmpty();
}
// 查看板材信息的组合名称
@Override
@@ -182,5 +182,20 @@
</select>
<select id="selectOrderPack"
resultType="com.cf.imes.module.manage.controller.admin.pack.vo.PlateAndPartIdList">
select distinct oi.plate_id,
oi.parts_id
from order_package op
join order_item oi on op.order_id = oi.order_id and op.organ_id = oi.organ_id
where op.order_id = #{orderId} and op.organ_id = #{organId} and oi.package_id = 0
</select>
</mapper>
@@ -265,6 +265,7 @@ public interface ErrorCodeConstants {
//=========== 包裹信息 1-002-038-000 ============
ErrorCode THE_CURRENT_PACKAGE_HAS_AN_UNSEALED_PACKAGE = new ErrorCode(1_002_038_666, "当前包裹还有未封包包裹");
ErrorCode THE_CURRENT_PACKAGE_TYPE_IS_INCORRECT = new ErrorCode(1_002_038_777, "当前包裹类型错误");
ErrorCode FAILED_TO_MODIFY_THE_STATUS_OF_THE_CURRENT_PRODUCTION_ORDER = new ErrorCode(1_002_038_778, "修改当前生产单的工序状态和生产单的状态失败");
//=========== 应用信息 1-002-037-000 ============