Commit 3a0d3b0c64c03976214422a5fdc04b4d1398d927

Authored by mahuandong
2 parents 88131588 b1f781d4

Merge remote-tracking branch 'origin/develop' into develop

src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java
... ... @@ -266,6 +266,36 @@ public class MobileBatchReceiptController {
266 266 throw new JSONException("没有找到入库单");
267 267 }
268 268  
  269 + LambdaQueryWrapper<ReceiptContainerHeader> lambda = Wrappers.lambdaQuery();
  270 + lambda.eq(ReceiptContainerHeader::getContainerCode, containerCode)
  271 + .lt(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_FINISHED);
  272 + List<ReceiptContainerHeader> list = receiptContainerHeaderService.list(lambda);
  273 + if (list.size() >= 1){
  274 + throw new ServiceException("容器已经生成任务,不能放物料了!");
  275 + }
  276 + ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader();
  277 + //如果不存在记录则新建记录
  278 + receiptContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode());
  279 + receiptContainerHeader.setCompanyCode(companyCode);
  280 + receiptContainerHeader.setContainerCode(containerCode);
  281 + Container container2 = containerService.findAllByCode(containerCode);
  282 + receiptContainerHeader.setContainerType(container2.getContainerType());
  283 + receiptContainerHeader.setTaskType(String.valueOf(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT));
  284 + receiptContainerHeader.setFromLocation(container2.getLocationCode());
  285 + receiptContainerHeader.setToLocation(locationCode);
  286 + receiptContainerHeader.setCreatedBy(ShiroUtils.getLoginName());
  287 + receiptContainerHeader.setLastUpdatedBy(ShiroUtils.getLoginName());
  288 + receiptContainerHeader.setStatus((short)10);
  289 +
  290 + if (!receiptContainerHeaderService.save(receiptContainerHeader)){
  291 + throw new ServiceException("入库组盘头表保存失败");
  292 + }
  293 +
  294 + receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
  295 + receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING);
  296 + receiptHeaderService.update(receiptHeader, receiptHeaderQueryWrapper);
  297 +
  298 +
