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,6 +260,8 @@ export const callShipmentBox = (params) => postAction('/shipment/shipmentHeader/ | ||
260 | export const listReceiveByReceiveId = (params) => postAction('/receipt/receiveHeader/listReceiveByReceiveId', params); | 260 | export const listReceiveByReceiveId = (params) => postAction('/receipt/receiveHeader/listReceiveByReceiveId', params); |
261 | //收货 | 261 | //收货 |
262 | export const receive = (params) => postAction('/receipt/receiveHeader/receive', params); | 262 | export const receive = (params) => postAction('/receipt/receiveHeader/receive', params); |
263 | +//越库 | ||
264 | +export const crossDocking = (params) => postAction('/receipt/receiptHeader/crossDocking?id=' + params, params); | ||
263 | // 中转HTTP请求 | 265 | // 中转HTTP请求 |
264 | export const transitRESTful = { | 266 | export const transitRESTful = { |
265 | get: (url, parameter) => getAction(getTransitURL(url), parameter), | 267 | get: (url, parameter) => getAction(getTransitURL(url), parameter), |
ant-design-vue-jeecg/src/views/system/receipt/ReceiptHeaderList.vue
@@ -178,6 +178,11 @@ | @@ -178,6 +178,11 @@ | ||
178 | <span slot="action" slot-scope="text, record"> | 178 | <span slot="action" slot-scope="text, record"> |
179 | <a-popconfirm v-has="'receiptHeader:back'" v-if="record.lastStatus == 800" title="确定回传吗?" @confirm="() => hanleBack(record)"> | 179 | <a-popconfirm v-has="'receiptHeader:back'" v-if="record.lastStatus == 800" title="确定回传吗?" @confirm="() => hanleBack(record)"> |
180 | <a><a-button type="default">回传</a-button></a> | 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 | </a-popconfirm> | 186 | </a-popconfirm> |
182 | <a v-if="(record.lastStatus < 800 && record.firstStatus >= 15 && record.firstStatus != '20') || (flowOff == '0' && record.lastStatus < 800) " @click="receive(record)" v-has="'receiptHeader:receive'"> | 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 | <a-button type="primary">组盘</a-button> | 188 | <a-button type="primary">组盘</a-button> |
@@ -230,7 +235,7 @@ import {initDictOptions, filterMultiDictText} from '@/components/dict/JDictSelec | @@ -230,7 +235,7 @@ import {initDictOptions, filterMultiDictText} from '@/components/dict/JDictSelec | ||
230 | import '@/assets/less/TableExpand.less' | 235 | import '@/assets/less/TableExpand.less' |
231 | import {getCompanyList} from '@/api/api' | 236 | import {getCompanyList} from '@/api/api' |
232 | import {getReceiptTypeList} from '@/api/api' | 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 | import ReceiptModal from "./modules/ReceiptModal"; | 239 | import ReceiptModal from "./modules/ReceiptModal"; |
235 | import { notification } from 'ant-design-vue'; | 240 | import { notification } from 'ant-design-vue'; |
236 | import FlowProcess from "../flow/FlowProcess"; | 241 | import FlowProcess from "../flow/FlowProcess"; |
@@ -537,6 +542,16 @@ export default { | @@ -537,6 +542,16 @@ export default { | ||
537 | this.searchQuery(); | 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 | loadFrom() { | 555 | loadFrom() { |
541 | getCompanyList().then((res) => { | 556 | getCompanyList().then((res) => { |
542 | if (res.success) { | 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,4 +403,13 @@ public class ReceiptHeaderController extends JeecgController<ReceiptHeader, IRec | ||
403 | } | 403 | } |
404 | return result; | 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<ReceiptHeader> { | @@ -41,4 +41,5 @@ public interface IReceiptHeaderService extends IService<ReceiptHeader> { | ||
41 | 41 | ||
42 | String createReceiptCode(String receiptType); | 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,6 +3,7 @@ package org.jeecg.modules.wms.receipt.receiptHeader.service.impl; | ||
3 | import java.io.Serializable; | 3 | import java.io.Serializable; |
4 | import java.math.BigDecimal; | 4 | import java.math.BigDecimal; |
5 | import java.text.SimpleDateFormat; | 5 | import java.text.SimpleDateFormat; |
6 | +import java.util.ArrayList; | ||
6 | import java.util.Collection; | 7 | import java.util.Collection; |
7 | import java.util.Date; | 8 | import java.util.Date; |
8 | import java.util.List; | 9 | import java.util.List; |
@@ -15,6 +16,8 @@ import org.jeecg.modules.wms.audit.service.IAuditService; | @@ -15,6 +16,8 @@ import org.jeecg.modules.wms.audit.service.IAuditService; | ||
15 | import org.jeecg.modules.wms.config.receiptType.entity.ReceiptType; | 16 | import org.jeecg.modules.wms.config.receiptType.entity.ReceiptType; |
16 | import org.jeecg.modules.wms.config.receiptType.service.IReceiptTypeService; | 17 | import org.jeecg.modules.wms.config.receiptType.service.IReceiptTypeService; |
17 | import org.jeecg.modules.wms.flow.service.IFlowDetailService; | 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 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; | 21 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptDetail; |
19 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; | 22 | import org.jeecg.modules.wms.receipt.receiptHeader.entity.ReceiptHeader; |
20 | import org.jeecg.modules.wms.receipt.receiptHeader.mapper.ReceiptDetailMapper; | 23 | import org.jeecg.modules.wms.receipt.receiptHeader.mapper.ReceiptDetailMapper; |
@@ -29,6 +32,7 @@ import org.springframework.stereotype.Service; | @@ -29,6 +32,7 @@ import org.springframework.stereotype.Service; | ||
29 | import org.springframework.transaction.annotation.Transactional; | 32 | import org.springframework.transaction.annotation.Transactional; |
30 | 33 | ||
31 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 34 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
35 | +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | ||
32 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | 36 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
33 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | 37 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
34 | 38 | ||
@@ -60,6 +64,8 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R | @@ -60,6 +64,8 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R | ||
60 | private IFlowDetailService iFlowDetailService; | 64 | private IFlowDetailService iFlowDetailService; |
61 | @Resource | 65 | @Resource |
62 | private IAuditService iAuditService; | 66 | private IAuditService iAuditService; |
67 | + @Resource | ||
68 | + private IInventoryTransactionService inventoryTransactionService; | ||
63 | 69 | ||
64 | /** | 70 | /** |
65 | * @param id 入库单主表id | 71 | * @param id 入库单主表id |
@@ -148,6 +154,72 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R | @@ -148,6 +154,72 @@ public class ReceiptHeaderServiceImpl extends ServiceImpl<ReceiptHeaderMapper, R | ||
148 | return code; | 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 | * 头状态是单据详情中最大的状态 |