Selaa lähdekoodia

Merge remote-tracking branch 'origin/master'

24282 2 vuotta sitten
vanhempi
commit
cb3f876294
32 muutettua tiedostoa jossa 473 lisäystä ja 203 poistoa
  1. 0 51
      hx-common/src/main/java/com/fjhx/common/entity/contract/po/ContractTemplate.java
  2. 37 4
      hx-common/src/main/java/com/fjhx/common/entity/corporation/po/Corporation.java
  3. 1 20
      hx-common/src/main/resources/mapper/corporation/CorporationMapper.xml
  4. 0 9
      hx-customer/src/main/java/com/fjhx/customer/entity/customer/dto/CustomerDto.java
  5. 8 8
      hx-customer/src/main/java/com/fjhx/customer/entity/customer/po/Customer.java
  6. 3 2
      hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java
  7. 8 0
      hx-mes/src/main/java/com/fjhx/mes/controller/work/WorkOrderController.java
  8. 10 0
      hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskDetailVo.java
  9. 11 1
      hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskVo.java
  10. 5 0
      hx-mes/src/main/java/com/fjhx/mes/entity/work/dto/WorkOrderSelectDto.java
  11. 16 2
      hx-mes/src/main/java/com/fjhx/mes/entity/work/vo/WorkOrderVo.java
  12. 59 5
      hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java
  13. 1 1
      hx-mes/src/main/java/com/fjhx/mes/service/work/WorkOrderService.java
  14. 47 7
      hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java
  15. 5 0
      hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/vo/SubscribeDetailVo.java
  16. 4 1
      hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java
  17. 28 1
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractDto.java
  18. 15 0
      hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java
  19. 28 1
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/EhsdPurchaseDto.java
  20. 18 3
      hx-sale/src/main/java/com/fjhx/sale/entity/purchase/po/EhsdPurchase.java
  21. 27 1
      hx-sale/src/main/java/com/fjhx/sale/entity/sale/dto/SaleQuotationDto.java
  22. 15 0
      hx-sale/src/main/java/com/fjhx/sale/entity/sale/po/SaleQuotation.java
  23. 28 1
      hx-sale/src/main/java/com/fjhx/sale/entity/sample/dto/SampleDto.java
  24. 18 3
      hx-sale/src/main/java/com/fjhx/sale/entity/sample/po/Sample.java
  25. 10 4
      hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContract.java
  26. 10 1
      hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java
  27. 9 1
      hx-sale/src/main/java/com/fjhx/sale/flow/EhsdPurchaseFlow.java
  28. 6 0
      hx-sale/src/main/java/com/fjhx/sale/flow/SaleQuotationFlow.java
  29. 12 1
      hx-sale/src/main/java/com/fjhx/sale/flow/SampleFlow.java
  30. 4 4
      hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java
  31. 1 33
      hx-sale/src/main/resources/mapper/sale/SaleQuotationMapper.xml
  32. 29 38
      hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

+ 0 - 51
hx-common/src/main/java/com/fjhx/common/entity/contract/po/ContractTemplate.java

@@ -45,57 +45,6 @@ public class ContractTemplate extends BasePo {
     @NotBlank(message = "联系人电话不能为空")
     private String contactNumber;
 
-    /**
-     * 公司电话
-     */
-    @NotBlank(message = "公司电话不能为空")
-    private String corporationNumber;
-
-    /**
-     * 国家表id
-     */
-    @NotBlank(message = "国家id不能为空")
-    private String countryId;
-
-    /**
-     * 省份id
-     */
-    @NotBlank(message = "省份id不能为空")
-    private String provinceId;
-
-    /**
-     * 城市id
-     */
-    @NotBlank(message = "城市id不能为空")
-    private String cityId;
-
-    /**
-     * 详细地址
-     */
-    private String address;
-
-    /**
-     * 国家表英文字符串
-     */
-    @NotBlank(message = "国家英文名称不能为空")
-    private String countryEnStr;
-
-    /**
-     * 省份英文字符串
-     */
-    @NotBlank(message = "省份英文名称不能为空")
-    private String provinceEnStr;
-
-    /**
-     * 城市英文字符串
-     */
-    @NotBlank(message = "城市英文名称不能为空")
-    private String cityEnStr;
-
-    /**
-     * 详细地址英文
-     */
-    private String addressEn;
 
     /**
      * 模板内容

+ 37 - 4
hx-common/src/main/java/com/fjhx/common/entity/corporation/po/Corporation.java

@@ -7,6 +7,8 @@ import java.util.Date;
 import lombok.Getter;
 import lombok.Setter;
 
+import javax.validation.constraints.NotBlank;
+
 /**
  * <p>
  * 多公司配置
@@ -76,26 +78,57 @@ public class Corporation extends BasePo {
      * 进出口企业代码
      */
     private String yfId;
+    /**
+     * 公司电话
+     */
+    @NotBlank(message = "公司电话不能为空")
+    private String corporationNumber;
 
     /**
-     * 国家
+     * 国家表id
      */
+    @NotBlank(message = "国家id不能为空")
     private Long countryId;
 
     /**
-     * 省
+     * 省份id
      */
+    @NotBlank(message = "省份id不能为空")
     private Long provinceId;
 
     /**
-     * 市
+     * id
      */
+    @NotBlank(message = "城市id不能为空")
     private Long cityId;
 
     /**
      * 详细地址
      */
-    private String detailedAddress;
+    private String address;
+
+    /**
+     * 国家表英文字符串
+     */
+    @NotBlank(message = "国家英文名称不能为空")
+    private String countryEnStr;
+
+    /**
+     * 省份英文字符串
+     */
+    @NotBlank(message = "省份英文名称不能为空")
+    private String provinceEnStr;
+
+    /**
+     * 城市英文字符串
+     */
+    @NotBlank(message = "城市英文名称不能为空")
+    private String cityEnStr;
+
+    /**
+     * 详细地址英文
+     */
+    private String addressEn;
 
     /**
      * 海关注册代码

+ 1 - 20
hx-common/src/main/resources/mapper/corporation/CorporationMapper.xml

@@ -3,26 +3,7 @@
 <mapper namespace="com.fjhx.common.mapper.corporation.CorporationMapper">
     <select id="getPage" resultType="com.fjhx.common.entity.corporation.vo.CorporationVo">
         select
-            c.id,
-            c.name,
-            c.name_en,
-            c.type,
-            c.usc_code,
-            c.legal_person_name,
-            c.registered_capital,
-            c.start_date,
-            c.stop_date,
-            c.taxpayer_qualification,
-            c.iaee_code,
-            c.create_user,
-            c.create_time,
-            c.update_user,
-            c.update_time,
-            c.country_id,
-            c.province_id,
-            c.city_id,
-            c.detailed_address,
-            c.cr_code
+           *
         from corporation c
             ${ew.customSqlSegment}
     </select>

+ 0 - 9
hx-customer/src/main/java/com/fjhx/customer/entity/customer/dto/CustomerDto.java

@@ -30,14 +30,5 @@ public class CustomerDto extends Customer implements SetCustomizeAreaId {
      */
     private String endTime;
 
-    /**
-     * 省/州名称
-     */
-    private String provinceName;
-
-    /**
-     * 市名称
-     */
-    private String cityName;
 
 }