269 299 for(ReceiptBill receiptBill : receiptBills) {
270 300  
271 301 TaskDetail taskDetail = new TaskDetail();
... ... @@ -304,6 +334,33 @@ public class MobileBatchReceiptController {
304 334  
305 335 receiptDetail2.setOpenQty(qty);
306 336 receiptDetailService.update(receiptDetail2, receiptDetail2QueryWrapper);
  337 +
  338 + ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail();
  339 + receiptContainerDetail.setReceiptContainerId(receiptContainerHeader.getId());
  340 + receiptContainerDetail.setWarehouseCode(ShiroUtils.getWarehouseCode());
  341 + receiptContainerDetail.setReceiptId(receiptHeader.getId());
  342 + receiptContainerDetail.setReceiptDetailId(receiptDetail2.getId());
  343 + receiptContainerDetail.setReceiptCode(receiptHeader.getCode());
  344 + receiptContainerDetail.setReceiptType(receiptHeader.getReceiptType());
  345 + receiptContainerDetail.setLocationCode(locationCode);
  346 + receiptContainerDetail.setContainerCode(containerCode);
  347 + receiptContainerDetail.setContainerType(container.getContainerType());
  348 + receiptContainerDetail.setCompanyCode(companyCode);
  349 +
  350 + LambdaQueryWrapper<Material> materialQueryWrapper = Wrappers.lambdaQuery();
  351 + materialQueryWrapper.eq(Material::getCode, receiptBill.getMaterialCode())
  352 + .eq(Material::getDeleted, 0);
  353 + Material material = materialService.getOne(materialQueryWrapper);
  354 +
  355 + receiptContainerDetail.setMaterialCode(material.getCode());
  356 + receiptContainerDetail.setMaterialName(material.getName());
  357 + receiptContainerDetail.setMaterialSpec(material.getSpec());
  358 + receiptContainerDetail.setMaterialUnit(material.getUnit());
  359 + receiptContainerDetail.setQty(receiptBill.getQty());
  360 + receiptContainerDetail.setStatus(10);
  361 + receiptContainerDetail.setCreatedBy(ShiroUtils.getLoginName());
  362 + receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName());
  363 + receiptContainerDetailService.save(receiptContainerDetail);
307 364 }
308 365  
309 366 } else {
... ... @@ -450,7 +507,7 @@ public class MobileBatchReceiptController {
450 507 container.setWarehouseCode(ShiroUtils.getWarehouseCode());
451 508 LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(container);
452 509 container = containerService.getOne(lambdaQueryWrapper);
453   - if(container==null) {
  510 + if(container == null) {
454 511 return AjaxResult.error("容器不存在");
455 512 }
456 513 if (!StringUtils.isNotEmpty(container.getLocationCode())) {
... ... @@ -475,7 +532,7 @@ public class MobileBatchReceiptController {
475 532 }
476 533 //判断托盘是否已经存在任务
477 534 LambdaQueryWrapper<TaskHeader> headerQueryWrapper = Wrappers.lambdaQuery();
478   - headerQueryWrapper.ne(TaskHeader::getStatus, 100)
  535 + headerQueryWrapper.ne(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED.intValue())
479 536 .eq(TaskHeader::getContainerCode, containerCode);
480 537 Integer taskCount = taskHeaderService.count(headerQueryWrapper);
481 538 if (taskCount != null && taskCount.intValue() > 0) {
... ... @@ -486,7 +543,7 @@ public class MobileBatchReceiptController {
486 543 TaskHeader taskHeader = new TaskHeader();
487 544 taskHeader.setWarehouseCode(loc.getWarehouseCode());
488 545 taskHeader.setCompanyCode(companyCode);//货主
489   - if(type == 200) {
  546 + if(type == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT.intValue()) {
490 547 taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_SHELF);
491 548 taskHeader.setTaskType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT);
492 549 } else {
... ... @@ -526,6 +583,7 @@ public class MobileBatchReceiptController {
526 583 LambdaQueryWrapper<ReceiptHeader> receiptHeaderQueryWrapper = Wrappers.lambdaQuery();
527 584 receiptHeaderQueryWrapper.eq(ReceiptHeader::getCompanyCode, companyCode)
528 585 .eq(ReceiptHeader::getWarehouseCode, ShiroUtils.getWarehouseCode())
  586 + .ne(ReceiptHeader::getReceiptType, "PPI")
529 587 .le(ReceiptHeader::getCreated, now)
530 588 .gt(ReceiptHeader::getCreated, start)
531 589 .orderByDesc(ReceiptHeader::getCreated);
... ...
src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java
... ... @@ -494,6 +494,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl&lt;ReceiptContai
494 494 recorder.setTaskType(String.valueOf(QuantityConstant.TASK_TYPE_WHOLERECEIPT));
495 495 recorder.setStatus((short) 0);
496 496 recorder.setCreatedBy(ShiroUtils.getLoginName());
  497 + recorder.setLastUpdatedBy(ShiroUtils.getLoginName());
497 498  
498 499 LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambada = Wrappers.lambdaQuery();
499 500 receiptContainerHeaderLambada.eq(ReceiptContainerHeader::getContainerCode, receiptContainerCode)
... ...
src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
... ... @@ -580,8 +580,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
580 580 cycleCountDetailService.updataDetailStatus(item.getBillDetailId(), QuantityConstant.CYCLECOUNT_STATUS_EXECUTING);
581 581 }
582 582 }
583   - if (!taskDetailService.saveOrUpdateBatch(taskDetails)) {
584   - throw new ServiceException("更新任务明细失败");
  583 + if(taskDetails != null && taskDetails.size() > 0) {
  584 + if (!taskDetailService.saveOrUpdateBatch(taskDetails)) {
  585 + throw new ServiceException("更新任务明细失败");
  586 + }
585 587 }
586 588  
587 589 // //修改入库明细
... ... @@ -675,7 +677,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
675 677 if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_SHELF) ) {
676 678 //入库任务
677 679 this.completeReceiptTask(task);
678   -// combineInventory(task);
  680 + combineInventory(task);
679 681 }
680 682 if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_PICKING) &&
681 683 (task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT))) {
... ... @@ -717,7 +719,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
717 719 }
718 720 LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery();
719 721 inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode())
720   - .eq(InventoryHeader::getLocationCode, task.getFromLocation())
  722 + .eq(InventoryHeader::getLocationCode, task.getToLocation())
