package cn.iocoder.yudao.module.mes.controller.admin.wm.scrap;
|
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.scrap.MesWmScrapReceiptDO;
|
import cn.iocoder.yudao.module.mes.dal.mysql.pro.workorder.MesProWorkOrderMapper;
|
import cn.iocoder.yudao.module.mes.dal.mysql.wm.scrap.MesWmScrapReceiptMapper;
|
import cn.iocoder.yudao.module.mes.enums.wm.MesWmTransactionTypeEnum;
|
import cn.iocoder.yudao.module.mes.service.wm.transaction.MesWmTransactionService;
|
import cn.iocoder.yudao.module.mes.service.wm.transaction.dto.MesWmTransactionSaveReqDTO;
|
import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
|
import jakarta.annotation.Resource;
|
import jakarta.validation.Valid;
|
import jakarta.validation.constraints.DecimalMin;
|
import jakarta.validation.constraints.Digits;
|
import jakarta.validation.constraints.NotNull;
|
import jakarta.validation.constraints.Size;
|
import jakarta.validation.constraints.NotBlank;
|
import jakarta.validation.constraints.Pattern;
|
import lombok.Data;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.math.BigDecimal;
|
import java.time.LocalDateTime;
|
import java.time.YearMonth;
|
import java.util.List;
|
import java.util.Map;
|
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
/** 独立废料入库:记录和库存流水在同一个事务中提交。 */
|
@RestController
|
@RequestMapping("/mes/wm/scrap-receipt")
|
@Validated
|
public class MesWmScrapReceiptController {
|
@Resource private MesWmScrapReceiptMapper receiptMapper;
|
@Resource private MesProWorkOrderMapper workOrderMapper;
|
@Resource private MesWmTransactionService transactionService;
|
@Resource private MesWmWarehouseAreaService areaService;
|
|
@PostMapping("/create")
|
@PreAuthorize("@ss.hasPermission('mes:wm-scrap-receipt:create')")
|
@Transactional(rollbackFor = Exception.class)
|
public CommonResult<Long> create(@Valid @RequestBody CreateReq req) {
|
var order = workOrderMapper.selectById(req.getWorkOrderId());
|
if (order == null) throw new ServiceException(400, "生产工单不存在");
|
areaService.validateWarehouseAreaExists(req.getWarehouseId(), req.getLocationId(), req.getAreaId());
|
String code = "SCR-" + req.getRequestId();
|
if (receiptMapper.selectByCode(code) != null) throw new ServiceException(400, "请求已提交,请刷新入库记录");
|
MesWmScrapReceiptDO receipt = new MesWmScrapReceiptDO();
|
receipt.setCode(code);
|
receipt.setWorkOrderId(order.getId());
|
receipt.setWorkOrderCode(order.getCode());
|
receipt.setItemId(req.getItemId());
|
receipt.setQuantity(req.getQuantity());
|
receipt.setWarehouseId(req.getWarehouseId());
|
receipt.setLocationId(req.getLocationId());
|
receipt.setAreaId(req.getAreaId());
|
receipt.setBatchId(req.getBatchId());
|
receipt.setBatchCode(req.getBatchCode());
|
receipt.setReceiptTime(LocalDateTime.now());
|
receipt.setRemark(req.getRemark());
|
receiptMapper.insert(receipt);
|
Long transactionId = transactionService.createTransaction(new MesWmTransactionSaveReqDTO()
|
.setType(MesWmTransactionTypeEnum.IN.getType()).setBizType(cn.iocoder.yudao.module.mes.enums.MesBizTypeConstants.WM_SCRAP_RECEIPT)
|
.setBizId(receipt.getId()).setBizLineId(receipt.getId()).setBizCode(receipt.getCode())
|
.setItemId(receipt.getItemId()).setQuantity(receipt.getQuantity())
|
.setWarehouseId(receipt.getWarehouseId()).setLocationId(receipt.getLocationId())
|
.setAreaId(receipt.getAreaId()).setBatchId(receipt.getBatchId()).setBatchCode(receipt.getBatchCode())
|
.setReceiptTime(receipt.getReceiptTime()).setForceCreateNewStock(true));
|
receipt.setTransactionId(transactionId);
|
receiptMapper.updateById(receipt);
|
return success(receipt.getId());
|
}
|
|
@GetMapping("/monthly-summary")
|
@PreAuthorize("@ss.hasPermission('mes:wm-scrap-receipt:query')")
|
public CommonResult<List<Map<String, Object>>> monthlySummary(@RequestParam String month) {
|
YearMonth period = YearMonth.parse(month);
|
return success(receiptMapper.summarize(period.atDay(1).atStartOfDay(),
|
period.plusMonths(1).atDay(1).atStartOfDay()));
|
}
|
|
@GetMapping("/page")
|
@PreAuthorize("@ss.hasPermission('mes:wm-scrap-receipt:query')")
|
public CommonResult<PageResult<MesWmScrapReceiptDO>> page(@Valid PageParam page,
|
@RequestParam(required = false) Long workOrderId) {
|
return success(receiptMapper.selectReceiptPage(page, workOrderId));
|
}
|
|
@Data
|
public static class CreateReq {
|
@NotBlank @Pattern(regexp = "[A-Za-z0-9-]{1,60}") private String requestId;
|
@NotNull private Long workOrderId;
|
@NotNull private Long itemId;
|
@NotNull @DecimalMin(value = "0", inclusive = false) @Digits(integer = 16, fraction = 4) private BigDecimal quantity;
|
@NotNull private Long warehouseId;
|
@NotNull private Long locationId;
|
@NotNull private Long areaId;
|
private Long batchId;
|
@Size(max = 100) private String batchCode;
|
@Size(max = 500) private String remark;
|
}
|
}
|