Commit b52b4b8b1dacd5b12e8e9226d99a6f7c7db863b8

Authored by 肖超群
1 parent 7d84d1e9

增加越库功能

ant-design-vue-jeecg/src/api/api.js
... ... @@ -260,6 +260,8 @@ export const callShipmentBox = (params) => postAction('/shipment/shipmentHeader/
260 260 export const listReceiveByReceiveId = (params) => postAction('/receipt/receiveHeader/listReceiveByReceiveId', params);
261 261 //收货
262 262 export const receive = (params) => postAction('/receipt/receiveHeader/receive', params);
  263 +//越库
  264 +export const crossDocking = (params) => postAction('/receipt/receiptHeader/crossDocking?id=' + params, params);
263 265 // 中转HTTP请求
264 266 export const transitRESTful = {
265 267 get: (url, parameter) => getAction(getTransitURL(url), parameter),
... ...
ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue
... ... @@ -178,6 +178,11 @@
178 178 <span slot="action" slot-scope="text, record">
179 179 <a-popconfirm v-has="'receiptHeader:back'" v-if="record.lastStatus == 800" title="确定回传吗?" @confirm="() => hanleBack(record)">
180 180 <a><a-button type="default">回传</a-button></a>
  181 + <a-divider type="vertical"/>
  182 + </a-popconfirm>
  183 + <a-popconfirm v-has="'receiptHeader:crossDocking'" v-if="record.lastStatus == 0" title="确定越库吗?" @confirm="() => hanleCross(record)">
  184 + <a><a-button type="primary">越库</a-button></a>
  185 + <a-divider type="vertical"/>
181 186 </a-popconfirm>
182 187 <a v-if="(record.lastStatus < 800 && record.firstStatus >= 15 && record.firstStatus != '20') || (flowOff == '0' && record.lastStatus < 800) " @click="receive(record)" v-has="'receiptHeader:receive'">
183 188 <a-button type="primary">组盘</a-button>
... ... @@ -230,7 +235,7 @@ import {initDictOptions, filterMultiDictText} from &#39;@/components/dict/JDictSelec
230 235 import '@/assets/less/TableExpand.less'
231 236 import {getCompanyList} from '@/api/api'
232 237 import {getReceiptTypeList} from '@/api/api'
233   -import {getSupplierList, backErpReceipt,createReceiptAuditFlow,getDocumentAduitFlow} from '@/api/api'
  238 +import {getSupplierList, backErpReceipt,createReceiptAuditFlow,getDocumentAduitFlow, crossDocking} from '@/api/api'
234 239 import ReceiptModal from "./modules/ReceiptModal";
235 240 import { notification } from 'ant-design-vue';
236 241 import FlowProcess from "../flow/FlowProcess";
... ... @@ -537,6 +542,16 @@ export default {
537 542 this.searchQuery();
538 543 });
539 544 },
  545 + hanleCross(record) {
  546 + crossDocking(record.id).then((res) => {
  547 + if (res.success) {
  548 + this.$message.success(res.message);
  549 + } else {
  550 + this.$message.warning(res.message);
  551 + }
  552 + this.searchQuery();
  553 + });
  554 + },
