rsf-server/src/main/java/com/vincent/rsf/server/api/controller/MobileController.java
@@ -56,17 +56,17 @@ /** * 标准扫码收货信息 * @param barcode * @param trackCode * @return */ @PreAuthorize("hasAuthority('manager:asnOrder:list')") @GetMapping("/orders/{barcode}") @GetMapping("/orders/{trackCode}") @ApiOperation("标准扫码收货") public R getOrderBybarcode(@PathVariable String barcode) { if (StringUtils.isEmpty(barcode)) { public R getOrderBybarcode(@PathVariable String trackCode) { if (StringUtils.isEmpty(trackCode)) { throw new CoolException("条码不能为空!!"); } return mobileService.getOrderByCode(barcode); return mobileService.getOrderByCode(trackCode); } /** rsf-server/src/main/java/com/vincent/rsf/server/api/entity/dto/ReceiptDetlsDto.java
@@ -61,6 +61,9 @@ @ApiModelProperty("采购数量") private Double purQty; @ApiModelProperty("实际送货数量") private Double anfme; @ApiModelProperty("收货数量") private Double receiptQty; rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/MobileServiceImpl.java
@@ -1,6 +1,5 @@ package com.vincent.rsf.server.api.service.impl; import com.alibaba.druid.sql.visitor.functions.If; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; @@ -142,7 +141,7 @@ if (StringUtils.isEmpty(barcode)) { return R.error("标签码不能为空!!"); } List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getBarcode, barcode)); List<AsnOrderItem> asnOrderItem = asnOrderItemMapper.selectList(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getTrackCode, barcode)); if (Objects.isNull(asnOrderItem)) { throw new CoolException("单据明细不存在!!"); } @@ -166,7 +165,6 @@ if (Objects.isNull(params.getWhAreaId())) { throw new CoolException("库区标识不能为空!!"); } WarehouseAreas areasItem = warehouseAreasService.getOne(new LambdaQueryWrapper<WarehouseAreas>().eq(WarehouseAreas::getId, params.getWhAreaId())); if (Objects.isNull(areasItem)) { @@ -200,7 +198,7 @@ if (Objects.isNull(dto.getReceiptQty())) { throw new CoolException("收货数据不能为空!!"); } if (dto.getReceiptQty() < dto.getPurQty()) { if (dto.getReceiptQty().compareTo(dto.getAnfme()) > 0) { throw new CoolException("收货数量不能大于采购数量!!"); } @@ -296,6 +294,7 @@ AsnOrderLog orderLog = new AsnOrderLog(); BeanUtils.copyProperties(asnOrder, orderLog); orderLog.setAsnId(asnOrder.getId()); if (!asnOrderLogService.save(orderLog)) { throw new CoolException("主单历史档添加失败!!"); @@ -306,6 +305,8 @@ items.forEach(item -> { AsnOrderItemLog itemLog = new AsnOrderItemLog(); BeanUtils.copyProperties(item, itemLog); itemLog.setAsnItemId(itemLog.getId()) .setAsnId(item.getAsnId()); logs.add(itemLog); }); @@ -389,7 +390,8 @@ .setMaktx(asnOrderItem.getMaktx()) .setBarcode(asnOrderItem.getBarcode()) .setPoCode(asnOrderItem.getPoCode()) .setPurQty(asnOrderItem.getAnfme()) .setAnfme(asnOrderItem.getAnfme()) .setPurQty(asnOrderItem.getPurQty()) .setSplrBatch(asnOrderItem.getSplrBatch()); Matnr matnr = matnrMapper.selectById(asnOrderItem.getMatnrId()); rsf-server/src/main/java/com/vincent/rsf/server/common/CodeBuilder.java
@@ -22,7 +22,7 @@ // generator.username="sa"; // generator.password="Zoneyung@zy56$"; generator.table="man_wait_pakin_item"; generator.table="man_asn_order_log"; generator.tableDesc="组拖档明细"; generator.packagePath="com.vincent.rsf.server.manager"; rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/WaitPakinController.java
@@ -114,7 +114,7 @@ @PreAuthorize("hasAuthority('manager:waitPakin:update')") @ApiOperation("组盘") @ApiOperation("组拖") @PostMapping("/waitPakin/merge") public R pikinOrder(@RequestBody WaitPakinParam waitPakin) { if (Objects.isNull(waitPakin)) { @@ -129,5 +129,21 @@ return R.ok(waitPakinService.mergeItems(waitPakin)); } @PreAuthorize("hasAuthority('manager:waitPakin:update')") @ApiOperation("组拖解绑") @PostMapping("/waitPakin/unbind") public R pakinUnBind(@RequestBody WaitPakinParam param) { if (Objects.isNull(param)) { return R.error("参数不能为空!!"); } if (StringUtils.isBlank(param.getBarcode())) { return R.error("托盘码不能为空!!"); } if (Objects.isNull(param.getItems()) || param.getItems().isEmpty()) { return R.error("跟踪码不能为空!!"); } return R.ok(waitPakinService); } } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrder.java
@@ -1,8 +1,12 @@ package com.vincent.rsf.server.manager.entity; import java.text.SimpleDateFormat; import java.util.Date; import java.util.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.server.system.constant.DictTypeCode; import com.vincent.rsf.server.system.entity.DictData; import com.vincent.rsf.server.system.service.DictDataService; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import com.baomidou.mybatisplus.annotation.TableLogic; @@ -208,6 +212,31 @@ // null // 备注 // ); public String getType$(){ if (Cools.isEmpty(this.type)){ return ""; } DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_ORDER_TYPE).eq(DictData::getValue, this.type)); if (Objects.isNull(dictData)) { return null; } return dictData.getLabel(); } public String getWkType$(){ if (Cools.isEmpty(this.wkType)){ return ""; } DictDataService dictDataService = SpringUtils.getBean(DictDataService.class); DictData dictData = dictDataService.getOne(new LambdaQueryWrapper<DictData>().eq(DictData::getDictTypeCode, DictTypeCode.DICT_SYS_BUSINESS_TYPE).eq(DictData::getValue, this.wkType)); if (Objects.isNull(dictData)) { return null; } return dictData.getLabel(); } public String getArrTime$(){ if (Cools.isEmpty(this.arrTime)){ return ""; rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItem.java
@@ -120,6 +120,11 @@ private Double purQty; /** * 库存批次 */ @ApiModelProperty("库存批次") private String batch; /** * 采购单位 */ @ApiModelProperty(value= "采购单位") rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderItemLog.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.annotation.TableLogic; import java.text.SimpleDateFormat; import java.util.Date; import lombok.experimental.Accessors; import org.springframework.format.annotation.DateTimeFormat; import java.text.SimpleDateFormat; import java.util.Date; @@ -22,6 +24,7 @@ import java.util.Date; @Data @Accessors(chain = true) @TableName("man_asn_order_item_log") public class AsnOrderItemLog implements Serializable { @@ -34,6 +37,9 @@ @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("Item ID") private Long asnItemId; /** * ASN主单标识 */ rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/AsnOrderLog.java
@@ -36,6 +36,9 @@ @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("主单ID") private Long asnId; /** * 编号 */ rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WaitPakinItem.java
@@ -47,7 +47,7 @@ * 订单ID */ @ApiModelProperty(value= "订单ID") private Long ansId; private Long asnId; /** * 订单编码 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderItemServiceImpl.java
@@ -103,15 +103,24 @@ @Override public boolean fieldsSave(Map<String, Object> params) { //保存扩展字段 ExtendFieldsUtils.saveFields(params); AsnOrderItem asnOrderItem = JSONObject.parseObject(JSONObject.toJSONString(params), AsnOrderItem.class); if (StringUtils.isBlank(asnOrderItem.getTrackCode())) { SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, params); String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_LABEL_CODE, asnOrderItem); asnOrderItem.setTrackCode(ruleCode); } if (StringUtils.isBlank(asnOrderItem.getBatch())) { String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_STOCK_BATCH_CODE, asnOrderItem); asnOrderItem.setBatch(ruleCode); } if (!this.saveOrUpdate(asnOrderItem)) { throw new CoolException("收货通知单明细保存失败!!"); } //保存扩展字段 try { ExtendFieldsUtils.saveFields(params); } catch (Exception e) { throw new RuntimeException(e); } return true; } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/AsnOrderServiceImpl.java
@@ -44,10 +44,8 @@ private ReportMsgService reportMsgService; @Resource private PurchaseMapper purchaseMapper; @Autowired private AsnOrderItemService asnOrderItemService; @Resource private SerialRuleMapper serialRuleMapper; @@ -67,7 +65,6 @@ return false; } } @Override public List<AsnOrder> getListByMatnr(Map<String, String> params) { @@ -92,7 +89,9 @@ throw new CoolException("主单信息不能为空"); } AsnOrder orders = params.getOrders(); if (Objects.isNull(orders)) { throw new CoolException("单据不能为空!!"); } String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_ASN_ORDER, orders); if (Objects.isNull(ruleCode)) { throw new CoolException("收货通知单编码生成失败!!"); @@ -111,7 +110,6 @@ if (!asnOrderItemService.fieldsSave(item)) { throw new CoolException("明细保存失败!!"); } }); return R.ok("保存成功!!"); } @@ -130,7 +128,7 @@ if (Objects.isNull(params.getOrders().getId())) { throw new CoolException("数据错误:单据ID不能为空!!"); } if (this.updateById(params.getOrders())) { if (!this.updateById(params.getOrders())) { throw new CoolException("主单修改失败!!"); } if (Objects.isNull(params.getItems()) || params.getItems().isEmpty()) { @@ -138,7 +136,7 @@ } List<Map<String, Object>> items = params.getItems(); List<AsnOrderItem> asnOrderItems = JSONArray.parseArray(JSONArray.toJSONString(items), AsnOrderItem.class); if (asnOrderItemService.saveOrUpdateBatch(asnOrderItems)) { if (!asnOrderItemService.saveOrUpdateBatch(asnOrderItems)) { throw new CoolException("明细修改失败!!"); } return R.ok("修改完成!!"); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -83,8 +83,12 @@ WaitPakinItem pakinItem = new WaitPakinItem(); pakinItem.setAnfme(item.getAnfme()) .setPakinId(pakin.getId()) .setAnsId(item.getAsnId()) .setAsnId(item.getAsnId()) .setAsnCode(item.getAsnCode()) .setAsnItemId(item.getId()) .setMatnrCode(item.getMatnrCode()) .setBatch(item.getSplrBatch()) .setUnit(item.getStockUnit()) .setBatch(item.getSplrBatch()) .setFieldsIndex(item.getFieldsIndex()) .setUnit(item.getStockUnit()) @@ -98,7 +102,7 @@ .setAnfme(waitPakinItem.getQty()) .setTrackCode(waitPakinItem.getTrackCode()); /**更新单据执行中库存*/ if (v.compareTo(item.getQty()) > 0) {throw new CoolException("执行中数量大于收货数量!!");} if (v.compareTo(item.getAnfme()) > 0) {throw new CoolException("执行中数量大于收货数量!!");} if (!asnOrderItemService.update(new LambdaUpdateWrapper<AsnOrderItem>() .eq(AsnOrderItem::getTrackCode, waitPakinItem.getTrackCode()).set(AsnOrderItem::getWorkQty, v))) { throw new CoolException("执行中库存更新失败!!"); rsf-server/src/main/java/com/vincent/rsf/server/system/constant/DictTypeCode.java
@@ -24,4 +24,14 @@ */ public final static String DICT_SYS_DEVICE_TYPE = "sys_device_type"; /** * 单据业务类型 */ public final static String DICT_SYS_BUSINESS_TYPE = "sys_business_type"; /** * 单据类型 */ public final static String DICT_SYS_ORDER_TYPE = "sys_order_type"; } rsf-server/src/main/java/com/vincent/rsf/server/system/constant/SerialRuleCode.java
@@ -44,4 +44,9 @@ */ public final static String SYS_WAIT_PAKIN_CODE = "sys_wait_pakin_code"; /** * 库存批次编码规则 */ public final static String SYS_STOCK_BATCH_CODE = "sys_stock_batch_code"; } rsf-server/src/main/java/com/vincent/rsf/server/system/utils/ExtendFieldsUtils.java
@@ -28,7 +28,7 @@ * @return * @time 2025/3/15 13:36 */ public static Boolean saveFields(Map<String, Object> params) { public static Boolean saveFields(Map<String, Object> params) throws Exception{ FieldsService fieldsService = SpringUtils.getBean(FieldsService.class); List<Fields> fields = fieldsService.list(new LambdaQueryWrapper<Fields>() .eq(Fields::getStatus, 1)