Commit b52b4b8b1dacd5b12e8e9226d99a6f7c7db863b8
1 parent
7d84d1e9
增加越库功能
Showing
5 changed files
with
100 additions
and
1 deletions
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 '@/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<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
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<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<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 | * 头状态是单据详情中最大的状态 |
... | ... |