540 555 loadFrom() {
541 556 getCompanyList().then((res) => {
542 557 if (res.success) {
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/controller/ReceiptHeaderController.java
... ... @@ -403,4 +403,13 @@ public class ReceiptHeaderController extends JeecgController&lt;ReceiptHeader, IRec
403 403 }
404 404 return result;
405 405 }
  406 +
  407 + @AutoLog(value = "越库")
  408 + @ApiOperation(value = "越库", notes = "越库")
  409 + @PostMapping("/crossDocking")
  410 + @ResponseBody
  411 + @ApiLogger(apiName = "越库", from = "WMS")
  412 + public Result<?> crossDocking(@RequestParam(name = "id", required = true) String id, HttpServletRequest req) {
  413 + return receiptHeaderService.crossDocking(id);
  414 + }
406 415 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/IReceiptHeaderService.java
... ... @@ -41,4 +41,5 @@ public interface IReceiptHeaderService extends IService&lt;ReceiptHeader&gt; {
41 41  
42 42 String createReceiptCode(String receiptType);
43 43  
  44 + Result crossDocking(String id);
44 45 }
... ...
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/receipt/receiptHeader/service/impl/ReceiptHeaderServiceImpl.java
... ... @@ -3,6 +3,7 @@ package org.jeecg.modules.wms.receipt.receiptHeader.service.impl;
3 3 import java.io.Serializable;
4 4 import java.math.BigDecimal;
5 5 import java.text.SimpleDateFormat;
  6 +import java.util.ArrayList;
6 7 import java.util.Collection;
7 8 import java.util.Date;
8 9 import java.util.List;
... ... @@ -15,6 +16,8 @@ import org.jeecg.modules.wms.audit.service.IAuditService;
15 16 import org.jeecg.modules.wms.config.receiptType.entity.ReceiptType;
16 17 import org.jeecg.modules.wms.config.receiptType.service.IReceiptTypeService;
17 18 import org.jeecg.modules.wms.flow.service.IFlowDetailService;
  19 +import org.jeecg.modules.wms.inventory.inventoryTransaction.entity.InventoryTransaction;
  20 +import org.jeecg.modules.wms.inventory.inventoryTransaction.service.IInventoryTransactionService;
18 21 import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail;
19 22 import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader;
20 23 import org.jeecg.modules.wms.receipt.receiptHeader.mapper.ReceiptDetailMapper;
... ... @@ -29,6 +32,7 @@ import org.springframework.stereotype.Service;
29 32 import org.springframework.transaction.annotation.Transactional;
30 33  
31 34 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  35 +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
32 36 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
33 37 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
34 38  
... ... @@ -60,6 +64,8 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl&lt;ReceiptHeaderMapper, R
60 64 private IFlowDetailService iFlowDetailService;
61 65 @Resource
62 66 private IAuditService iAuditService;
  67 + @Resource
  68 + private IInventoryTransactionService inventoryTransactionService;
63 69  
64 70 /**
65 71 * @param id 入库单主表id
... ... @@ -148,6 +154,72 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl&lt;ReceiptHeaderMapper, R
148 154 return code;
149 155 }
150 156  
  157 + @Override
  158 + @Transactional(rollbackFor = Exception.class)
  159 + public Result crossDocking(String id) {
  160 + ReceiptHeader receiptHeader = receiptHeaderService.getById(id);
  161 + if (receiptHeader == null) {
  162 + return Result.error("越库失败,没有找到入库单头" + id);
  163 + }
  164 + List<ReceiptDetail> receiptDetailList = receiptDetailService.selectByMainId(id);
  165 + if (CollectionUtils.isEmpty(receiptDetailList)) {
  166 + return Result.error("越库失败,没有找到入库详情" + id);
  167 + }
  168 + List<InventoryTransaction> inventoryTransactionList = new ArrayList<>();
  169 + for (ReceiptDetail receiptDetail : receiptDetailList) {
  170 + BigDecimal qty = receiptDetail.getQty();
  171 + receiptDetail.setTaskQty(qty);
  172 + receiptDetail.setReceiptQty(qty);
  173 + receiptDetail.setStatus(QuantityConstant.RECEIPT_HEADER_COMPLETED);
  174 + InventoryTransaction inventoryTransaction = new InventoryTransaction();
  175 + inventoryTransaction.setType(QuantityConstant.INVENTORY_TRANSACTION_RECEIPT);
  176 + inventoryTransaction.setWarehouseCode(receiptDetail.getWarehouseCode());
  177 + inventoryTransaction.setCompanyCode(receiptDetail.getCompanyCode());
  178 + inventoryTransaction.setMaterialCode(receiptDetail.getMaterialCode());
  179 + inventoryTransaction.setMaterialName(receiptDetail.getMaterialName());
  180 + inventoryTransaction.setMaterialSpec(receiptDetail.getMaterialSpec());
  181 + inventoryTransaction.setMaterialUnit(receiptDetail.getMaterialUnit());
  182 + inventoryTransaction.setReceiptId(receiptDetail.getReceiptId());
  183 + inventoryTransaction.setReceiptCode(receiptHeader.getCode());
  184 + inventoryTransaction.setReceiptType(receiptHeader.getType());
  185 + inventoryTransaction.setReceiptDetailId(receiptDetail.getId());
  186 + inventoryTransaction.setBatch(receiptDetail.getBatch());
  187 + inventoryTransaction.setLot(receiptDetail.getLot());
  188 + inventoryTransaction.setProject(receiptDetail.getProject());
  189 + inventoryTransaction.setInventoryStatus(receiptDetail.getInventoryStatus());
  190 + inventoryTransaction.setQty(qty);
  191 + inventoryTransaction.setReceiptQty(qty);
  192 + inventoryTransactionList.add(inventoryTransaction);
  193 +
  194 + inventoryTransaction = new InventoryTransaction();
  195 + inventoryTransaction.setType(QuantityConstant.INVENTORY_TRANSACTION_SHIPMENT);
  196 + inventoryTransaction.setWarehouseCode(receiptDetail.getWarehouseCode());
  197 + inventoryTransaction.setCompanyCode(receiptDetail.getCompanyCode());
  198 + inventoryTransaction.setMaterialCode(receiptDetail.getMaterialCode());
  199 + inventoryTransaction.setMaterialName(receiptDetail.getMaterialName());
  200 + inventoryTransaction.setMaterialSpec(receiptDetail.getMaterialSpec());
  201 + inventoryTransaction.setMaterialUnit(receiptDetail.getMaterialUnit());
  202 + inventoryTransaction.setInventoryStatus(receiptDetail.getInventoryStatus());
  203 + inventoryTransaction.setBatch(receiptDetail.getBatch());
  204 + inventoryTransaction.setLot(receiptDetail.getLot());
  205 + inventoryTransaction.setProject(receiptDetail.getProject());
  206 + inventoryTransaction.setQty(receiptDetail.getQty());
  207 + inventoryTransaction.setShipmentQty(receiptDetail.getQty());
  208 + inventoryTransactionList.add(inventoryTransaction);
  209 + }
  210 +
  211 + if (!receiptDetailService.updateBatchById(receiptDetailList)) {
  212 + throw new JeecgBootException("越库失败,批量更新入库单详情失败");
  213 + }
  214 + if (!inventoryTransactionService.saveBatch(inventoryTransactionList)) {
  215 + throw new JeecgBootException("越库失败,批量保存库存交易记录失败");
  216 + }
  217 + if (!receiptHeaderService.updateReceiptHeaderStatus(Integer.parseInt(id))) {
  218 + throw new JeecgBootException("越库失败,批更新入库单失败");
  219 + }
  220 + return Result.ok("越库成功");
  221 + }
  222 +
151 223 /**
152 224 * 更新入库单 头状态和尾状态
153 225 * 头状态是单据详情中最大的状态
... ...