721 723 .eq(InventoryHeader::getContainerCode, task.getContainerCode());
722 724 InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper);
723 725  
... ... @@ -745,12 +747,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
745 747 //将未完成的任务数量更新到库存表
746 748 if (DataUtils.getInteger(map.get("status")) < QuantityConstant.TASK_STATUS_COMPLETED) {
747 749  
748   -
749 750 LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery();
750 751 inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode())
751   - .eq(InventoryDetail::getLocationCode, task.getFromLocation())
  752 + .eq(InventoryDetail::getLocationCode, task.getToLocation())
752 753 .eq(InventoryDetail::getMaterialCode, DataUtils.getString(map.get("materialCode")))
753   - .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode")));
  754 + .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode")))
  755 + .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("batch")));
754 756 InventoryDetail detail = inventoryDetailService.getOne(inventory);
755 757 if (detail == null) {
756 758 //库存明细添加
... ... @@ -890,21 +892,41 @@ public class TaskHeaderServiceImpl extends ServiceImpl&lt;TaskHeaderMapper, TaskHea
890 892 return AjaxResult.success("完成入库任务");
891 893 }
892 894  
893   -// private void combineInventory(TaskHeader task) {
894   -// LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery();
895   -// inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode())
896   -// .eq(InventoryHeader::getLocationCode, task.getFromLocation())
897   -// .eq(InventoryHeader::getContainerCode, task.getContainerCode());
898   -// InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper);
899   -// if(header != null) {
900   -// LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery();
901   -// inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode())
902   -// .eq(InventoryDetail::getLocationCode, task.getFromLocation())
903   -// .eq(InventoryDetail::getMaterialCode, DataUtils.getString(map.get("materialCode")))
904   -// .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode")));
905   -// List<InventoryDetail> detail = inventoryDetailService.list(inventory);
906   -// }
907   -// }
  895 + @Transactional(rollbackFor = Exception.class)
  896 + public void combineInventory(TaskHeader task) {
  897 + LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery();
  898 + inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode())
  899 + .eq(InventoryHeader::getLocationCode, task.getToLocation())
  900 + .eq(InventoryHeader::getContainerCode, task.getContainerCode());
  901 + InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper);
  902 + if(header != null) {
  903 + LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery();
  904 + inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode())
  905 + .eq(InventoryDetail::getLocationCode, task.getFromLocation())
  906 + .eq(InventoryDetail::getContainerCode, task.getContainerCode());
  907 + List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventory);
  908 + for(int i=0; i < inventoryDetailList.size() -1; i++) {
  909 + for(int j = inventoryDetailList.size() - 1; j > i; j--) {
  910 + if(inventoryDetailList.get(i).getMaterialCode().equals(inventoryDetailList.get(j).getMaterialCode())) {
  911 + BigDecimal totalQty = inventoryDetailList.get(i).getQty().add(inventoryDetailList.get(j).getQty());
  912 + inventoryDetailList.get(i).setQty(totalQty);
  913 + inventoryDetailList.remove(j);
  914 + LambdaQueryWrapper<InventoryDetail> wrapper = Wrappers.lambdaQuery();
  915 + wrapper.eq(InventoryDetail::getId, inventoryDetailList.get(i).getId());
  916 + inventoryDetailService.update(inventoryDetailList.get(i), wrapper);
  917 + }
  918 + }
  919 + }
  920 + BigDecimal totalQty = new BigDecimal(0);
  921 + for(InventoryDetail inventoryDetail : inventoryDetailList) {
  922 + totalQty = totalQty.add(inventoryDetail.getQty());
  923 + }
  924 + header.setTotalQty(totalQty);
  925 + LambdaQueryWrapper<InventoryHeader> wrapper = Wrappers.lambdaQuery();
  926 + wrapper.eq(InventoryHeader::getId, header.getId());
  927 + inventoryHeaderService.update(header, wrapper);
  928 + }
  929 + }
