fix item requisition

plp
chenshuichuan 2 years ago
parent e00d91e7ed
commit 904b2581e7

@ -0,0 +1,4 @@
## 待完成
1. 获取当前某工序所有工人列表
2.

@ -1,5 +1,9 @@
package cn.iocoder.yudao.module.mes.controller.admin.itemrequisition;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import cn.iocoder.yudao.module.mes.service.plan.PlanService;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
@ -24,6 +28,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDO;
@ -38,6 +43,8 @@ public class ItemRequisitionController {
@Resource
private ItemRequisitionService itemRequisitionService;
@Resource
private PlanService planService;
@PostMapping("/create")
@Operation(summary = "创建生产领料")
@ -76,10 +83,21 @@ public class ItemRequisitionController {
@Operation(summary = "获得生产领料分页")
@PreAuthorize("@ss.hasPermission('mes:item-requisition:query')")
public CommonResult<PageResult<ItemRequisitionRespVO>> getItemRequisitionPage(@Valid ItemRequisitionPageReqVO pageReqVO) {
PageResult<ItemRequisitionDO> pageResult = itemRequisitionService.getItemRequisitionPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, ItemRequisitionRespVO.class));
return success(new PageResult<>(buildVOList(pageResult.getList()), pageResult.getTotal()));
}
private List<ItemRequisitionRespVO> buildVOList(List<ItemRequisitionDO> list) {
if (CollUtil.isEmpty(list)) {
return Collections.emptyList();
}
Map<Long, PlanDO> map = planService.getPlanMap(
convertSet(list, ItemRequisitionDO::getPlanId));
return BeanUtils.toBean(list, ItemRequisitionRespVO.class, item -> {
MapUtils.findAndThen(map, item.getPlanId(),
plan -> item.setPlanCode(plan.getCode()));
});
}
@GetMapping("/export-excel")
@Operation(summary = "导出生产领料 Excel")
@PreAuthorize("@ss.hasPermission('mes:item-requisition:export')")
@ -88,9 +106,10 @@ public class ItemRequisitionController {
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<ItemRequisitionDO> list = itemRequisitionService.getItemRequisitionPage(pageReqVO).getList();
List<ItemRequisitionRespVO> list1 = buildVOList(list);
// 导出 Excel
ExcelUtils.write(response, "生产领料.xls", "数据", ItemRequisitionRespVO.class,
BeanUtils.toBean(list, ItemRequisitionRespVO.class));
list1);
}
// ==================== 子表(领料明细) ====================
@ -99,8 +118,9 @@ public class ItemRequisitionController {
@Operation(summary = "获得领料明细列表")
@Parameter(name = "itemRequisitionId", description = "领料单ID")
@PreAuthorize("@ss.hasPermission('mes:item-requisition:query')")
public CommonResult<List<ItemRequisitionDetailDO>> getItemRequisitionDetailListByItemRequisitionId(@RequestParam("itemRequisitionId") Long itemRequisitionId) {
return success(itemRequisitionService.getItemRequisitionDetailListByItemRequisitionId(itemRequisitionId));
public CommonResult<List<ItemRequisitionDetailRespVO>> getItemRequisitionDetailListByItemRequisitionId(@RequestParam("itemRequisitionId") Long itemRequisitionId) {
List<ItemRequisitionDetailDO>list = itemRequisitionService.getItemRequisitionDetailListByItemRequisitionId(itemRequisitionId);
return success(itemRequisitionService.buildDetailVOList(list));
}
}

@ -0,0 +1,39 @@
package cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.math.BigDecimal;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 领料明细 Response VO")
@Data
@ExcelIgnoreUnannotated
public class ItemRequisitionDetailRespVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28224")
@ExcelProperty("ID")
private Long id;
@Schema(description = "产品ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8370")
private Long productId;
@Schema(description = "产品", requiredMode = Schema.RequiredMode.REQUIRED, example = "8370")
@ExcelProperty("产品")
private String productName;
@Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "1117")
private String unitName;
@Schema(description = "单位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1117")
@ExcelProperty("单位ID")
private Long unitId;
@Schema(description = "领料单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "18973")
@ExcelProperty("领料单ID")
private Long itemRequisitionId;
@Schema(description = "数量")
@ExcelProperty("数量")
private BigDecimal number;
@Schema(description = "备注", example = "你说的对")
@ExcelProperty("备注")
private String remark;
}

