rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -234,7 +234,7 @@ @ApiOperation("任务上架") @PreAuthorize("hasAuthority('manager:qlyInspect:update')") @PostMapping("/task/stock") @PostMapping("/task/public/{code}") public R taskToLocs(@PathVariable String code) throws Exception { if (Objects.isNull(code)) { return R.error("参数不能为空!!"); rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/TaskQueueDto.java
@@ -1,6 +1,5 @@ package com.vincent.rsf.server.api.entity.dto; import com.vincent.rsf.server.manager.entity.Loc; import com.vincent.rsf.server.manager.entity.Task; import com.vincent.rsf.server.manager.entity.TaskItem; import io.swagger.annotations.ApiModel; @@ -14,7 +13,7 @@ @Data @Accessors(chain = true) @ApiModel(value = "TaskQueueDto", description = "任务信息") public class TaskQueueDto implements Serializable { public class TaskQueueDto implements Serializable{ @ApiModelProperty("任务主单") private Task task; rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/OrderType.java
@@ -12,7 +12,8 @@ ORDER_PURCHASE_IN("purchase", "采购入库单"), ORDER_OUT("out", "出库单"), ORDER_IN("in", "入库单"), ORDER_RECEIPT("receipt", "收货单") ORDER_RECEIPT("receipt", "收货单"), ORDER_PLAT_IN("plat in", "平库入库单"), ; rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -6,6 +6,7 @@ import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.controller.params.*; import com.vincent.rsf.server.api.entity.dto.*; import com.vincent.rsf.server.api.entity.enums.OrderType; import com.vincent.rsf.server.api.entity.enums.OrderWorkType; import com.vincent.rsf.server.api.service.MobileService; import com.vincent.rsf.server.common.config.ConfigProperties; @@ -201,7 +202,7 @@ List<ReceiptDetlsDto> receipts = params.getReceipts(); List<WarehouseAreasItem> allOrders = new ArrayList<>(); double receiptQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getReceiptQty).sum(); Double receiptQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getReceiptQty).sum(); String asnCode = receipts.stream().findFirst().get().getAsnCode(); @@ -210,7 +211,9 @@ if (Objects.isNull(asnOrder)) { throw new CoolException("数据错误:主单不存在!!"); } asnOrder.setQty(receiptQty); /**收货数量累加,1. 会出超收情况 2. 会有收货不足情况*/ Double rcptedQty = asnOrder.getQty() + receiptQty; asnOrder.setQty(rcptedQty); if (!asnOrderMapper.updateById(asnOrder)) { throw new CoolException("已收货数量修改失败!!"); @@ -302,60 +305,18 @@ if (!warehouseAreasItemService.saveBatch(allOrders)) { throw new CoolException("收货失败!!"); } //获取采购数量 double purQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getPurQty).sum(); BigDecimal subtract = BigDecimal.valueOf(receiptQty).subtract(BigDecimal.valueOf(purQty)); //判断已收货数量是否小于等于采购数量 if (subtract.compareTo(new BigDecimal("0.0")) <= 0) { asnOrder.setRleStatus(Short.valueOf("1")); //日志表操作 operateOrderLogs(asnOrder); } // //获取采购数量 // double purQty = receipts.stream().mapToDouble(ReceiptDetlsDto::getPurQty).sum(); // // BigDecimal subtract = BigDecimal.valueOf(receiptQty).subtract(BigDecimal.valueOf(purQty)); // //判断已收货数量是否小于等于采购数量 // if (subtract.compareTo(new BigDecimal("0.0")) <= 0) { // asnOrder.setRleStatus(Short.valueOf("1")); // //日志表操作 // operateOrderLogs(asnOrder); // } return R.ok("操作成功"); } /** * @author Ryan * @description 删除原主单及明细,加入历史档 * @param * @return * @time 2025/3/19 19:53 */ private void operateOrderLogs(AsnOrder asnOrder) { if (!asnOrderMapper.removeById(asnOrder.getId())) { throw new CoolException("原单据删除失败!!"); } AsnOrderLog orderLog = new AsnOrderLog(); BeanUtils.copyProperties(asnOrder, orderLog); orderLog.setAsnId(asnOrder.getId()); if (!asnOrderLogService.save(orderLog)) { throw new CoolException("主单历史档添加失败!!"); } List<AsnOrderItemLog> logs = new ArrayList<>(); List<AsnOrderItem> items = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, asnOrder.getId())); items.forEach(item -> { AsnOrderItemLog itemLog = new AsnOrderItemLog(); BeanUtils.copyProperties(item, itemLog); itemLog.setAsnItemId(itemLog.getId()) .setAsnId(item.getAsnId()); logs.add(itemLog); }); if (!asnOrderItemLogService.saveBatch(logs)) { throw new CoolException("通知单明细历史档保存失败!!"); } if (asnOrderItemMapper.delete(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, asnOrder.getId())) < 1) { throw new CoolException("原单据明细删除失败!!"); } } /** * @author Ryan @@ -624,7 +585,10 @@ throw new CoolException("单据明细不能为空!!"); } Long OrderId = params.getItemList().stream().findFirst().get().getAsnId(); AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, OrderId)); /**获取平库订单*/ AsnOrder order = asnOrderMapper.getOne(new LambdaQueryWrapper<AsnOrder>() .eq(AsnOrder::getId, OrderId) .eq(AsnOrder::getType, OrderType.ORDER_PLAT_IN.type)); if (Objects.isNull(order)) { throw new CoolException("单据不存在!!"); } @@ -681,7 +645,7 @@ throw new CoolException("拖盘任务不存在!!"); } List<TaskItem> taskItems = taskItemService.list(new LambdaQueryWrapper<TaskItem>().eq(TaskItem::getTaskId, task.getId())); if (!taskItems.isEmpty()) { if (taskItems.isEmpty()) { throw new CoolException("拖盘任务明细不存在!!"); } TaskQueueDto queueDto = new TaskQueueDto(); rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/AsnOrderController.java
@@ -190,4 +190,19 @@ } return R.ok(asnOrderService.batchUpdate(params, getLoginUserId())); } @ApiOperation("一键收货") @PostMapping("/asnOrder/complete/{id}") @PreAuthorize("hasAuthority('manager:asnOrder:update')") public R completeOrder(@PathVariable Long id) { if (Objects.isNull(id)) { return R.error("参数不能为空!!"); } return asnOrderService.completeOrder(id, getLoginUserId()); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
@@ -210,6 +210,18 @@ // null // 备注 // ); public String getExceStatus$() { if (Cools.isEmpty(this.exceStatus)){ return ""; } DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_ASN_EXCE_STATUS).eq(DictData::getValue, this.exceStatus)); if (Objects.isNull(dictData)) { return null; } return dictData.getLabel(); } public String getType$(){ if (Cools.isEmpty(this.type)){ return ""; rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java
@@ -112,6 +112,9 @@ @ApiModelProperty(value= "状态 1: 正常 0: 冻结 ") private Integer status; @ApiModelProperty("执行状态") private Short exceStatus; /** * 是否删除 1: 是 0: 否 */ rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Task.java
@@ -34,10 +34,8 @@ @Data @Accessors(chain = true) @TableName("man_task") @ApiModel(value = "Task", description = "任务档") public class Task implements Serializable { private static final long serialVersionUID = 1L; /** * ID */ rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/TaskItem.java
@@ -31,10 +31,8 @@ @Data @Accessors(chain = true) @TableName("man_task_item") @ApiModel(value = "TaskItem", description = "任务档明细") public class TaskItem implements Serializable { private static final long serialVersionUID = 1L; /** * ID */ rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/ScheduleJobs.java
@@ -68,7 +68,7 @@ */ @Scheduled(cron = "0 0/05 * * * ? ") @Transactional(rollbackFor = Exception.class) public void genAsnOrder() { public synchronized void genAsnOrder() { //判断是否开启自动生成ASN单据 if (!flowProperties.getFlagAutoAsn()) { return; rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderService.java
@@ -21,4 +21,5 @@ boolean batchUpdate(BatchUpdateParam params, Long loginUserId); R completeOrder(Long id, Long loginUserId); } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -11,15 +11,20 @@ import com.vincent.rsf.server.manager.controller.params.AsnOrderAndItemsParams; import com.vincent.rsf.server.manager.controller.params.BatchUpdateParam; import com.vincent.rsf.server.manager.entity.AsnOrderItem; import com.vincent.rsf.server.manager.entity.AsnOrderItemLog; import com.vincent.rsf.server.manager.entity.AsnOrderLog; import com.vincent.rsf.server.manager.mapper.AsnOrderMapper; import com.vincent.rsf.server.manager.entity.AsnOrder; import com.vincent.rsf.server.manager.mapper.PurchaseMapper; import com.vincent.rsf.server.manager.service.AsnOrderItemLogService; import com.vincent.rsf.server.manager.service.AsnOrderItemService; import com.vincent.rsf.server.manager.service.AsnOrderLogService; import com.vincent.rsf.server.manager.service.AsnOrderService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vincent.rsf.server.system.constant.SerialRuleCode; import com.vincent.rsf.server.system.mapper.SerialRuleMapper; import com.vincent.rsf.server.system.utils.SerialRuleUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -46,6 +51,10 @@ private PurchaseMapper purchaseMapper; @Autowired private AsnOrderItemService asnOrderItemService; @Autowired private AsnOrderLogService asnOrderLogService; @Autowired private AsnOrderItemLogService asnOrderItemLogService; @Resource private SerialRuleMapper serialRuleMapper; @@ -171,6 +180,75 @@ .set(!Objects.isNull(order.getWkType()), AsnOrder::getWkType, order.getWkType()) .set(!Objects.isNull(order.getExceStatus()), AsnOrder::getExceStatus, order.getExceStatus()) .set(AsnOrder::getUpdateBy, userId)); } /** * @param id * @param loginUserId * @return * @author Ryan * @description 一键收货 * @time 2025/4/3 15:45 */ @Override @Transactional(rollbackFor = Exception.class) public R completeOrder(Long id, Long loginUserId) { AsnOrder asnOrder = this.getById(id); if (Objects.isNull(asnOrder)) { throw new CoolException("单据不存在!!"); } //一键加入历史档 try { operateOrderLogs(asnOrder); } catch (Exception e) { throw new CoolException("收货完成失败!!"); } return R.ok("收货成功!!"); } /** * @author Ryan * @description 删除原主单及明细,加入历史档 * @param * @return * @time 2025/3/19 19:53 */ @Transactional(rollbackFor = Exception.class) private void operateOrderLogs(AsnOrder asrder) throws Exception{ if (Objects.isNull(asrder) || Objects.isNull(asrder.getId())) { throw new CoolException("参数不能为空!!"); } AsnOrder order = this.getById(asrder.getId()); AsnOrderLog orderLog = new AsnOrderLog(); order.setExceStatus(Short.valueOf("2")); BeanUtils.copyProperties(order, orderLog); orderLog.setId(null); orderLog.setAsnId(order.getId()); if (!this.saveOrUpdate(order)) { throw new CoolException("状态修改失败!!"); } if (!asnOrderLogService.save(orderLog)) { throw new CoolException("主单历史档添加失败!!"); } List<AsnOrderItemLog> logs = new ArrayList<>(); List<AsnOrderItem> items = asnOrderItemService.list(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId())); items.forEach(item -> { AsnOrderItemLog itemLog = new AsnOrderItemLog(); BeanUtils.copyProperties(item, itemLog); itemLog.setAsnItemId(itemLog.getId()) .setAsnId(item.getAsnId()); logs.add(itemLog); }); if (!asnOrderItemLogService.saveBatch(logs)) { throw new CoolException("通知单明细历史档保存失败!!"); } if (!asnOrderItemService.remove(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, order.getId()))) { throw new CoolException("原单据明细删除失败!!"); } if (!this.removeById(asrder.getId())) { throw new CoolException("原单据删除失败!!"); } } } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/QlyInspectServiceImpl.java
@@ -1,6 +1,7 @@ package com.vincent.rsf.server.manager.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.manager.controller.params.IsptOrderParam; @@ -171,6 +172,9 @@ throw new CoolException("明细保存失败!!"); } } if (!asnOrderService.update(new LambdaUpdateWrapper<AsnOrder>().in(AsnOrder::getId, param.getIds()).set(AsnOrder::getNtyStatus, 1))) { throw new CoolException("报检状态修改失败!!"); } return R.ok("保存成功!!"); } } rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
@@ -49,4 +49,9 @@ */ public final static String DICT_INSPECT_RESULT = "sys_inspect_result"; /** * ASN订单执行状态 */ public final static String DICT_ASN_EXCE_STATUS = "sys_asn_exce_status"; }