fix feeding record

plp
chenshuichuan 2 years ago
parent 1b2ad66e16
commit cf4edd9277

@ -75,8 +75,8 @@ public class FeedingRecordPlanController {
@Operation(summary = "获得投料分配计划分页")
@PreAuthorize("@ss.hasPermission('mes:feeding-record-plan:query')")
public CommonResult<PageResult<FeedingRecordPlanRespVO>> getFeedingRecordPlanPage(@Valid FeedingRecordPlanPageReqVO pageReqVO) {
PageResult<FeedingRecordPlanDO> pageResult = feedingRecordPlanService.getFeedingRecordPlanPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, FeedingRecordPlanRespVO.class));
PageResult<FeedingRecordPlanRespVO> pageResult = feedingRecordPlanService.getFeedingRecordPlanPage(pageReqVO);
return success(pageResult);
}
@GetMapping("/export-excel")
@ -86,10 +86,10 @@ public class FeedingRecordPlanController {
public void exportFeedingRecordPlanExcel(@Valid FeedingRecordPlanPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<FeedingRecordPlanDO> list = feedingRecordPlanService.getFeedingRecordPlanPage(pageReqVO).getList();
List<FeedingRecordPlanRespVO> list = feedingRecordPlanService.getFeedingRecordPlanPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "投料分配计划.xls", "数据", FeedingRecordPlanRespVO.class,
BeanUtils.toBean(list, FeedingRecordPlanRespVO.class));
list);
}
}