+ 8 - 8
hx-customer/src/main/java/com/fjhx/customer/entity/customer/po/Customer.java

@@ -39,20 +39,20 @@ public class Customer extends BasePo {
      */
     private Long provinceId;
 
-//    /**
-//     * 省份ID
-//     */
-//    private Long provinceName;
+    /**
+     * 省份名称
+     */
+    private String provinceName;
 
     /**
      * 城市id
      */
     private Long cityId;
 
-//    /**
-//     * 城市id
-//     */
-//    private Long cityName;
+    /**
+     * 城市名称
+     */
+    private String cityName;
 
     /**
      * 地址

+ 3 - 2
hx-item/src/main/java/com/fjhx/item/service/product/impl/ProductInfoServiceImpl.java

@@ -755,7 +755,7 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
         List<Map<String, Object>> list = new ArrayList<>();
         QueryWrapper<ProductInfo> wrapper = Wrappers.query();
         wrapper.groupBy("type");
-        wrapper.select("count(*) count, ifNull(type,-1)");
+        wrapper.select("count(*) count, ifNull(type,-1) type");
         List<ProductInfo> productInfos = baseMapper.selectList(wrapper);
         Map<String, List<ProductInfo>> productInfoMap = productInfos.stream().collect(Collectors.groupingBy(ProductInfo::getType));
 
@@ -764,8 +764,9 @@ public class ProductInfoServiceImpl extends ServiceImpl<ProductInfoMapper, Produ
 
         map.put("amount",amount);
         //获取产品类型统计数据
+        DynamicDataSourceContextHolder.push(SourceConstant.BASE);
         List<DictTenantDataVo> dictTenantDataVoList = getDict("product_type");
-
+        DynamicDataSourceContextHolder.poll();
         if (dictTenantDataVoList.size()==0){
             throw new ServiceException("数据异常:产品没有设置产品类型字典,请先添加");
         }

+ 8 - 0
hx-mes/src/main/java/com/fjhx/mes/controller/work/WorkOrderController.java

@@ -79,4 +79,12 @@ public class WorkOrderController {
         workOrderService.delete(dto.getId());
     }
 
+    /**
+     * 工单分页 嘉新双拓
+     */
+    @PostMapping("/pageByJxst")
+    public Page<WorkOrderVo> getPageByJxst(@RequestBody WorkOrderSelectDto dto) {
+        return workOrderService.getPageByJxst(dto);
+    }
+
 }

+ 10 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskDetailVo.java

@@ -14,4 +14,14 @@ import lombok.Setter;
 @Setter
 public class ProductionTaskDetailVo extends ProductionTaskDetail {
 
+    /**
+     * 工序名称
+     */
+    private String productionProcessesName;
+
+    /**
+     * 累计耗时
+     */
+    private String cumulativeTime;
+
 }

+ 11 - 1
hx-mes/src/main/java/com/fjhx/mes/entity/production/vo/ProductionTaskVo.java

@@ -5,6 +5,7 @@ import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -32,7 +33,16 @@ public class ProductionTaskVo extends ProductionTask {
     private String personLiableName;
 
     /**
+     * 待排程数
+     */
+    private BigDecimal remainingQuantity;
+    /**
+     * 生产计划编号
+     */
+    private String productionPlanCode;
+
+    /**
      * 生产任务明细列表
      */
-    private List<ProductionTaskDetail> productionTaskDetailList;
+    private List<ProductionTaskDetailVo> productionTaskDetailList;
 }

+ 5 - 0
hx-mes/src/main/java/com/fjhx/mes/entity/work/dto/WorkOrderSelectDto.java

@@ -14,4 +14,9 @@ import lombok.Setter;
 @Setter
 public class WorkOrderSelectDto extends BaseSelectDto {
 
+    /**
+     * 工单来源
+     */
+    private String source;
+
 }

+ 16 - 2
hx-mes/src/main/java/com/fjhx/mes/entity/work/vo/WorkOrderVo.java

@@ -23,10 +23,14 @@ public class WorkOrderVo extends WorkOrder {
      */
     private String productName;
 
-    /**生产计划列表*/
+    /**
+     * 生产计划列表
+     */
     private List<ProductionPlan> productionPlans;
 
-    /**待排程数量*/
+    /**
+     * 待排程数量
+     */
     private BigDecimal remainingQuantity;
 
     /**
@@ -34,4 +38,14 @@ public class WorkOrderVo extends WorkOrder {
      */
     private BigDecimal sumQuantity;
 
+    /**
+     * 已计划数量
+     */
+    private BigDecimal arrangedQuantity;
+
+    /**
+     * 完成率
+     */
+    private BigDecimal completionRate;
+
 }