908 930  
909 931 /**
910 932 * 移动端创建入库任务
... ...
src/main/resources/application.yml
... ... @@ -33,6 +33,7 @@ server:
33 33 buffer-size: 1024
34 34 # 是否分配的直接内存
35 35 direct-buffers: true
  36 + port: 8888
36 37  
37 38 # 用户配置
38 39 user:
... ...
src/main/resources/templates/receipt/receiptDetail/add.html
... ... @@ -25,7 +25,7 @@
25 25 </div>
26 26 </div>
27 27 <div class="form-group">
28   - <label class="col-sm-3 control-label">数量:</label>
  28 + <label class="col-sm-3 control-label">数量:</label>
29 29 <div class="col-sm-8">
30 30 <input id="totalQty" name="totalQty" class="form-control" type="text">
31 31 </div>
... ... @@ -134,7 +134,7 @@
134 134 <!--</div>-->
135 135 <div class="form-group">
136 136 <div class="form-control-static col-sm-offset-9">
137   - <button type="submit" class="btn btn-primary" >提交</button>
  137 + <button type="submit" class="btn btn-primary" >提交</button>
138 138 <button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button>
139 139 </div>
140 140 </div>
... ... @@ -160,13 +160,54 @@
160 160 }
161 161 },
162 162 submitHandler: function(form) {
163   - var tableValue = $("#form-receiptDetail-add").serialize();
164   - tableValue = formValueReplace(tableValue, "inventorySts", $("#inventorySts option:selected").val());
165   - tableValue = formValueReplace(tableValue, "qcCheck", $("#qcCheck option:selected").val());
166   - $.operate.save(prefix + "/add", tableValue);
  163 + $.ajax({
  164 + cache : true,
  165 + type : "POST",
  166 + url : prefix + "/add",
  167 + data : {
  168 + "receiptId": $("input[name='receiptId']").val(),
  169 + "receiptCode": $("input[name='receiptCode']").val(),
  170 + "companyId": $("input[name='companyId']").val(),
  171 + "companyCode": $("input[name='companyCode']").val(),
  172 + "sourceLine": $("input[name='sourceLine']").val(),
  173 + // "materialId": $("input[name='materialId']").val(),
  174 + "materialCode": $("input[name='materialCode']").val(),
  175 + "batch": $("input[name='batch']").val(),
  176 + "lot": $("input[name='lot']").val(),
  177 + "project": $("input[name='project']").val(),
  178 + "manufactureDate": $("input[name='manufactureDate']").val(),
  179 + "expirationDate": $("input[name='expirationDate']").val(),
  180 + "inventorySts": $("#inventorySts option:selected").val(),
  181 + "totalQty": $("input[name='totalQty']").val(),
  182 + "price": $("input[name='price']").val(),
  183 + // "userDef1": $("input[name='userDef1']").val(),
  184 + // "userDef2": $("input[name='userDef2']").val(),
  185 + // "userDef3": $("input[name='userDef3']").val()
  186 + },
  187 + async : false,
  188 + error : function(request) {
  189 + $.modal.alertError("请求失败!");
  190 + },
  191 + success : function(data) {
  192 + // $.operate.saveSuccess(data);
  193 + ajaxSuccess(data);
  194 + }
  195 + });
167 196 }
168 197 });
169 198  
  199 + function ajaxSuccess(result) {
  200 + if (result.code == web_status.SUCCESS) {
  201 + $.modal.msgSuccess(result.msg);
  202 + var index = parent.layer.getFrameIndex(window.name);
  203 + parent.layer.close(index);
  204 + window.parent.loadDetail();
  205 + } else {
  206 + $.modal.alertError(result.msg);
  207 + }
  208 + $.modal.closeLoading();
  209 + }
  210 +
170 211 $(function () {
171 212 layui.use('laydate', function() {
172 213 var laydate = layui.laydate;
... ...
src/main/resources/templates/receipt/receiptHeader/add.html
... ... @@ -8,7 +8,7 @@
8 8 <div class="form-group">
9 9 <label class="col-sm-3 control-label">入库类型:</label>
10 10 <div class="col-sm-8">
11   - <select id="receiptType" name="receiptType" class="form-control" th:with="receiptHeaderType=${@receiptTypeService.getType()}">
  11 + <select id="receiptType" name="receiptType" class="form-control" th:with="receiptHeaderType=${@receiptTypeService.getType()}">
12 12 <option th:each="dict : ${receiptHeaderType}" th:text="${dict['name']}" th:value="${dict['code']}"></option>
13 13 </select>
14 14 </div>
... ...