@ -48,4 +48,6 @@ public class ItemRequisitionPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
@Schema(description = "领料人ID",example = "15546")
private Long workerId;
}

@ -23,12 +23,12 @@ public class ItemRequisitionRespVO {
@ExcelProperty("编码")
private String code;
@Schema(description = "下料时间")
@ExcelProperty("下料时间")
@Schema(description = "计划下料时间")
@ExcelProperty("计划下料时间")
private LocalDateTime requisitionDate;
@Schema(description = "料时间")
@ExcelProperty("料时间")
@Schema(description = "实际下料时间")
@ExcelProperty("实际下料时间")
private LocalDateTime deliveryDate;
@Schema(description = "状态", example = "2")
@ -40,8 +40,10 @@ public class ItemRequisitionRespVO {
private String processInstanceId;
@Schema(description = "计划ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15546")
@ExcelProperty("计划ID")
private Long planId;
@Schema(description = "计划", requiredMode = Schema.RequiredMode.REQUIRED, example = "15546")
@ExcelProperty("计划")
private String planCode;
@Schema(description = "备注", example = "随便")
@ExcelProperty("备注")
@ -55,4 +57,6 @@ public class ItemRequisitionRespVO {
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "领料人ID",example = "15546")
private Long workerId;
}

@ -15,11 +15,10 @@ import javax.validation.constraints.NotNull;
@Data
public class ItemRequisitionSaveReqVO {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5100")
@Schema(description = "ID", example = "5100")
private Long id;
@Schema(description = "编码", requiredMode = Schema.RequiredMode.REQUIRED)
@NotEmpty(message = "编码不能为空")
@Schema(description = "编码")
private String code;
@Schema(description = "下料时间")
@ -34,17 +33,18 @@ public class ItemRequisitionSaveReqVO {
@Schema(description = "流程实例的编号", example = "1634")
private String processInstanceId;
@Schema(description = "计划ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15546")
@NotNull(message = "计划ID不能为空")
@Schema(description = "计划ID",example = "15546")
private Long planId;
@Schema(description = "备注", example = "随便")
private String remark;
@Schema(description = "是否启用", requiredMode = Schema.RequiredMode.REQUIRED)
@Schema(description = "是否启用")
private Boolean isEnable;
@Schema(description = "领料明细列表")
private List<ItemRequisitionDetailDO> itemRequisitionDetails;
@Schema(description = "领料人ID",example = "15546")
private Long workerId;
}

@ -0,0 +1,26 @@
package cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum ItemRequisitionStatusEnum {
稿(1),
(2),
(3),
(4);
private final int value;
// 一个可选的方法,用于根据整数值获取对应的枚举实例
public static ItemRequisitionStatusEnum fromValue(int value) {
for (ItemRequisitionStatusEnum status : ItemRequisitionStatusEnum.values()) {
if (status.getValue() == value) {
return status;
}
}
throw new IllegalArgumentException("Unknown value: " + value);
}
}

@ -1,5 +1,10 @@
package cn.iocoder.yudao.module.mes.controller.admin.plan;
import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionSaveReqVO;
import cn.iocoder.yudao.module.mes.dal.mysql.plan.PlanMapper;
import cn.iocoder.yudao.module.mes.service.itemrequisition.ItemAnalysisService;
import cn.iocoder.yudao.module.mes.service.itemrequisition.ItemRequisitionService;
import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.security.access.prepost.PreAuthorize;
@ -38,6 +43,9 @@ public class PlanController {
@Resource
private PlanService planService;
@Resource
private PlanMapper planMapper;
@PostMapping("/create")
@Operation(summary = "创建生产计划")
@ -100,4 +108,39 @@ public class PlanController {
else
return error(500, "insert error");
}
@Resource
private ItemAnalysisService analysisService;
@PutMapping("/paigong")
@Operation(summary = "计划派工")
@PreAuthorize("@ss.hasPermission('mes:plan:update')")
public CommonResult<Boolean> updatePlan(@Valid @RequestBody ItemRequisitionSaveReqVO saveReqVO) {
System.out.println(saveReqVO);
PlanDO planDO = planMapper.selectById(saveReqVO.getPlanId());
List<ItemRequisitionAndStock> list = analysisService.getItemAnalysis(planDO);
planService.arrangePlan(saveReqVO, planDO, list);
return success(true);
}
@PutMapping("/updateStatus")
@Operation(summary = "更新生产计划状态")
@PreAuthorize("@ss.hasPermission('mes:plan:update')")
public CommonResult<Boolean> updatePlanStatus(@Valid @RequestBody PlanStatusUpdateVO statusUpdateVO) {
System.out.println(statusUpdateVO);
PlanDO planDO = planMapper.selectById(statusUpdateVO.getId());
//开工
if("start".equals(statusUpdateVO.getCode())){
planDO.setStatus(PlanStatusEnum..getValue());
}
//暂停
else if("pause".equals(statusUpdateVO.getCode())){
planDO.setStatus(PlanStatusEnum..getValue());
}
//完工
else if("end".equals(statusUpdateVO.getCode())){
planDO.setStatus(PlanStatusEnum..getValue());
}
planMapper.updateById(planDO);
return success(true);
}
}

@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.mes.controller.admin.plan.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import javax.validation.constraints.NotNull;
@Data
@AllArgsConstructor
public class PlanStatusUpdateVO {
@Schema(description = "计划id", example = "21176")
@NotNull(message = "计划id")
private Long id;
@Schema(description = "更新类型")
@NotNull(message = "更新类型")
private String code;
@Schema(description = "更新状态", example = "21176")
@NotNull(message = "更新状态")
private int status;
}

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.time.LocalDate;
@ -62,4 +63,6 @@ public class ItemRequisitionDO extends BaseDO {
*/
private Boolean isEnable;
private Long workerId;
}

@ -26,6 +26,7 @@ public interface ItemRequisitionMapper extends BaseMapperX<ItemRequisitionDO> {
.eqIfPresent(ItemRequisitionDO::getStatus, reqVO.getStatus())
.eqIfPresent(ItemRequisitionDO::getProcessInstanceId, reqVO.getProcessInstanceId())
.eqIfPresent(ItemRequisitionDO::getPlanId, reqVO.getPlanId())
.eqIfPresent(ItemRequisitionDO::getWorkerId, reqVO.getWorkerId())
.eqIfPresent(ItemRequisitionDO::getRemark, reqVO.getRemark())
.eqIfPresent(ItemRequisitionDO::getIsEnable, reqVO.getIsEnable())
.betweenIfPresent(ItemRequisitionDO::getCreateTime, reqVO.getCreateTime())

@ -106,10 +106,12 @@ public class ItemAnalysisServiceImpl implements ItemAnalysisService {
if(productId ==null || number==null )return list;
List<BomDetailDO> bomDetailDOList =
bomService.getBomDetailListByProductId(productId, number);
for (BomDetailDO bomDetail : bomDetailDOList) {
Long itemId = bomDetail.getProductId();
ItemRequisitionAndStock temp = new ItemRequisitionAndStock()
.setItemId(itemId)
.setUnitId(bomDetail.getUnitId())
.setNumber(bomDetail.getUsageNumber());
BigDecimal stockCount = erpStockService.getStockCount(itemId);

@ -63,5 +63,5 @@ public interface ItemRequisitionService {
* @return
*/
List<ItemRequisitionDetailDO> getItemRequisitionDetailListByItemRequisitionId(Long itemRequisitionId);
List<ItemRequisitionDetailRespVO> buildDetailVOList(List<ItemRequisitionDetailDO> list);
}

@ -1,6 +1,16 @@
package cn.iocoder.yudao.module.mes.service.itemrequisition;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO;
import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService;
import cn.iocoder.yudao.module.mes.controller.admin.bom.vo.BomDetailRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDetailDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO;
import cn.iocoder.yudao.module.mes.service.plan.PlanService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@ -19,6 +29,7 @@ import cn.iocoder.yudao.module.mes.dal.mysql.itemrequisition.ItemRequisitionDeta
import javax.annotation.Resource;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PURCHASE_ORDER_NO_EXISTS;
import static cn.iocoder.yudao.module.mes.enums.ErrorCodeConstants.*;
@ -37,6 +48,12 @@ public class ItemRequisitionServiceImpl implements ItemRequisitionService {
private ItemRequisitionDetailMapper itemRequisitionDetailMapper;
@Resource
private MesNoRedisDAO noRedisDAO;
@Resource
private ErpProductService productService;
@Resource
private ErpProductUnitService productUnitService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createItemRequisition(ItemRequisitionSaveReqVO createReqVO) {
@ -105,7 +122,23 @@ public class ItemRequisitionServiceImpl implements ItemRequisitionService {
public List<ItemRequisitionDetailDO> getItemRequisitionDetailListByItemRequisitionId(Long itemRequisitionId) {
return itemRequisitionDetailMapper.selectListByItemRequisitionId(itemRequisitionId);
}
@Override
public List<ItemRequisitionDetailRespVO> buildDetailVOList(List<ItemRequisitionDetailDO> list) {
if (CollUtil.isEmpty(list)) {
return Collections.emptyList();
}
Map<Long, ErpProductDO> map = productService.getProductMap(
convertSet(list, ItemRequisitionDetailDO::getProductId));
Map<Long, ErpProductUnitDO> unitMap = productUnitService.getProductUnitMap(
convertSet(list, ItemRequisitionDetailDO::getUnitId));
return BeanUtils.toBean(list, ItemRequisitionDetailRespVO.class, item -> {
MapUtils.findAndThen(map, item.getProductId(),
product -> item.setProductName(product.getName()));
MapUtils.findAndThen(unitMap, item.getUnitId(),
unit -> item.setUnitName(unit.getName()));
});
}
private void createItemRequisitionDetailList(Long itemRequisitionId, List<ItemRequisitionDetailDO> list) {
list.forEach(o -> o.setItemRequisitionId(itemRequisitionId));
itemRequisitionDetailMapper.insertBatch(list);

@ -1,11 +1,18 @@
package cn.iocoder.yudao.module.mes.service.plan;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionSaveReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock;
import javax.validation.Valid;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
/**
* Service
@ -55,4 +62,11 @@ public interface PlanService {
PlanDO selectLastOne();
List<PlanRespVO> buildVOList(List<PlanDO> list);
Boolean saveBatchPlan(List<PlanDO> planDOList);
Boolean arrangePlan(ItemRequisitionSaveReqVO saveReqVO, PlanDO planDO ,List<ItemRequisitionAndStock> list);
List<PlanDO> getPlanList(Collection<Long> ids);
default Map<Long, PlanDO> getPlanMap(Collection<Long> ids) {
return convertMap(getPlanList(ids), PlanDO::getId);
}
}

@ -4,13 +4,19 @@ import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionSaveReqVO;
import cn.iocoder.yudao.module.mes.controller.admin.itemrequisition.vo.ItemRequisitionStatusEnum;
import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDetailDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDO;
import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO;
import cn.iocoder.yudao.module.mes.service.itemrequisition.ItemRequisitionService;
import cn.iocoder.yudao.module.mes.service.itemrequisition.entity.ItemRequisitionAndStock;
import cn.iocoder.yudao.module.mes.service.task.TaskService;
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import java.util.*;
@ -129,4 +135,35 @@ public class PlanServiceImpl implements PlanService {
public Boolean saveBatchPlan(List<PlanDO> planDOList){
return planMapper.insertBatch(planDOList);
}
@Resource
private ItemRequisitionService itemRequisitionService;
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean arrangePlan(ItemRequisitionSaveReqVO saveReqVO,PlanDO planDO ,List<ItemRequisitionAndStock> list){
List<ItemRequisitionDetailDO> itemRequisitionDetails = new ArrayList<>();
for (ItemRequisitionAndStock item : list) {
ItemRequisitionDetailDO detailDO = new ItemRequisitionDetailDO()
.setProductId(item.getItemId())
.setUnitId(item.getUnitId())
.setNumber(item.getNumber())
.setIsEnable(true);
itemRequisitionDetails.add(detailDO);
}
saveReqVO.setItemRequisitionDetails(itemRequisitionDetails);
saveReqVO.setStatus(ItemRequisitionStatusEnum..getValue());
itemRequisitionService.createItemRequisition(saveReqVO);
//更新计划状态
planDO.setStatus(PlanStatusEnum..getValue());
planDO.setIsEnable(true);
planMapper.updateById(planDO);
return true;
}
@Override
public List<PlanDO> getPlanList(Collection<Long> ids) {
return planMapper.selectBatchIds(ids);
}
}
Loading…
Cancel
Save