+ 59 - 5
hx-mes/src/main/java/com/fjhx/mes/service/production/impl/ProductionTaskServiceImpl.java

@@ -14,8 +14,10 @@ import com.fjhx.mes.entity.bom.po.BomInfo;
 import com.fjhx.mes.entity.production.dto.ProductionTaskDto;
 import com.fjhx.mes.entity.production.dto.ProductionTaskSelectDto;
 import com.fjhx.mes.entity.production.po.ProductionPlan;
+import com.fjhx.mes.entity.production.po.ProductionProcesses;
 import com.fjhx.mes.entity.production.po.ProductionTask;
 import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
+import com.fjhx.mes.entity.production.vo.ProductionTaskDetailVo;
 import com.fjhx.mes.entity.production.vo.ProductionTaskVo;
 import com.fjhx.mes.entity.technology.po.Technology;
 import com.fjhx.mes.entity.work.po.WorkOrder;
@@ -26,6 +28,7 @@ import com.fjhx.mes.service.applicable.ApplicableProductsService;
 import com.fjhx.mes.service.bom.BomDetailService;
 import com.fjhx.mes.service.bom.BomInfoService;
 import com.fjhx.mes.service.production.ProductionPlanService;
+import com.fjhx.mes.service.production.ProductionProcessesService;
 import com.fjhx.mes.service.production.ProductionTaskDetailService;
 import com.fjhx.mes.service.production.ProductionTaskService;
 import com.fjhx.mes.service.technology.TechnologyService;
@@ -45,10 +48,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.text.DecimalFormat;
+import java.util.*;
 import java.util.stream.Collectors;
 
 
@@ -86,6 +87,8 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     private ApplicableProductsService applicableProductsService;
     @Autowired
     private ProductionTaskDetailService productionTaskDetailService;