@ -19,32 +19,43 @@ public class FeedingRecordPlanRespVO {
private Long id;
@Schema(description = "记录id", example = "997")
@ExcelProperty("记录id")
private Long recordId;
@Schema(description = "记录", example = "997")
@ExcelProperty("记录")
private String recordCode;
@Schema(description = "记录明细id", example = "2395")
@ExcelProperty("记录明细id")
private Long recordDetailId;
@Schema(description = "计划id", example = "17658")
@ExcelProperty("计划id")
private Long planId;
@Schema(description = "计划", example = "17658")
@ExcelProperty("计划")
private String planCode;
@Schema(description = "原料id", example = "19133")
@ExcelProperty("原料id")
private Long itemId;
@Schema(description = "原料", example = "19133")
@ExcelProperty("原料")
private String itemName;
@Schema(description = "重量")
@ExcelProperty("重量")
private BigDecimal weight;
@Schema(description = "单位id", example = "27598")
private Long unitId;
@Schema(description = "单位", example = "27598")
@ExcelProperty("单位")
private Long unitId;
private String unitName;
@Schema(description = "记录人", example = "14853")
@ExcelProperty("记录人")
private Long userId;
@Schema(description = "记录人", example = "14853")
@ExcelProperty("记录人")
private String userName;
@Schema(description = "投料时间")
@ExcelProperty("投料时间")

@ -99,8 +99,16 @@ public class FeedingRecordController {
@Operation(summary = "获得投料记录明细列表")
@Parameter(name = "recordId", description = "记录id")
@PreAuthorize("@ss.hasPermission('mes:feeding-record:query')")
public CommonResult<List<FeedingRecordDetailDO>> getFeedingRecordDetailListByRecordId(@RequestParam("recordId") Long recordId) {
return success(feedingRecordService.getFeedingRecordDetailListByRecordId(recordId));
public CommonResult<List<FeedingRecordDetailRespVO>> getFeedingRecordDetailListByRecordId(@RequestParam("recordId") Long recordId) {
List< FeedingRecordDetailDO> detailDOList = feedingRecordService.getFeedingRecordDetailListByRecordId(recordId);
return success(feedingRecordService.buildVOList(detailDOList));
}
@PutMapping("/update-status")
@Operation(summary = "提交状态")
public CommonResult<Boolean> updateStatus(@RequestParam("id") Long id,
@RequestParam("status") String status) {
feedingRecordService.updateStatus(id, status);
return success(true);
}
}

@ -0,0 +1,60 @@
package cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import com.alibaba.excel.annotation.*;
@Schema(description = "管理后台 - 投料记录明细 Response VO")
@Data
@ExcelIgnoreUnannotated
public class FeedingRecordDetailRespVO {
@Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "2941")
@ExcelProperty("id")
private Long id;
@Schema(description = "记录id", example = "5186")
@ExcelProperty("记录id")
private Long recordId;
@Schema(description = "记录", example = "997")
@ExcelProperty("记录")
private String recordCode;
@Schema(description = "原料id", example = "19133")
private Long itemId;
@Schema(description = "原料", example = "19133")
@ExcelProperty("原料")
private String itemName;
@Schema(description = "重量")
@ExcelProperty("重量")
private BigDecimal weight;
@Schema(description = "单位", example = "8197")
@ExcelProperty("单位")
private Long unitId;
@Schema(description = "单位", example = "27598")
@ExcelProperty("单位")
private String unitName;
@Schema(description = "记录人", example = "14853")
@ExcelProperty("记录人")
private Long userId;
@Schema(description = "记录人", example = "14853")
@ExcelProperty("记录人")
private String userName;
@Schema(description = "投料时间")
@ExcelProperty("投料时间")
private LocalDateTime feedingTime;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

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

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

@ -120,7 +120,8 @@ public class ItemRequisitionController {
@PreAuthorize("@ss.hasPermission('mes:item-requisition:query')")
public CommonResult<List<ItemRequisitionDetailRespVO>> getItemRequisitionDetailListByItemRequisitionId(@RequestParam("itemRequisitionId") Long itemRequisitionId) {
List<ItemRequisitionDetailDO>list = itemRequisitionService.getItemRequisitionDetailListByItemRequisitionId(itemRequisitionId);
return success(itemRequisitionService.buildDetailVOList(list));
ItemRequisitionDO requisitionDO = itemRequisitionService.getItemRequisition(itemRequisitionId);
return success(itemRequisitionService.buildDetailVOList(list, requisitionDO.getPlanId()));
}
}

@ -31,6 +31,10 @@ public class ItemRequisitionDetailRespVO {
@Schema(description = "数量")
@ExcelProperty("数量")
private BigDecimal number;
@Schema(description = "数量")
@ExcelProperty("投料完成数量")
private BigDecimal finishNumber;
@Schema(description = "备注", example = "你说的对")
@ExcelProperty("备注")

@ -115,7 +115,6 @@ public class PlanController {
@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);

@ -1,11 +1,16 @@
package cn.iocoder.yudao.module.mes.dal.mysql.feedingplan;
import java.math.BigDecimal;
import java.util.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingplan.FeedingRecordPlanDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.mes.controller.admin.feedingplan.vo.*;
@ -30,5 +35,16 @@ public interface FeedingRecordPlanMapper extends BaseMapperX<FeedingRecordPlanDO
.betweenIfPresent(FeedingRecordPlanDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(FeedingRecordPlanDO::getId));
}
default BigDecimal selectSumBy(Long planId, Long itemId) {
// SQL sum 查询
List<Map<String, Object>> result = selectMaps(new QueryWrapper<FeedingRecordPlanDO>()
.select("SUM(weight) AS sumCount")
.eq("item_id", itemId)
.eq("plan_id", planId));
// 获得数量
if (CollUtil.isEmpty(result)) {
return BigDecimal.ZERO;
}
return BigDecimal.valueOf(MapUtil.getDouble(result.get(0), "sumCount", 0D));
}
}

@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.itemrequisition.ItemRequisitionDetailDO;
import org.apache.ibatis.annotations.Mapper;
@ -24,5 +25,9 @@ public interface ItemRequisitionDetailMapper extends BaseMapperX<ItemRequisition
default int deleteByItemRequisitionId(Long itemRequisitionId) {
return delete(ItemRequisitionDetailDO::getItemRequisitionId, itemRequisitionId);
}
default ItemRequisitionDetailDO selectBy(Long itemRequisitionId, Long itemId) {
return selectOne(ItemRequisitionDetailDO::getItemRequisitionId, itemRequisitionId,
ItemRequisitionDetailDO::getProductId, itemId);
}
}

@ -35,4 +35,7 @@ public interface ItemRequisitionMapper extends BaseMapperX<ItemRequisitionDO> {
default ItemRequisitionDO selectByNo(String no) {
return selectOne(ItemRequisitionDO::getCode, no);
}
default ItemRequisitionDO selectByPlanId(Long planId) {
return selectOne(ItemRequisitionDO::getPlanId, planId);
}
}

