浏览代码

移库入库导入

zhangyuewww 2 年之前
父节点
当前提交
a0395cf2e8

+ 10 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/WeighingManagementController.java

@@ -6,6 +6,7 @@ import com.winsea.svc.base.base.entity.CommonCompany;
 import com.winsea.svc.base.base.service.ICommonCompanyService;
 import com.winsea.svc.base.security.util.AuthSecurityUtils;
 import com.yh.saas.plugin.yiliangyiyun.entity.IdentityAuthenticationInfo;
+import com.yh.saas.plugin.yiliangyiyun.entity.QualityInspectionManagement;
 import com.yh.saas.plugin.yiliangyiyun.entity.WeighingManagement;
 import com.yh.saas.plugin.yiliangyiyun.service.IWeighingManagementService;
 import com.yh.saas.plugin.yiliangyiyun.util.QRCodeUtil;
@@ -147,5 +148,14 @@ public class WeighingManagementController {
     public String changeWarehouse(@RequestBody WeighingManagement weighingManagement) {
         return weighingManagementService.changeWarehouse(weighingManagement);
     }
+    /**
+     * 导入
+     *  @param weighingManagement
+     * @return
+     */
+    @PostMapping("/api/importWeighing")
+    public String importWeighing(@RequestBody WeighingManagement weighingManagement) {
+        return weighingManagementService.importWeighing(weighingManagement);
+    }
 }
 

+ 6 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/WeighingManagement.java

@@ -2,6 +2,7 @@ package com.yh.saas.plugin.yiliangyiyun.entity;
 
 import java.util.Date;
 import java.io.Serializable;
+import java.util.List;
 
 import com.baomidou.mybatisplus.annotations.TableField;
 import com.baomidou.mybatisplus.annotations.TableId;
@@ -423,6 +424,11 @@ public class WeighingManagement extends BaseModel<WeighingManagement> {
      */
     @TableField(exist = false)
     private String selfLoading;
+    /**
+     *list
+     */
+    @TableField(exist = false)
+    private List<WeighingManagement> weighingManagementList;
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 6 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/IWeighingManagementService.java

@@ -1,6 +1,7 @@
 package com.yh.saas.plugin.yiliangyiyun.service;
 
 import com.baomidou.mybatisplus.plugins.Page;
+import com.yh.saas.plugin.yiliangyiyun.entity.QualityInspectionManagement;
 import com.yh.saas.plugin.yiliangyiyun.entity.WeighingManagement;
 import com.baomidou.mybatisplus.service.IService;
 
@@ -85,5 +86,10 @@ public interface IWeighingManagementService extends IService<WeighingManagement>
      * @return
      */
     String changeWarehouse(WeighingManagement weighingManagement);
+    /**
+     * 移库导入
+     * @param weighingManagement
+     */
+    String importWeighing(WeighingManagement weighingManagement);
 
 }

+ 262 - 0
winsea-haixin-plugin-yiliangyiyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/WeighingManagementServiceImpl.java

@@ -9,6 +9,7 @@ import com.winsea.svc.base.base.entity.CommonStaff;
 import com.winsea.svc.base.base.service.ICommonCompanyService;
 import com.winsea.svc.base.base.service.ICommonStaffService;
 import com.winsea.svc.base.security.util.AuthSecurityUtils;
+import com.winsea.svc.base.workflow.entity.Workflow;
 import com.yh.saas.common.support.util.IdGenerator;
 import com.yh.saas.common.support.util.StringUtils;
 import com.yh.saas.plugin.yiliangyiyun.constant.StatusEnum;
@@ -24,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
@@ -67,6 +69,14 @@ public class WeighingManagementServiceImpl extends ServiceImpl<WeighingManagemen
     private QRCodeUtil qrCodeUtil;
     @Autowired
     private IStockSaleReceiptReportService stockSaleReceiptReportService;