+    @Autowired
+    private ProductionProcessesService productionProcessesService;
 
     @Override
     public Page<ProductionTaskVo> getPage(ProductionTaskSelectDto dto) {
@@ -268,8 +271,59 @@ public class ProductionTaskServiceImpl extends ServiceImpl<ProductionTaskMapper,
     @Override
     public ProductionTaskVo detailByJxst(Long id) {
         ProductionTaskVo detail = detail(id);
+        //赋值待排程数
+        Long productionPlanId = detail.getProductionPlanId();
+        ProductionPlan productionPlan = productionPlanService.getById(productionPlanId);
+        List<ProductionTask> list1 = list(q -> q.eq(ProductionTask::getProductionPlanId, productionPlan.getId()));
+        BigDecimal remainingQuantity = productionPlan.getQuantity().subtract(BigDecimal.valueOf(list1.size()));
+        detail.setRemainingQuantity(remainingQuantity);
+        detail.setProductionPlanCode(productionPlan.getCode());
+
         List<ProductionTaskDetail> list = productionTaskDetailService.list(q -> q.eq(ProductionTaskDetail::getProductionTaskId, id));
-        detail.setProductionTaskDetailList(list);
+        List<ProductionTaskDetailVo> productionTaskDetailVos = BeanUtil.copyToList(list, ProductionTaskDetailVo.class);
+        //赋值当前工序名称
+        WorkOrder workOrder = workOrderService.getById(productionPlan.getWorkOrderId());
+        //判断是否是定制工单 获取指定工序
+        if ("1".equals(workOrder.getIsCustomized())) {
+            //获取定制工序
+            Map<Long, String> gxmap = workOrderProductionProcessesService.mapKV(WorkOrderProductionProcesses::getId, WorkOrderProductionProcesses::getName, q -> q.eq(WorkOrderProductionProcesses::getWorkOrderId, workOrder.getId()));
+            if (ObjectUtil.isNotEmpty(gxmap)) {
+                for (ProductionTaskDetailVo productionTaskDetail : productionTaskDetailVos) {
+                    String gxname = gxmap.get(productionTaskDetail.getProductionProcessesId());
+                    productionTaskDetail.setProductionProcessesName(gxname);
+                }
+            }
+        } else {
+            //获取基本工序
+            ApplicableProducts applicableProducts = applicableProductsService.getOne(q -> q.eq(ApplicableProducts::getProductId, workOrder.getProductId()));
+            if (ObjectUtil.isNotEmpty(applicableProducts)) {
+                Technology technology = technologyService.getById(applicableProducts.getTechnologyId());
+                if (ObjectUtil.isNotEmpty(technology)) {
+                    String processRoute = technology.getProcessRoute();
+                    if (ObjectUtil.isNotEmpty(processRoute)) {
+                        String[] split = processRoute.split(",");
+                        Map<Long, String> gxmap = productionProcessesService.mapKV(ProductionProcesses::getId, ProductionProcesses::getName, q -> q.in(ProductionProcesses::getId, split));
+                        for (ProductionTaskDetailVo productionTaskDetail : productionTaskDetailVos) {
+                            String gxname = gxmap.get(productionTaskDetail.getProductionProcessesId());
+                            productionTaskDetail.setProductionProcessesName(gxname);
+                        }
+                    }
+                }
+            }
+        }
+        //赋值累计耗时
+        for (ProductionTaskDetailVo productionTaskDetail : productionTaskDetailVos) {
+            long diff = new Date().getTime() - productionTaskDetail.getCreateTime().getTime();
+            DecimalFormat decimalFormat = new DecimalFormat("#0.00");
+            String formattedResult = decimalFormat.format(diff / 60.0 / 60.0 / 1000.0);
+            productionTaskDetail.setCumulativeTime(formattedResult);
+
+            //判断是否完工
+            if(productionTaskDetail.getFinishStatus()==1){
+                productionTaskDetail.setProductionProcessesName("已完成");
+            }
+        }
+        detail.setProductionTaskDetailList(productionTaskDetailVos);
         return detail;
     }
 

+ 1 - 1
hx-mes/src/main/java/com/fjhx/mes/service/work/WorkOrderService.java

@@ -51,5 +51,5 @@ public interface WorkOrderService extends BaseService<WorkOrder> {
     void delete(Long id);
 
 
-
+    Page<WorkOrderVo> getPageByJxst(WorkOrderSelectDto dto);
 }

+ 47 - 7
hx-mes/src/main/java/com/fjhx/mes/service/work/impl/WorkOrderServiceImpl.java

@@ -11,6 +11,8 @@ import com.fjhx.item.service.product.ProductInfoService;
 import com.fjhx.mes.entity.bom.po.BomDetail;
 import com.fjhx.mes.entity.bom.po.BomInfo;
 import com.fjhx.mes.entity.production.po.ProductionPlan;
+import com.fjhx.mes.entity.production.po.ProductionTask;
+import com.fjhx.mes.entity.production.po.ProductionTaskDetail;
 import com.fjhx.mes.entity.work.dto.WorkOrderDto;
 import com.fjhx.mes.entity.work.dto.WorkOrderSelectDto;
 import com.fjhx.mes.entity.work.po.WorkOrder;
@@ -19,6 +21,8 @@ import com.fjhx.mes.mapper.work.WorkOrderMapper;
 import com.fjhx.mes.service.bom.BomDetailService;
 import com.fjhx.mes.service.bom.BomInfoService;
 import com.fjhx.mes.service.production.ProductionPlanService;
+import com.fjhx.mes.service.production.ProductionTaskDetailService;
+import com.fjhx.mes.service.production.ProductionTaskService;
 import com.fjhx.mes.service.work.WorkOrderService;
 import com.fjhx.mes.utils.code.CodeEnum;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
@@ -33,6 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -65,14 +70,21 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     private StockService stockService;
     @Autowired
     private StockFrozenService stockFrozenService;
+    @Autowired
+    private ProductionTaskService productionTaskService;
+    @Autowired
+    private ProductionTaskDetailService productionTaskDetailService;
 
     @Override
     public Page<WorkOrderVo> getPage(WorkOrderSelectDto dto) {
         IWrapper<WorkOrder> wrapper = getWrapper();
+        if(ObjectUtil.isNotEmpty(dto.getKeyword())){
+            wrapper.and(q->q.like("wo", WorkOrder::getCode, dto.getKeyword())
+                    .or()
+                    .like("wo", WorkOrder::getQuantity, dto.getKeyword()));
+        }
+        wrapper.eq("wo",WorkOrder::getSource,dto.getSource());
         wrapper.orderByDesc("wo", WorkOrder::getId);
-        wrapper.like("wo", WorkOrder::getCode, dto.getKeyword());
-        wrapper.or();
-        wrapper.like("wo", WorkOrder::getQuantity, dto.getKeyword());
         Page<WorkOrderVo> page = this.baseMapper.getPage(dto.getPage(), wrapper);
         List<WorkOrderVo> records = page.getRecords();
         //赋值产品名
@@ -129,17 +141,17 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         this.save(workOrderDto);
         //获取产品信息
         ProductInfo productInfo = productInfoService.getById(workOrderDto.getProductId());
-        if(ObjectUtil.isEmpty(productInfo)){
+        if (ObjectUtil.isEmpty(productInfo)) {
             throw new ServiceException("查询不到产品信息 产品id->" + workOrderDto.getProductId());
         }
         //搜索BOM明细并到冻结库存
         BomInfo bomInfo = bomInfoService.getOne(q -> q.eq(BomInfo::getProductId, workOrderDto.getProductId()));
         if (ObjectUtil.isEmpty(bomInfo)) {
-            throw new ServiceException("查询不到产品的BOM信息 产品名称->"+productInfo.getName());
+            throw new ServiceException("查询不到产品的BOM信息 产品名称->" + productInfo.getName());
         }
         List<BomDetail> bomDetailList = bomDetailService.list(q -> q.eq(BomDetail::getBomInfoId, bomInfo.getId()));
         if (ObjectUtil.isEmpty(bomDetailList)) {
-            throw new ServiceException("查询不到产品BOM明细 产品名称->"+productInfo.getName());
+            throw new ServiceException("查询不到产品BOM明细 产品名称->" + productInfo.getName());
         }
         List<Long> productIds = bomDetailList.stream().map(BomDetail::getProductId).collect(Collectors.toList());
         Map<Long, List<Stock>> productMap = stockService.mapKGroup(Stock::getProductId, q -> q.in(Stock::getProductId, productIds));
@@ -157,7 +169,7 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
             BigDecimal quantity = stocks.stream().map(Stock::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
             Map<Long, StockFrozen> stockFrozenMap = stockFrozenService.mapKEntity(StockFrozen::getProductId, q -> q.in(StockFrozen::getProductId, productIds));
             StockFrozen stockFrozen = stockFrozenMap.get(bomDetail.getProductId());
-            if(ObjectUtil.isEmpty(stockFrozen)){
+            if (ObjectUtil.isEmpty(stockFrozen)) {
                 stockFrozen = new StockFrozen();
                 stockFrozen.setProductId(bomDetail.getProductId());
                 stockFrozen.setFrozenQuantity(BigDecimal.ZERO);
@@ -220,4 +232,32 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         this.removeById(id);
     }
 
+    @Override
+    public Page<WorkOrderVo> getPageByJxst(WorkOrderSelectDto dto) {
+        Page<WorkOrderVo> page = getPage(dto);
+        List<WorkOrderVo> records = page.getRecords();
+        for (WorkOrderVo workOrderVo : records) {
+            //赋值已计划数量
+            workOrderVo.setArrangedQuantity(workOrderVo.getQuantity().subtract(workOrderVo.getRemainingQuantity()));
+            //赋值完成率
+            long count =0;
+            //获取工单下的所有计划
+            List<Long> productionPlanIds = productionPlanService.listObject(ProductionPlan::getId,
+                    q -> q.eq(ProductionPlan::getWorkOrderId, workOrderVo.getId()));
+            if (ObjectUtil.isNotEmpty(productionPlanIds)) {
+                //获取计划下的所有任务
+                List<Long> productionTaskIds = productionTaskService.listObject(ProductionTask::getId,
+                        q -> q.in(ProductionTask::getId, productionPlanIds));
+                if (ObjectUtil.isNotEmpty(productionTaskIds)) {
+                    count = productionTaskDetailService.count(q ->
+                            q.in(ProductionTaskDetail::getProductionTaskId, productionTaskIds)
+                                    .eq(ProductionTaskDetail::getFinishStatus, 1));
+                }
+            }
+            BigDecimal divide = BigDecimal.valueOf(count).divide(workOrderVo.getQuantity(), 2, RoundingMode.HALF_UP);
+            workOrderVo.setCompletionRate(divide);
+        }
+        return page;
+    }
+
 }

+ 5 - 0
hx-purchase/src/main/java/com/fjhx/purchase/entity/subscribe/vo/SubscribeDetailVo.java

@@ -66,4 +66,9 @@ public class SubscribeDetailVo extends SubscribeDetail {
      * 产品类型定义
      */
     private Integer productDefinition;
+
+    /**
+     * 产品自定义编码
+     */
+    private String productCustomCode;
 }

+ 4 - 1
hx-purchase/src/main/java/com/fjhx/purchase/service/subscribe/impl/SubscribeDetailServiceImpl.java

@@ -96,6 +96,7 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
             s.setProductCategory(productInfo.getClassifyName());
             s.setProductUnit(productInfo.getUnit());
             s.setProductDefinition(productInfo.getDefinition());
+            s.setProductCustomCode(productInfo.getCustomCode());
         }
 
         return page;
@@ -160,7 +161,7 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
             List<Long> productIds = list.stream().map(SubscribeDetail::getBussinessId).collect(Collectors.toList());
             List<ProductInfoVo> productInfoVos = productInfoService.getListByProductIds(productIds);
             Map<Long, List<ProductInfoVo>> productMap = productInfoVos.stream().collect(Collectors.groupingBy(ProductInfoVo::getId));
-            for (SubscribeDetail s : list) {
+            for (SubscribeDetailVo  s: list) {
                 if (MapUtils.isNotEmpty(productMap)) {
                     ProductInfoVo p = productMap.get(s.getBussinessId()).get(0);
                     s.setProductCategory(p.getClassifyName());
@@ -169,6 +170,8 @@ public class SubscribeDetailServiceImpl extends ServiceImpl<SubscribeDetailMappe
                     s.setProductType(p.getType());
                     s.setProductName(p.getName());
                     s.setProductSpec(p.getSpec());
+                    s.setProductCustomCode(p.getCustomCode());
+                    s.setProductDefinition(p.getDefinition());
 
                     //维多利亚赋值部门id
                     String victoriatouristJson = p.getVictoriatouristJson();

+ 28 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/contract/dto/ContractDto.java

@@ -1,5 +1,6 @@
 package com.fjhx.sale.entity.contract.dto;
 
+import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.sale.entity.contract.po.Contract;
 import lombok.Getter;
 import lombok.Setter;
@@ -14,7 +15,7 @@ import java.math.BigDecimal;
  */
 @Getter
 @Setter
-public class ContractDto extends Contract {
+public class ContractDto extends Contract implements SetCustomizeAreaId {
     /**
      * 开始时间
      */
@@ -58,4 +59,30 @@ public class ContractDto extends Contract {
      * 外销数量
      */
     private BigDecimal quantity;
+
+    /**
+     * 省 州ID
+     */
+    private Long provinceId;
+
+    /**
+     * 省州名称
+     */
+    private String provinceName;
+
+
+    /**
+     * 城市ID
+     */
+    private Long cityId;
+
+    /**
+     * 城市名称
+     */
+    private String cityName;
+
+    /**
+     * 国家ID
+     */
+    private Long countryId;
 }

+ 15 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/contract/po/Contract.java

@@ -90,6 +90,21 @@ public class Contract extends BasePo {
     private Long sellCityId;
 
     /**
+     * 卖方国家表名称
+     */
+    private String sellCountryName;
+
+    /**
+     * 卖方省份名称
+     */
+    private String sellProvinceName;
+
+    /**
+     * 卖方城市名称
+     */
+    private String sellCityName;
+
+    /**
      * 卖方详细地址
      */
     private String sellAddress;

+ 28 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/dto/EhsdPurchaseDto.java

@@ -1,5 +1,6 @@
 package com.fjhx.sale.entity.purchase.dto;
 
+import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.sale.entity.purchase.po.EhsdPurchase;
 import lombok.Getter;
 import lombok.Setter;
@@ -12,6 +13,32 @@ import lombok.Setter;
  */
 @Getter
 @Setter
-public class EhsdPurchaseDto extends EhsdPurchase {
+public class EhsdPurchaseDto extends EhsdPurchase implements SetCustomizeAreaId {
 
+
+    /**
+     * 省 州ID
+     */
+    private Long provinceId;
+
+    /**
+     * 省州名称
+     */
+    private String provinceName;
+
+
+    /**
+     * 城市ID
+     */
+    private Long cityId;
+
+    /**
+     * 城市名称
+     */
+    private String cityName;
+
+    /**
+     * 国家ID
+     */
+    private Long countryId;
 }

+ 18 - 3
hx-sale/src/main/java/com/fjhx/sale/entity/purchase/po/EhsdPurchase.java

@@ -64,6 +64,21 @@ public class EhsdPurchase extends BasePo {
     private String sellCityId;
 
     /**
+     * 卖方国家表名称
+     */
+    private String sellCountryName;
+
+    /**
+     * 卖方省份名称
+     */
+    private String sellProvinceName;
+
+    /**
+     * 卖方城市名称
+     */
+    private String sellCityName;
+
+    /**
      * 卖方详细地址
      */
     private String sellAddress;
@@ -86,17 +101,17 @@ public class EhsdPurchase extends BasePo {
     /**
      * 买方国家表id
      */
-    private String buyCountryId;
+    private Long buyCountryId;
 
     /**
      * 买方省份id
      */
-    private String buyProvinceId;
+    private Long buyProvinceId;
 
     /**
      * 买方城市id
      */
-    private String buyCityId;
+    private Long buyCityId;
 
     /**
      * 买方详细地址

+ 27 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/sale/dto/SaleQuotationDto.java

@@ -1,5 +1,6 @@
 package com.fjhx.sale.entity.sale.dto;
 
+import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.sale.entity.quotation.po.QuotationPay;
 import com.fjhx.sale.entity.quotation.po.QuotationProduct;
 import com.fjhx.sale.entity.sale.po.SaleQuotation;
@@ -16,7 +17,7 @@ import java.util.List;
  */
 @Getter
 @Setter
-public class SaleQuotationDto extends SaleQuotation {
+public class SaleQuotationDto extends SaleQuotation implements SetCustomizeAreaId {
 
     /**
      * 商品-报价单关联表信息
@@ -29,5 +30,30 @@ public class SaleQuotationDto extends SaleQuotation {
     private List<QuotationPay> quotationPayList;
 
 
+    /**
+     * 省 州ID
+     */
+    private Long provinceId;
+
+    /**
+     * 省州名称
+     */
+    private String provinceName;
+
+
+    /**
+     * 城市ID
+     */
+    private Long cityId;
+
+    /**
+     * 城市名称
+     */
+    private String cityName;
+
+    /**
+     * 国家ID
+     */
+    private Long countryId;
 
 }

+ 15 - 0
hx-sale/src/main/java/com/fjhx/sale/entity/sale/po/SaleQuotation.java

@@ -66,6 +66,21 @@ public class SaleQuotation extends BasePo {
     private String sellCityId;
 
     /**
+     * 卖方国家表名称
+     */
+    private String sellCountryName;
+
+    /**
+     * 卖方省份名称
+     */
+    private String sellProvinceName;
+
+    /**
+     * 卖方城市名称
+     */
+    private String sellCityName;
+
+    /**
      * 卖方详细地址
      */
     private String sellAddress;

+ 28 - 1
hx-sale/src/main/java/com/fjhx/sale/entity/sample/dto/SampleDto.java

@@ -1,5 +1,6 @@
 package com.fjhx.sale.entity.sample.dto;
 
+import com.fjhx.area.service.SetCustomizeAreaId;
 import com.fjhx.sale.entity.sample.po.Sample;
 import lombok.Getter;
 import lombok.Setter;
@@ -12,6 +13,32 @@ import lombok.Setter;
  */
 @Getter
 @Setter
-public class SampleDto extends Sample {
+public class SampleDto extends Sample implements SetCustomizeAreaId {
 
+
+    /**
+     * 省 州ID
+     */
+    private Long provinceId;
+
+    /**
+     * 省州名称
+     */
+    private String provinceName;
+
+
+    /**
+     * 城市ID
+     */
+    private Long cityId;
+
+    /**
+     * 城市名称
+     */
+    private String cityName;
+
+    /**
+     * 国家ID
+     */
+    private Long countryId;
 }

+ 18 - 3
hx-sale/src/main/java/com/fjhx/sale/entity/sample/po/Sample.java

@@ -66,6 +66,21 @@ public class Sample extends BasePo {
     private String sellCityId;
 
     /**
+     * 卖方国家表名称
+     */
+    private String sellCountryName;
+
+    /**
+     * 卖方省份名称
+     */
+    private String sellProvinceName;
+
+    /**
+     * 卖方城市名称
+     */
+    private String sellCityName;
+
+    /**
      * 卖方详细地址
      */
     private String sellAddress;
@@ -88,17 +103,17 @@ public class Sample extends BasePo {
     /**
      * 买方国家表id
      */
-    private String buyCountryId;
+    private Long buyCountryId;
 
     /**
      * 买方省份id
      */
-    private String buyProvinceId;
+    private Long buyProvinceId;
 
     /**
      * 买方城市id
      */
-    private String buyCityId;
+    private Long buyCityId;
 
     /**
      * 买方详细地址

+ 10 - 4
hx-sale/src/main/java/com/fjhx/sale/entity/serviceContract/po/ServiceContract.java

@@ -56,10 +56,6 @@ public class ServiceContract extends BasePo {
      */
     private String sellProvinceId;
 
-    /**
-     * 卖方省份名称
-     */
-    private String sellProvinceName;
 
     /**
      * 卖方城市id
@@ -67,6 +63,16 @@ public class ServiceContract extends BasePo {
     private String sellCityId;
 
     /**
+     * 卖方国家表名称
+     */
+    private String sellCountryName;
+
+    /**
+     * 卖方省份名称
+     */
+    private String sellProvinceName;
+
+    /**
      * 卖方城市名称
      */
     private String sellCityName;

+ 10 - 1
hx-sale/src/main/java/com/fjhx/sale/flow/ContractFlow.java

@@ -7,14 +7,17 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.enums.FlowStatusEnum;
 import com.fjhx.file.utils.ObsFileUtil;
 import com.fjhx.flow.core.FlowDelegate;
+import com.fjhx.sale.entity.contract.dto.ContractDto;
 import com.fjhx.sale.entity.contract.po.Contract;
 import com.fjhx.sale.entity.contract.po.ContractProduct;
 import com.fjhx.sale.entity.contract.po.ContractProject;
 import com.fjhx.sale.entity.contract.po.ContractShipment;
+import com.fjhx.sale.entity.serviceContract.dto.ServiceContractDto;
 import com.fjhx.sale.service.contract.ContractProductService;
 import com.fjhx.sale.service.contract.ContractProjectService;
 import com.fjhx.sale.service.contract.ContractService;
@@ -57,10 +60,16 @@ public class ContractFlow extends FlowDelegate {
         ContractProductService contractProductService = SpringUtil.getBean(ContractProductService.class);
         ContractProjectService contractProjectService = SpringUtil.getBean(ContractProjectService.class);
         ContractShipmentService contractShipmentService = SpringUtil.getBean(ContractShipmentService.class);
-        Contract contract = submitData.toJavaObject(Contract.class);
+        ContractDto contract = submitData.toJavaObject(ContractDto.class);
+        //赋值城市省份信息
+        CustomizeAreaUtil.setAreaId(contract);
         contract.setCode(CodeEnum.CONTRACT.getCode());
         contract.setUserName(SecurityUtils.getUsername());
         contract.setStatus(FlowStatusEnum.UNDER_REVIEW.getKey());
+        contract.setBuyCityId(contract.getCityId());
+        contract.setBuyCountryId(contract.getCountryId());
+        contract.setBuyProvinceId(contract.getProvinceId());
+
         contractService.save(contract);
         List<ContractProduct> contractProductList = contract.getContractProductList();
         if(CollectionUtils.isNotEmpty(contractProductList)){//保存合同产品

+ 9 - 1
hx-sale/src/main/java/com/fjhx/sale/flow/EhsdPurchaseFlow.java

@@ -7,7 +7,9 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.common.constant.SourceConstant;
+import com.fjhx.sale.entity.purchase.dto.EhsdPurchaseDto;
 import com.fjhx.sale.entity.purchase.po.*;
 import com.fjhx.sale.service.purchase.*;
 import com.fjhx.sale.util.code.CodeEnum;
@@ -76,7 +78,13 @@ public class EhsdPurchaseFlow extends FlowDelegate {
     @Override
     @DSTransactional
     public Long start(Long flowId, JSONObject submitData) {
-        EhsdPurchase purchase = submitData.toJavaObject(EhsdPurchase.class);
+        EhsdPurchaseDto purchase = submitData.toJavaObject(EhsdPurchaseDto.class);
+        //赋值城市省份信息
+        CustomizeAreaUtil.setAreaId(purchase);
+        purchase.setBuyCityId(purchase.getCityId());
+        purchase.setBuyCountryId(purchase.getCountryId());
+        purchase.setBuyProvinceId(purchase.getProvinceId());
+
         purchase.setCode(CodeEnum.PURCHASE.getCode());
         purchase.setStatus(PurchaseStatusEnum.UNDER_REVIEW.getKey());
         purchase.setUserName(SecurityUtils.getUsername());

+ 6 - 0
hx-sale/src/main/java/com/fjhx/sale/flow/SaleQuotationFlow.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.flow.core.FlowDelegate;
 import com.fjhx.sale.entity.quotation.po.QuotationPay;
@@ -44,6 +45,11 @@ public class SaleQuotationFlow extends FlowDelegate {
         QuotationPayService quotationPayService = SpringUtil.getBean(QuotationPayService.class);
         QuotationProductService quotationProductService = SpringUtil.getBean(QuotationProductService.class);
         SaleQuotationDto saleQuotation = submitData.toJavaObject(SaleQuotationDto.class);
+        //赋值城市省份信息
+        CustomizeAreaUtil.setAreaId(saleQuotation);
+        saleQuotation.setBuyCityId(saleQuotation.getCityId());
+        saleQuotation.setBuyCountryId(saleQuotation.getCountryId());
+        saleQuotation.setBuyProvinceId(saleQuotation.getProvinceId());
         //添加报价编码
         saleQuotation.setCode(CodeEnum.SALE_QUOTATION.getCode());
         //添加报价状态

+ 12 - 1
hx-sale/src/main/java/com/fjhx/sale/flow/SampleFlow.java

@@ -7,8 +7,11 @@ import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.fjhx.area.utils.CustomizeAreaUtil;
 import com.fjhx.common.constant.SourceConstant;
 import com.fjhx.common.enums.FlowStatusEnum;
+import com.fjhx.sale.entity.contract.dto.ContractDto;
+import com.fjhx.sale.entity.sample.dto.SampleDto;
 import com.fjhx.sale.entity.sample.po.Sample;
 import com.fjhx.sale.entity.sample.po.SampleProduct;
 import com.fjhx.sale.entity.sample.po.SampleProject;
@@ -58,10 +61,18 @@ public class SampleFlow extends FlowDelegate {
         SampleProductService sampleProductService = SpringUtil.getBean(SampleProductService.class);
         SampleProjectService sampleProjectService = SpringUtil.getBean(SampleProjectService.class);
         SampleShipmentService sampleShipmentService = SpringUtil.getBean(SampleShipmentService.class);
-        Sample sample = submitData.toJavaObject(Sample.class);
+//        Sample sample = submitData.toJavaObject(Sample.class);
+
+        SampleDto sample = submitData.toJavaObject(SampleDto.class);
+        //赋值城市省份信息
+        CustomizeAreaUtil.setAreaId(sample);
+        sample.setBuyCityId(sample.getCityId());
+        sample.setBuyCountryId(sample.getCountryId());
+        sample.setBuyProvinceId(sample.getProvinceId());
         sample.setCode(CodeEnum.SAMPLE_CODE.getCode());
         sample.setStatus(FlowStatusEnum.UNDER_REVIEW.getKey());
         sample.setUserName(SecurityUtils.getUsername());
+
         sampleService.save(sample);
         List<SampleProduct> sampleProductList = sample.getSampleProductList();
         if(CollectionUtils.isNotEmpty(sampleProductList)){//保存样品单产品

+ 4 - 4
hx-sale/src/main/java/com/fjhx/sale/service/contract/impl/ContractServiceImpl.java

@@ -646,10 +646,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
         List<Long> areaIdList = Arrays.asList(
                 contract.getBuyCountryId(),
                 contract.getBuyProvinceId(),
-                contract.getBuyCityId(),
-                contract.getSellCountryId(),
-                contract.getSellProvinceId(),
-                contract.getSellCityId()
+                contract.getBuyCityId()
         );
 
         Map<Long, String> areaMap = CustomizeAreaUtil.getAreaMapByIds(areaIdList);
@@ -813,6 +810,9 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
 
         CustomizeAreaUtil.setAreaId(Arrays.asList(setCustomizeAreaId1, setCustomizeAreaId2));
 
+
+        CustomizeAreaUtil.setAreaId(Arrays.asList(setCustomizeAreaId1));
+
     }
 
 }

+ 1 - 33
hx-sale/src/main/resources/mapper/sale/SaleQuotationMapper.xml

@@ -3,39 +3,7 @@
 <mapper namespace="com.fjhx.sale.mapper.sale.SaleQuotationMapper">
     <select id="getPage" resultType="com.fjhx.sale.entity.sale.vo.SaleQuotationVo">
         select
-            sq.id,
-            sq.contract_template_id,
-            sq.code,
-            sq.status,
-            sq.sell_corporation_id,
-            sq.sell_contact_name,
-            sq.sell_contact_number,
-            sq.sell_country_id,
-            sq.sell_province_id,
-            sq.sell_city_id,
-            sq.sell_address,
-            sq.buy_corporation_id,
-            sq.buy_contact_name,
-            sq.buy_contact_number,
-            sq.buy_country_id,
-            sq.buy_province_id,
-            sq.buy_city_id,
-            sq.buy_address,
-            sq.buy_postal_code,
-            sq.currency,
-            sq.amount,
-            sq.payment_method,
-            sq.trade_methods,
-            sq.advance_ratio,
-            sq.transport_method,
-            sq.transport_remark,
-            sq.effective,
-            sq.warranty,
-            sq.remark,
-            sq.create_user,
-            sq.create_time,
-            sq.update_user,
-            sq.update_time
+         *
         from sale_quotation sq
             ${ew.customSqlSegment}
     </select>

+ 29 - 38
hx-wms/src/main/java/com/fjhx/wms/service/stock/impl/StockServiceImpl.java

@@ -353,52 +353,43 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
 
         List<StockJournalDetails> stockJournalDetailsList = new ArrayList<>();
         for (Stock stock : list) {
-            Stock newStocks = new Stock();
-            newStocks.setWarehouseId(warehouseId);
-            newStocks.setProductId(stock.getProductId());
-            if (ObjectUtil.isEmpty(stock.getQuantity())) {
-                //判断传操作的库存是否为空 空赋值0
-                stock.setQuantity(BigDecimal.ZERO);
+            Stock oldStocks = stockMap.get(stock.getProductId());
+            //如果库存不存在 就创建一条空库存
+            if (ObjectUtil.isEmpty(oldStocks)) {
+                oldStocks = new Stock();
+                oldStocks.setProductId(stock.getProductId());
+                oldStocks.setWarehouseId(warehouseId);
+                oldStocks.setQuantity(BigDecimal.ZERO);
             }
-            newStocks.setQuantity(stock.getQuantity());
 
-            //合并库存数量
-            Stock oldStocks = stockMap.get(stock.getProductId());
-            //用来存储操作数据
-            if (ObjectUtil.isNotEmpty(oldStocks)) {
-                BigDecimal quantity = oldStocks.getQuantity();
-                if (type == 1) {
-                    //入库库存相加
-                    quantity = quantity.add(stock.getQuantity());
-                } else if (type == 2) {
-                    //出库库存相减
-                    quantity = quantity.subtract(stock.getQuantity());
-                    if (quantity.compareTo(BigDecimal.ZERO) < 0) {
-                        throw new ServiceException("库存不足无法出库");
-                    }
-                } else if (type == 3) {
-                    //维多利亚入库增加冻结库存
-                    String victoriatouristJson = oldStocks.getVictoriatouristJson();
-                    JSONObject json = ObjectUtil.isEmpty(victoriatouristJson) ? new JSONObject() : JSONObject.parseObject(victoriatouristJson);
-                    BigDecimal frozenQuantity = json.getBigDecimal("frozenQuantity");
-                    frozenQuantity = frozenQuantity == null ? BigDecimal.ZERO : frozenQuantity;
-                    frozenQuantity = frozenQuantity.add(stock.getQuantity());
-                    json.put("frozenQuantity", frozenQuantity);
-                    newStocks.setVictoriatouristJson(json.toJSONString());
-                } else {
-                    throw new ServiceException("未知库存操作类型");
-                }
-                newStocks.setId(oldStocks.getId());
-                newStocks.setQuantity(quantity);
+            if (type == 1) {
+                //入库库存相加
+                BigDecimal quantity = oldStocks.getQuantity().add(stock.getQuantity());
+                oldStocks.setQuantity(quantity);
             } else if (type == 2) {
+                //出库库存相减
                 ProductInfo productInfo = productInfoService.getById(stock.getProductId());
                 if (productInfo == null) {
                     throw new ServiceException("产品id:" + stock.getProductId() + "不存在");
                 }
-                throw new ServiceException("以下商品库存不足,无法出库:" + productInfo.getName());
+                BigDecimal quantity = oldStocks.getQuantity().subtract(stock.getQuantity());
+                if (quantity.compareTo(BigDecimal.ZERO) < 0) {
+                    throw new ServiceException("以下商品库存不足,无法出库:" + productInfo.getName());
+                }
+                oldStocks.setQuantity(quantity);
+            } else if (type == 3) {
+                //维多利亚待入库增加冻结库存
+                String victoriatouristJson = oldStocks.getVictoriatouristJson();
+                JSONObject json = ObjectUtil.isEmpty(victoriatouristJson) ? new JSONObject() : JSONObject.parseObject(victoriatouristJson);
+                BigDecimal frozenQuantity = json.getBigDecimal("frozenQuantity");
+                frozenQuantity = frozenQuantity == null ? BigDecimal.ZERO : frozenQuantity;
+                frozenQuantity = frozenQuantity.add(stock.getQuantity());
+                json.put("frozenQuantity", frozenQuantity);
+                oldStocks.setVictoriatouristJson(json.toJSONString());
+            } else {
+                throw new ServiceException("未知库存操作类型");
             }
-
-            data.add(newStocks);
+            data.add(oldStocks);
             //创建出入库明细
             StockJournalDetails stockJournalDetails = new StockJournalDetailsDto();
             stockJournalDetails.setStockJournalId(stockJournalId);