@ -1,6 +1,5 @@
package cn.iocoder.yudao.module.mes.dal.mysql.plan;
import java.math.BigDecimal;
import java.util.*;
import cn.hutool.core.collection.CollUtil;
@ -8,9 +7,7 @@ import cn.hutool.core.map.MapUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.task.TaskDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.*;
@ -71,4 +68,7 @@ public interface PlanMapper extends BaseMapperX<PlanDO> {
.orderByDesc("plan_end_time")
.last("limit 1"));
}
default List<PlanDO> selectBy(List<Integer> statusList) {
return selectList(PlanDO::getStatus, statusList);
}
}

@ -42,6 +42,10 @@ public class MesNoRedisDAO {
* {@link cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDO}
*/
public static final String ITEM_REQUISITION_NO_PREFIX = "LL-";
/**
*
*/
public static final String FEEDING_RECORD_CODE_PREFIX = "TL-";
@Resource
private StringRedisTemplate stringRedisTemplate;

@ -54,6 +54,7 @@ public class BomServiceImpl implements BomService {
@Override
@Transactional(rollbackFor = Exception.class)
public Long createBom(BomSaveReqVO createReqVO) {
if(createReqVO.getIsEnable()){
BomDO temp = bomMapper.selectByProductId(createReqVO.getProductId());
if(temp!=null){
@ -62,7 +63,6 @@ public class BomServiceImpl implements BomService {
}
// 插入
BomDO bom = BeanUtils.toBean(createReqVO, BomDO.class);
bomMapper.insert(bom);
if(StringUtils.isEmpty(bom.getCode())){
// 1.4 生成订单号,并校验唯一性
String no = noRedisDAO.generate2(MesNoRedisDAO.BOM_NO_PREFIX);
@ -71,6 +71,8 @@ public class BomServiceImpl implements BomService {
}
bom.setCode(no);
}
bomMapper.insert(bom);
// 插入子表
createBomDetailList(bom.getId(), createReqVO.getBomDetails());
// 返回

@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import javax.validation.Valid;
import java.math.BigDecimal;
/**
* Service
@ -50,6 +51,6 @@ public interface FeedingRecordPlanService {
* @param pageReqVO
* @return
*/
PageResult<FeedingRecordPlanDO> getFeedingRecordPlanPage(FeedingRecordPlanPageReqVO pageReqVO);
PageResult<FeedingRecordPlanRespVO> getFeedingRecordPlanPage(FeedingRecordPlanPageReqVO pageReqVO);
BigDecimal selectSumBy(Long planId, Long itemId);
}

@ -1,9 +1,25 @@
package cn.iocoder.yudao.module.mes.service.feedingplan;
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.BomRespVO;
import cn.iocoder.yudao.module.mes.dal.dataobject.bom.BomDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO;
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.feedingrecord.FeedingRecordService;
import cn.iocoder.yudao.module.mes.service.plan.PlanService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import cn.iocoder.yudao.module.mes.controller.admin.feedingplan.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingplan.FeedingRecordPlanDO;
@ -16,6 +32,7 @@ import cn.iocoder.yudao.module.mes.dal.mysql.feedingplan.FeedingRecordPlanMapper
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.mes.enums.ErrorCodeConstants.*;
/**
@ -29,6 +46,16 @@ public class FeedingRecordPlanServiceImpl implements FeedingRecordPlanService {
@Resource
private FeedingRecordPlanMapper feedingRecordPlanMapper;
@Resource
private ErpProductService productService;
@Resource
private ErpProductUnitService productUnitService;
@Resource
private AdminUserApi adminUserApi;
@Resource
private PlanService planService;
@Resource
private FeedingRecordService feedingRecordService;
@Override
public Long createFeedingRecordPlan(FeedingRecordPlanSaveReqVO createReqVO) {
@ -68,8 +95,44 @@ public class FeedingRecordPlanServiceImpl implements FeedingRecordPlanService {
}
@Override
public PageResult<FeedingRecordPlanDO> getFeedingRecordPlanPage(FeedingRecordPlanPageReqVO pageReqVO) {
return feedingRecordPlanMapper.selectPage(pageReqVO);
public PageResult<FeedingRecordPlanRespVO> getFeedingRecordPlanPage(FeedingRecordPlanPageReqVO pageReqVO) {
PageResult<FeedingRecordPlanDO> pageResult = feedingRecordPlanMapper.selectPage(pageReqVO);
return new PageResult<>(buildVOList(pageResult.getList()), pageResult.getTotal());
}
private List<FeedingRecordPlanRespVO> buildVOList(List<FeedingRecordPlanDO> list) {
if (CollUtil.isEmpty(list)) {
return Collections.emptyList();
}
Map<Long, ErpProductDO> map = productService.getProductMap(
convertSet(list, FeedingRecordPlanDO::getItemId));
Map<Long, ErpProductUnitDO> unitMap = productUnitService.getProductUnitMap(
convertSet(list, FeedingRecordPlanDO::getUnitId));
// 1.4 管理员信息
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
convertSet(list, FeedingRecordPlanDO::getUserId));
//投料单
Map<Long, FeedingRecordDO> recordMap = feedingRecordService.getRecordMap(
convertSet(list, FeedingRecordPlanDO::getRecordId));
//生产计划
Map<Long, PlanDO> planMap = planService.getPlanMap(
convertSet(list, FeedingRecordPlanDO::getPlanId));
return BeanUtils.toBean(list, FeedingRecordPlanRespVO.class, item -> {
MapUtils.findAndThen(map, item.getItemId(),
product -> item.setItemName(product.getName()));
MapUtils.findAndThen(unitMap, item.getUnitId(),
unit -> item.setUnitName(unit.getName()));
MapUtils.findAndThen(userMap, item.getUserId(),
user -> item.setUnitName(user.getNickname()));
MapUtils.findAndThen(recordMap, item.getRecordId(),
record -> item.setRecordCode(record.getFeedingRecordCode()));
MapUtils.findAndThen(planMap, item.getPlanId(),
plan -> item.setPlanCode(plan.getCode()));
});
}
@Override
public BigDecimal selectSumBy(Long planId, Long itemId){
return feedingRecordPlanMapper.selectSumBy(planId,itemId);
}
}

@ -6,9 +6,13 @@ import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDetailDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import org.springframework.transaction.annotation.Transactional;
import javax.validation.Valid;
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
/**
* Service
*
@ -63,5 +67,14 @@ public interface FeedingRecordService {
* @return
*/
List<FeedingRecordDetailDO> getFeedingRecordDetailListByRecordId(Long recordId);
List<FeedingRecordDetailRespVO> buildVOList(List<FeedingRecordDetailDO> list);
List<FeedingRecordDO> getFeedingRecordList(Collection<Long> ids);
default Map<Long, FeedingRecordDO> getRecordMap(Collection<Long> ids) {
if(ids.isEmpty())return new HashMap<>();
return convertMap(getFeedingRecordList(ids), FeedingRecordDO::getId);
}
void updateStatus(Long id, String status);
//提交、反提交投料记录单
}

@ -1,9 +1,29 @@
package cn.iocoder.yudao.module.mes.service.feedingrecord;
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.feedingplan.vo.FeedingRecordPlanRespVO;
import cn.iocoder.yudao.module.mes.controller.admin.plan.vo.PlanStatusEnum;
import cn.iocoder.yudao.module.mes.controller.admin.stockworkshop.vo.StockWorkShopTypeEnum;
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingplan.FeedingRecordPlanDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.plan.PlanDO;
import cn.iocoder.yudao.module.mes.dal.dataobject.stockworkshop.StockWorkshopDO;
import cn.iocoder.yudao.module.mes.dal.redis.no.MesNoRedisDAO;
import cn.iocoder.yudao.module.mes.service.feedingplan.FeedingRecordPlanService;
import cn.iocoder.yudao.module.mes.service.plan.PlanService;
import cn.iocoder.yudao.module.mes.service.stockworkshop.StockWorkshopDetailService;
import cn.iocoder.yudao.module.mes.service.stockworkshop.StockWorkshopService;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*;
import cn.iocoder.yudao.module.mes.controller.admin.feedingrecord.vo.*;
import cn.iocoder.yudao.module.mes.dal.dataobject.feedingrecord.FeedingRecordDO;
@ -18,6 +38,7 @@ import cn.iocoder.yudao.module.mes.dal.mysql.feedingrecord.FeedingRecordDetailMa
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.mes.enums.ErrorCodeConstants.*;
/**
@ -33,12 +54,31 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
private FeedingRecordMapper feedingRecordMapper;
@Resource
private FeedingRecordDetailMapper feedingRecordDetailMapper;
@Resource
private ErpProductService productService;
@Resource
private ErpProductUnitService productUnitService;
@Resource
private MesNoRedisDAO noRedisDAO;
@Resource
private AdminUserApi adminUserApi;
@Resource
private FeedingRecordPlanService recordPlanService;
@Resource
private StockWorkshopService workshopService;
@Resource
private StockWorkshopDetailService workshopDetailService;
@Resource
private PlanService planService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createFeedingRecord(FeedingRecordSaveReqVO createReqVO) {
createReqVO.setFeedingRecordCode(noRedisDAO.generate3(MesNoRedisDAO.FEEDING_RECORD_CODE_PREFIX));
// 插入
FeedingRecordDO feedingRecord = BeanUtils.toBean(createReqVO, FeedingRecordDO.class);
feedingRecord.setRecordStatus(FeedingStatusEnum.稿.getValue());
feedingRecordMapper.insert(feedingRecord);
// 插入子表
@ -109,5 +149,68 @@ public class FeedingRecordServiceImpl implements FeedingRecordService {
private void deleteFeedingRecordDetailByRecordId(Long recordId) {
feedingRecordDetailMapper.deleteByRecordId(recordId);
}
@Override
public List<FeedingRecordDetailRespVO> buildVOList(List<FeedingRecordDetailDO> list) {
if (CollUtil.isEmpty(list)) {
return Collections.emptyList();
}
Map<Long, ErpProductDO> map = productService.getProductMap(
convertSet(list, FeedingRecordDetailDO::getItemId));
Map<Long, ErpProductUnitDO> unitMap = productUnitService.getProductUnitMap(
convertSet(list, FeedingRecordDetailDO::getUnitId));
// 1.4 管理员信息
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
convertSet(list, FeedingRecordDetailDO::getUserId));
return BeanUtils.toBean(list, FeedingRecordDetailRespVO.class, item -> {
MapUtils.findAndThen(map, item.getItemId(),
product -> item.setItemName(product.getName()));
MapUtils.findAndThen(unitMap, item.getUnitId(),
unit -> item.setUnitName(unit.getName()));
MapUtils.findAndThen(userMap, item.getUserId(),
user -> item.setUnitName(user.getNickname()));
});
}
@Override
public List<FeedingRecordDO> getFeedingRecordList(Collection<Long> ids) {
return feedingRecordMapper.selectBatchIds(ids);
}
/**
*
* //投料明细按照当前正在开工的计划需求比例进行分配生成投料分配计划记录FeedingRecordPlanDO
* ()
* **/
@Override
@Transactional(rollbackFor = Exception.class)
public void updateStatus(Long id, String status) {
FeedingRecordDO recordDO = feedingRecordMapper.selectById(id);
if(recordDO==null) throw exception(FEEDING_RECORD_NOT_EXISTS);
//后续步骤只处理领料投料的投料单,湿废品和干废品投料暂不处理
if(!recordDO.getFeedingType().equals(FeedingTypeEnum..getValue()))
return;
List<FeedingRecordDetailDO> detailDOList = getFeedingRecordDetailListByRecordId(id);
List<Integer> statusList = new ArrayList<>();
statusList.add(PlanStatusEnum..getValue());
List<PlanDO> planDOList = planService.getPlanByStatus(statusList);
if(status.equals(FeedingStatusEnum..getValue())) {
for (FeedingRecordDetailDO recordDetailDO: detailDOList) {
StockWorkshopDO workshopDO = new StockWorkshopDO()
.setItemId(recordDetailDO.getItemId())
.setCount(recordDetailDO.getWeight().multiply(BigDecimal.valueOf(-1)))
.setCategoryId(1L);
workshopService.updateStock(workshopDO, StockWorkShopTypeEnum..getValue(),
recordDO.getId(), recordDO.getFeedingRecordCode());
}
}
//todo 需要回退吗?
else if(status.equals(FeedingStatusEnum.稿.getValue())) {
}
}
}

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

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.mes.service.itemrequisition;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.exception.ErrorCode;
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;
@ -10,6 +11,7 @@ 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.feedingplan.FeedingRecordPlanService;
import cn.iocoder.yudao.module.mes.service.plan.PlanService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@ -52,11 +54,16 @@ public class ItemRequisitionServiceImpl implements ItemRequisitionService {
private ErpProductService productService;
@Resource
private ErpProductUnitService productUnitService;
@Resource
private FeedingRecordPlanService recordPlanService;
@Override
@Transactional(rollbackFor = Exception.class)
public Long createItemRequisition(ItemRequisitionSaveReqVO createReqVO) {
//查询是否已存在派工领料单
ItemRequisitionDO itemRequisitionDO= itemRequisitionMapper.selectByPlanId(createReqVO.getPlanId());
if(itemRequisitionDO!=null)
throw exception(new ErrorCode(500, "创建领料单失败,计划已存在领料单!"));
// 插入
ItemRequisitionDO itemRequisition = BeanUtils.toBean(createReqVO, ItemRequisitionDO.class);
if(StringUtils.isEmpty(itemRequisition.getCode())){
@ -123,7 +130,7 @@ public class ItemRequisitionServiceImpl implements ItemRequisitionService {
return itemRequisitionDetailMapper.selectListByItemRequisitionId(itemRequisitionId);
}
@Override
public List<ItemRequisitionDetailRespVO> buildDetailVOList(List<ItemRequisitionDetailDO> list) {
public List<ItemRequisitionDetailRespVO> buildDetailVOList(List<ItemRequisitionDetailDO> list, Long planId) {
if (CollUtil.isEmpty(list)) {
return Collections.emptyList();
}
@ -137,6 +144,7 @@ public class ItemRequisitionServiceImpl implements ItemRequisitionService {
product -> item.setProductName(product.getName()));
MapUtils.findAndThen(unitMap, item.getUnitId(),
unit -> item.setUnitName(unit.getName()));
item.setFinishNumber(recordPlanService.selectSumBy(planId, item.getProductId()));
});
}
private void createItemRequisitionDetailList(Long itemRequisitionId, List<ItemRequisitionDetailDO> list) {
@ -154,4 +162,21 @@ public class ItemRequisitionServiceImpl implements ItemRequisitionService {
itemRequisitionDetailMapper.deleteByItemRequisitionId(itemRequisitionId);
}
@Override
public ItemRequisitionDetailRespVO getItemRequisition(Long planId, Long itemId){
ItemRequisitionDO itemRequisitionDO = itemRequisitionMapper.selectByPlanId(planId);
if(itemRequisitionDO != null){
ItemRequisitionDetailDO detailDO =
itemRequisitionDetailMapper.selectBy(itemRequisitionDO.getId(), itemId);
ItemRequisitionDetailRespVO respVO = new ItemRequisitionDetailRespVO()
.setItemRequisitionId(itemRequisitionDO.getId())
.setUnitId(detailDO.getUnitId())
.setNumber(detailDO.getNumber())
.setProductId(detailDO.getProductId());
respVO.setFinishNumber(recordPlanService.selectSumBy(planId, itemId));
return respVO;
}
return null;
}
}

@ -71,4 +71,6 @@ public interface PlanService {
if(ids.isEmpty())return new HashMap<>();
return convertMap(getPlanList(ids), PlanDO::getId);
}
List<PlanDO> getPlanByStatus(List<Integer> statusList);
}

@ -58,7 +58,7 @@ public class PlanServiceImpl implements PlanService {
}
plan.setCode(no);
}
if(plan.getIsEnable() ==null)plan.setIsEnable(true);
planMapper.insert(plan);
// 返回
return plan.getId();
@ -70,6 +70,7 @@ public class PlanServiceImpl implements PlanService {
validatePlanExists(updateReqVO.getId());
// 更新
PlanDO updateObj = BeanUtils.toBean(updateReqVO, PlanDO.class);
if(updateObj.getIsEnable() ==null)updateObj.setIsEnable(true);
planMapper.updateById(updateObj);
}
@ -166,4 +167,8 @@ public class PlanServiceImpl implements PlanService {
public List<PlanDO> getPlanList(Collection<Long> ids) {
return planMapper.selectBatchIds(ids);
}
@Override
public List<PlanDO> getPlanByStatus(List<Integer> statusList){
return planMapper.selectBy(statusList);
}
}

@ -150,7 +150,7 @@ public class FeedingRecordPlanServiceImplTest extends BaseDbUnitTest {
reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 28));
// 调用
PageResult<FeedingRecordPlanDO> pageResult = feedingRecordPlanService.getFeedingRecordPlanPage(reqVO);
PageResult<FeedingRecordPlanRespVO> pageResult = feedingRecordPlanService.getFeedingRecordPlanPage(reqVO);
// 断言
assertEquals(1, pageResult.getTotal());
assertEquals(1, pageResult.getList().size());

Loading…
Cancel
Save