+    @Autowired
+    private IInOutWarehouseTaskService inOutWarehouseTaskService;
+    @Autowired
+    private IContractInventoryDistributionService contractInventoryDistributionService;
+    @Autowired
+    private IWarehousePositionInfoService warehousePositionInfoService;
+    @Autowired
+    private INewWorkflowService workflowService;
 
 
     /**
@@ -780,4 +790,256 @@ public class WeighingManagementServiceImpl extends ServiceImpl<WeighingManagemen
         }
         return "ok";
     }
+
+    /**
+     * 移库导入
+     * @param weighingManagement
+     * @return
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public String importWeighing(WeighingManagement weighingManagement) {
+        List<WeighingManagement> weighingManagementList=weighingManagement.getWeighingManagementList();
+        InOutWarehouseTask inOutWarehouseTask=inOutWarehouseTaskService.selectOne(new EntityWrapper<InOutWarehouseTask>()
+        .eq("in_out_task_no",weighingManagementList.get(0).getInOutTaskNo()));
+        //合计净重
+        double weight = weighingManagementList.stream().mapToDouble(WeighingManagement::getNetWeight).sum();
+        //更新任务完成量
+        inOutWarehouseTask.setCompletedQuantity(inOutWarehouseTask.getCompletedQuantity() + weight);
+        if (inOutWarehouseTask.getCompletedQuantity() > inOutWarehouseTask.getWeight() + inOutWarehouseTask.getWeight() * 0.08f) {
+            throw new YException(YExceptionEnum.TASK_WEIGHT_EXCEEDED_ERROR);
+        } else {
+            inOutWarehouseTaskService.updateById(inOutWarehouseTask);
+        }
+        //更新库存量
+        WarehouseBaseInfo warehouseBaseInfo=warehouseBaseInfoService.selectOne(new EntityWrapper<WarehouseBaseInfo>()
+                .eq("warehouse_name",weighingManagement.getWarehouseName())
+                .eq("comp_id",inOutWarehouseTask.getCompId()));
+        //判断是否有库
+        if (warehouseBaseInfo!= null) {
+            //  查询库位
+            WarehousePositionInfo warehousePositionInfo = warehousePositionInfoService.selectById("fda48a46eb4848bdbca73e958a272c97");
+            if (warehousePositionInfo != null) {
+                // 查询货物库存量
+                WarehousePositionStorageInfo warehousePositionStorageInfo = warehousePositionStorageInfoService.selectOne(new EntityWrapper<WarehousePositionStorageInfo>()
+                        .eq("position_id", "fda48a46eb4848bdbca73e958a272c97")
+                        .eq("goods_name", "玉米")
+                        .eq("delete_flag", "0"));
+                // 判断是否有货
+                if (warehousePositionStorageInfo != null) {
+                    warehousePositionStorageInfo.setStorage(warehousePositionStorageInfo.getStorage() + weight);
+                    warehousePositionStorageInfoService.updateById(warehousePositionStorageInfo);
+                }
+                // 没有货
+                else {
+                    WarehousePositionStorageInfo warehousePositionStorageInfo1 = new WarehousePositionStorageInfo();
+                    warehousePositionStorageInfo1.setId(IdGenerator.generateUUID());
+                    warehousePositionStorageInfo1.setPositionId("fda48a46eb4848bdbca73e958a272c97");
+                    warehousePositionStorageInfo1.setBinNumber("1");
+                    warehousePositionStorageInfo1.setGoodsNameKey("1");
+                    warehousePositionStorageInfo1.setGoodsName("玉米");
+                    warehousePositionStorageInfo1.setStorage(weight);
+                    warehousePositionStorageInfoService.insert(warehousePositionStorageInfo1);
+                }
+            }
+        }
+        for (WeighingManagement weighingManagement1:weighingManagementList) {
+            //生成入库记录
+            WarehouseInOutInfo warehouseInOutInfo = new WarehouseInOutInfo();
+            warehouseInOutInfo.setId(IdGenerator.generateUUID());
+            warehouseInOutInfo.setBaseId(warehouseBaseInfo.getId());
+            warehouseInOutInfo.setInOutTaskNo(weighingManagement1.getInOutTaskNo());
+            warehouseInOutInfo.setContractNo(inOutWarehouseTask.getMoveTaskNo());
+            warehouseInOutInfo.setWarehouseName(weighingManagement.getWarehouseName());
+            warehouseInOutInfo.setOutType(weighingManagement1.getOutType());
+            warehouseInOutInfo.setInOutFlag("2");
+            warehouseInOutInfo.setBinNumber("1");
+            //固定写死
+            warehouseInOutInfo.setPositionId("fda48a46eb4848bdbca73e958a272c97");
+            warehouseInOutInfo.setGoodsNameKey("1");
+            warehouseInOutInfo.setGoodsName("玉米");
+            warehouseInOutInfo.setGrossWeight(weighingManagement1.getGrossWeight());
+            warehouseInOutInfo.setTare(weighingManagement1.getTare());
+            warehouseInOutInfo.setNetWeight(Double.valueOf(String.valueOf(weighingManagement1.getNetWeight())));
+            warehouseInOutInfo.setInOutDate(weighingManagement1.getGrossDate());
+            warehouseInOutInfo.setInOutTypeKey("3");
+            warehouseInOutInfo.setInOutType("移库入库");
+            warehouseInOutInfo.setCarNo(weighingManagement1.getCarNumber());
+            warehouseInOutInfo.setStatusFlag(StatusEnum.SUBMITTED.getFlag());
+            warehouseInOutInfo.setStatus(StatusEnum.SUBMITTED.getName());
+            //生成入库详情
+            WarehouseInOutDetail warehouseInOutDetail = new WarehouseInOutDetail();
+            warehouseInOutDetail.setInfoId(warehouseInOutInfo.getId());
+            warehouseInOutDetail.setId(IdGenerator.generateUUID());
+            String relationId = IdGenerator.generateUUID();
+            QualityInspectionManagement qualityInspectionManagement = new QualityInspectionManagement();
+            qualityInspectionManagement.setId(IdGenerator.generateUUID());
+            qualityInspectionManagement.setWarehouseInOutId(warehouseInOutInfo.getId());
+            qualityInspectionManagement.setCompId(AuthSecurityUtils.getStaffById(AuthSecurityUtils.getCurrentUserId()).getCompId());
+            qualityInspectionManagement.setRelationId(relationId);
+            qualityInspectionManagement.setGoodsName("玉米");
+            qualityInspectionManagement.setNatureOfGrainPurchase("贸易粮");
+            qualityInspectionManagement.setBinNumber("1");
+            qualityInspectionManagement.setServiceManagementType("1");
+            qualityInspectionManagement.setQualityNo(weighingManagement1.getNumber());
+            qualityInspectionManagement.setContractNo(inOutWarehouseTask.getMoveTaskNo());
+            qualityInspectionManagement.setCarNumber(weighingManagement1.getCarNumber());
+            qualityInspectionManagement.setWarehouseName(weighingManagement.getWarehouseName());
+            qualityInspectionManagement.setInOutTaskNo(weighingManagement1.getInOutTaskNo());
+            qualityInspectionManagement.setTips("出货库" + inOutWarehouseTask.getSendWarehouse());
+            qualityInspectionManagement.setInOutTypeKey("3");
+            qualityInspectionManagement.setInOutType("移库入库");
+            qualityInspectionManagement.setQualityDate(weighingManagement1.getGrossDate());
+            qualityInspectionManagement.setManagementType("1");
+            qualityInspectionManagement.setType("干粮");
+            qualityInspectionManagement.setConfirm("1");
+            CommonStaff commonStaff = staffService.getInfo(AuthSecurityUtils.getCurrentUserId());
+            qualityInspectionManagement.setQualityInspector(commonStaff.getStaffName());
+            qualityInspectionManagement.setReInspector(commonStaff.getStaffName());
+            //状态为已复检
+            qualityInspectionManagement.setStatus(StatusEnum.COMPLEX_INSPECTED.getName());
+            qualityInspectionManagement.setStatusFlag(StatusEnum.COMPLEX_INSPECTED.getFlag());
+            qualityInspectionManagement.setAgentKey(AuthSecurityUtils.getCurrentUserId());
+            qualityInspectionManagement.setAgent(AuthSecurityUtils.getStaffById(AuthSecurityUtils.getCurrentUserId()).getStaffName());
+            //生成检斤信息
+            weighingManagement1.setId(IdGenerator.generateUUID());
+            weighingManagement1.setRelationId(relationId);
+            weighingManagement1.setNumber(weighingManagement1.getNumber());
+            weighingManagement1.setCarNumber(weighingManagement1.getCarNumber());
+            weighingManagement1.setWarehouseInOutId(warehouseInOutInfo.getId());
+            weighingManagement1.setContractNo(inOutWarehouseTask.getMoveTaskNo());
+            weighingManagement1.setCompId(AuthSecurityUtils.getStaffById(AuthSecurityUtils.getCurrentUserId()).getCompId());
+            weighingManagement1.setServiceManagementType("1");
+            weighingManagement1.setInOutTaskNo(weighingManagement1.getInOutTaskNo());
+            weighingManagement1.setGoodsName("玉米");
+            weighingManagement1.setType("干粮");
+            weighingManagement1.setBinNumber("1");
+            weighingManagement1.setOutType(weighingManagement1.getOutType());
+            weighingManagement1.setSecretaryWeigher(commonStaff.getStaffName());
+            weighingManagement1.setSkinInspector(commonStaff.getStaffName());
+            weighingManagement1.setGrossWeight(weighingManagement1.getGrossWeight());
+            weighingManagement1.setTare(weighingManagement1.getTare());
+            weighingManagement1.setNetWeight(weighingManagement1.getNetWeight() * 1000);
+            weighingManagement1.setManagementType("1");
+            weighingManagement1.setWarehouseName(weighingManagement.getWarehouseName());
+            weighingManagement1.setGrossDate(weighingManagement1.getGrossDate());
+            weighingManagement1.setTareDate(weighingManagement1.getGrossDate());
+            //状态为已称皮重
+            weighingManagement1.setStatus(StatusEnum.TARED.getName());
+            weighingManagement1.setStatusFlag(StatusEnum.TARED.getFlag());
+            warehouseInOutInfoService.insert(warehouseInOutInfo);
+            warehouseInOutDetailService.insert(warehouseInOutDetail);
+            qualityInspectionManagementService.insert(qualityInspectionManagement);
+            this.insert(weighingManagement1);
+            InOutWarehouseTask inOutWarehouseTask1 = inOutWarehouseTaskService.selectOne(new EntityWrapper<InOutWarehouseTask>()
+                    .eq("move_task_no", inOutWarehouseTask.getMoveTaskNo())
+                    .eq("in_out_flag", "1")
+                    .eq("delete_flag", "0"));
+            if (inOutWarehouseTask1 == null) {
+                throw new YException(YExceptionEnum.TASK_NO_NOT_EXSITS_ERROR);
+            } else {
+                //若移库的发货库为自动创建的临时库时
+                WarehouseBaseInfo warehouseBaseInfo1 = warehouseBaseInfoService.selectOne(new EntityWrapper<WarehouseBaseInfo>()
+                        .eq("warehouse_name", inOutWarehouseTask1.getWarehouseName())
+                        .eq("create_type", "1")
+                        .eq("warehouse_type", "2")
+                        .eq("delete_flag", "0"));
+                if (warehouseBaseInfo1 != null) {
+                    //按入库重量结算
+                    ContractManagementInfo contractManagementInfo = contractManagementInfoService.selectOne(new EntityWrapper<ContractManagementInfo>()
+                            .eq("contract_no", warehouseBaseInfo1.getWarehouseName())
+                            .eq("settlement_weight_method", "2")
+                            .eq("deliver_type", "1")
+                            .eq("delete_flag", "0"));
+                    if (contractManagementInfo != null) {
+                        //现货采购入库报表
+                        StockPurchaseReceiptReport stockPurchaseReceiptReport = new StockPurchaseReceiptReport();
+                        stockPurchaseReceiptReport.setId(IdGenerator.generateUUID());
+                        stockPurchaseReceiptReport.setCompId(warehouseBaseInfo.getCompId());
+                        stockPurchaseReceiptReport.setWarehouseRecordId(warehouseInOutInfo.getId());
+                        stockPurchaseReceiptReport.setContractNo(warehouseBaseInfo1.getWarehouseName());
+                        stockPurchaseReceiptReport.setWarehouseName(warehouseInOutInfo.getWarehouseName());
+                        stockPurchaseReceiptReport.setCarNo(warehouseInOutInfo.getCarNo());
+                        stockPurchaseReceiptReport.setGrossWeight(Double.valueOf(String.valueOf(warehouseInOutInfo.getGrossWeight())));
+                        stockPurchaseReceiptReport.setTare(Double.valueOf(String.valueOf(warehouseInOutInfo.getTare())));
+                        stockPurchaseReceiptReport.setNetWeight(warehouseInOutInfo.getNetWeight());
+                        stockPurchaseReceiptReport.setWarehousingDate(warehouseInOutInfo.getInOutDate());
+                        stockPurchaseReceiptReport.setSettlementWeight(warehouseInOutInfo.getNetWeight());
+                        if (contractManagementInfo.getUnitContractPrice() != null) {
+                            BigDecimal cost = new BigDecimal(contractManagementInfo.getUnitContractPrice());
+                            BigDecimal deductionAmount = new BigDecimal(warehouseInOutInfo.getDeductionAmount() != null ? warehouseInOutInfo.getDeductionAmount() : 0.0);
+                            stockPurchaseReceiptReport.setSettlementPrice(cost.subtract(deductionAmount).doubleValue());
+                            BigDecimal netWeight = new BigDecimal(warehouseInOutInfo.getNetWeight());
+                            stockPurchaseReceiptReport.setAmountIngPayable(cost.subtract(deductionAmount).multiply(netWeight).doubleValue());
+                        }
+//                        //随行就市
+//                        else {
+//                            BigDecimal cost = new BigDecimal(warehouseInOutInfo.getCost());
+//                            BigDecimal deductionAmount = new BigDecimal(warehouseInOutInfo.getDeductionAmount() != null ? warehouseInOutInfo.getDeductionAmount() : 0.0);
+//                            stockPurchaseReceiptReport.setSettlementPrice(cost.subtract(deductionAmount).doubleValue());
+//                            BigDecimal netWeight = new BigDecimal(warehouseInOutInfo.getNetWeight());
+//                            stockPurchaseReceiptReport.setAmountIngPayable(cost.subtract(deductionAmount).multiply(netWeight).doubleValue());
+//                        }
+                        stockPurchaseReceiptReport.setAmountEdPayable(0.0d);
+                        stockPurchaseReceiptReport.setAmountNotPayable(stockPurchaseReceiptReport.getAmountIngPayable());
+                        stockPurchaseReceiptReport.setStatusFlag(StatusEnum.FORM_REVIEWED.getFlag());
+                        stockPurchaseReceiptReport.setStatus(StatusEnum.FORM_REVIEWED.getName());
+                        stockPurchaseReceiptReportService.insert(stockPurchaseReceiptReport);
+                        boolean isStartWorkflow = org.apache.commons.lang3.StringUtils.isBlank(stockPurchaseReceiptReport.getWorkflowId());
+                        // 不是退回的单子
+                        if (isStartWorkflow) {
+                            Workflow workflow = workflowService
+                                    .findLatestWorkflowByBusinessCodeByApp(stockPurchaseReceiptReport.getCompId(), "STOCK-PROCUREMENT-RECEIPT-REPORT");
+                            // 没配置审核流程,直接结束并处理信息
+                            if (workflow == null) {
+                                throw new YException(YExceptionEnum.PURCHASE_ORDER_ERROR);
+                            }
+                            // 开启审核流
+                            else {
+                                // 设置状态 已提交审核
+                                stockPurchaseReceiptReport.setWorkflowId(workflow.getId());
+                                stockPurchaseReceiptReportService.updateById(stockPurchaseReceiptReport);
+                                workflowService.startInstance(workflow.getId(), stockPurchaseReceiptReport.getId());
+                            }
+                        }
+                        // 退回的单子 再启用
+                        else {
+                            stockPurchaseReceiptReportService.updateById(stockPurchaseReceiptReport);
+                            workflowService.activateInstance(stockPurchaseReceiptReport.getWorkflowId(), stockPurchaseReceiptReport.getId());
+                        }
+                    }
+                }
+                //常用库之间移库
+                else {
+                    //查收货库
+                    InOutWarehouseTask inOutWarehouseTask2 = inOutWarehouseTaskService.selectOne(new EntityWrapper<InOutWarehouseTask>()
+                            .eq("relevance_id", inOutWarehouseTask.getRelevanceId())
+                            .eq("in_out_flag", "2")
+                            .eq("delete_flag", "0"));
+                    //更新所在仓库收购库存
+                    ContractInventoryDistribution contractInventoryDistribution1 = contractInventoryDistributionService.selectOne(new EntityWrapper<ContractInventoryDistribution>()
+                            .eq("comp_id", inOutWarehouseTask2.getCompId()).eq("inventory_type", "3").eq("warehouse", inOutWarehouseTask.getWarehouseName())
+                            .eq("locus_warehouse", inOutWarehouseTask2.getWarehouseName())
+                            .eq("goods_name", warehouseInOutInfo.getGoodsName()));
+                    if (contractInventoryDistribution1 != null) {
+                        contractInventoryDistribution1.setInventory(contractInventoryDistribution1.getInventory() + warehouseInOutInfo.getNetWeight());
+                        contractInventoryDistributionService.updateById(contractInventoryDistribution1);
+                    } else {
+                        ContractInventoryDistribution contractInventoryDistribution2 = new ContractInventoryDistribution();
+                        contractInventoryDistribution2.setId(IdGenerator.generateUUID());
+                        contractInventoryDistribution2.setCompId(inOutWarehouseTask.getCompId());
+                        //所属仓库  发货库
+                        contractInventoryDistribution2.setWarehouse(inOutWarehouseTask.getWarehouseName());
+                        contractInventoryDistribution2.setInventory(warehouseInOutInfo.getNetWeight());
+                        //所在仓库  收货
+                        contractInventoryDistribution2.setLocusWarehouse(inOutWarehouseTask2.getWarehouseName());
+                        contractInventoryDistribution2.setGoodsName(warehouseInOutInfo.getGoodsName());
+                        contractInventoryDistribution2.setInventoryType("3");
+                        contractInventoryDistributionService.insert(contractInventoryDistribution2);
+                    }
+                }
+            }
+        }
+        return "ok";
+    }
 }