From 9c1e4091094c6b588c3fd998dbad3dc4fbd04a57 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Tue, 02 Aug 2022 10:11:23 +0800
Subject: [PATCH] 新增加工产品库存,删除加工记录表中数据,农产品和加工产品数据回滚

---
 src/main/java/org/springblade/modules/InventoryLoss/controller/InventoryController.java       |   27 ++
 src/main/java/org/springblade/modules/processInv/controller/ProcessInvController.java         |  127 +++++++++++
 src/main/java/org/springblade/modules/farmplant/service/FarmProductStockService.java          |    8 
 src/main/java/org/springblade/modules/processInv/vo/ProcessInvVO.java                         |   46 ++++
 src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.java            |    8 
 src/main/java/org/springblade/modules/process/controller/ProcessController.java               |   34 +++
 src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.xml             |    7 
 src/main/java/org/springblade/modules/processInv/mapper/ProcessInvMapper.xml                  |   62 +++++
 src/main/java/org/springblade/modules/processInv/entity/ProcessInv.java                       |   53 ++++
 src/main/java/org/springblade/modules/sale/controller/SaleController.java                     |   27 ++
 src/main/java/org/springblade/modules/processInv/dto/ProcessInvDTO.java                       |   34 +++
 src/main/java/org/springblade/modules/processInv/service/impl/ProcessInvServiceImpl.java      |   79 +++++++
 src/main/java/org/springblade/modules/processInv/mapper/ProcessInvMapper.java                 |   52 ++++
 src/main/java/org/springblade/modules/processInv/service/IProcessInvService.java              |   61 +++++
 src/main/java/org/springblade/modules/farmplant/service/impl/FarmProductStockServiceImpl.java |    5 
 src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml                        |    2 
 16 files changed, 622 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/springblade/modules/InventoryLoss/controller/InventoryController.java b/src/main/java/org/springblade/modules/InventoryLoss/controller/InventoryController.java
index c1d0851..ebd86c8 100644
--- a/src/main/java/org/springblade/modules/InventoryLoss/controller/InventoryController.java
+++ b/src/main/java/org/springblade/modules/InventoryLoss/controller/InventoryController.java
@@ -33,9 +33,12 @@
 import org.springblade.modules.InventoryLoss.service.InventoryService;
 import org.springblade.modules.InventoryLoss.vo.InventoryVO;
 import org.springblade.modules.process.service.IProcessService;
+import org.springblade.modules.processInv.entity.ProcessInv;
+import org.springblade.modules.processInv.service.IProcessInvService;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.Date;
 
 /**
  * 库存损耗记录表 控制器
@@ -51,8 +54,8 @@
 
 	private final InventoryService inventoryService;
 	private final FarmProductStockService farmProductStockService;
-	private final IProcessService processService;
-
+//	private final IProcessService processService;
+	private final IProcessInvService processInvService;
 	/**
 	 * 详情
 	 */
@@ -124,18 +127,32 @@
 	}
 
 	/**
-	 * 新增或修改 库存损耗记录表
+	 * 新增或修改 库存损耗记录表(加工产品)
 	 */
 	@PostMapping("/submitProcess")
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "新增或修改", notes = "传入sale")
 	public R submitProcess(@Valid @RequestBody InventoryVO inventory) {
-		boolean res = processService.stockCompare(inventory.getSaleNum(),inventory.getProid());
+//		boolean res = processService.stockCompare(inventory.getSaleNum(),inventory.getProid());
+//		if (!res){
+//			throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前库存不足!"));
+//		}else {
+//			//库存充足,减去相应库存
+//			processService.stockReduce(inventory.getSaleNum(),inventory.getProid());
+//		}
+//		return R.status(inventoryService.saveOrUpdate(inventory));
+		boolean res = processInvService.stockCompare(inventory.getSaleNum(),inventory.getProid());
 		if (!res){
 			throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前库存不足!"));
 		}else {
 			//库存充足,减去相应库存
-			processService.stockReduce(inventory.getSaleNum(),inventory.getProid());
+			processInvService.stockReduce(inventory.getSaleNum(),inventory.getProid());
+			//更新updateTIme 和 updateUser
+			ProcessInv processInv = new ProcessInv();
+			processInv.setUpdateUser(inventory.getCreateUser());
+			processInv.setUpdateTime(new Date());
+			processInv.setId(Long.parseLong(inventory.getProid()));
+			processInvService.updateById(processInv);
 		}
 		return R.status(inventoryService.saveOrUpdate(inventory));
 	}
diff --git a/src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.java b/src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.java
index 2df6b9a..71199ac 100644
--- a/src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.java
+++ b/src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.java
@@ -45,4 +45,12 @@
 	List<Map<String, Double>> statisticsYield(String year,String deptId);
 	boolean stockCompare(double sale,String id);
 	boolean stockReduce(double sale,String id);
+
+	/**
+	 * 查找对应数据
+	 * @param strainId 品种id
+	 * @param landId 地块id
+	 * @return
+	 */
+	FarmProductStock selectBy2Id(@Param("strainId") String strainId, @Param("landId") String landId);
 }
diff --git a/src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.xml b/src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.xml
index 47e9e81..4fdd274 100644
--- a/src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.xml
+++ b/src/main/java/org/springblade/modules/farmplant/mapper/FarmProductStockMapper.xml
@@ -382,10 +382,17 @@
         WHERE
             id = #{id}
     </select>
+
     <!--减去对应库存-->
     <update id="stockReduce">
         UPDATE sys_farm_product_stock SET weight = weight - #{sale}
         WHERE
             id = #{id}
     </update>
+
+    <select id="selectBy2Id" resultType="org.springblade.modules.farmplant.entity.FarmProductStock">
+        SELECT id,strain_id,weight,leaves,time,operator,remark,
+               create_time,farm_plant_id,dept_id,tenant_id,recovery,land_id
+        FROM sys_farm_product_stock  WHERE strain_id = #{strainId} AND land_id = #{landId}
+    </select>
 </mapper>
diff --git a/src/main/java/org/springblade/modules/farmplant/service/FarmProductStockService.java b/src/main/java/org/springblade/modules/farmplant/service/FarmProductStockService.java
index 6bea074..1c04cdd 100644
--- a/src/main/java/org/springblade/modules/farmplant/service/FarmProductStockService.java
+++ b/src/main/java/org/springblade/modules/farmplant/service/FarmProductStockService.java
@@ -45,4 +45,12 @@
 	boolean stockCompare(double sale,String id);
 	//减去相应库存
 	boolean stockReduce(double sale,String id);
+
+	/**
+	 * 查找对应数据
+	 * @param strainId 品种id
+	 * @param landId 地块id
+	 * @return
+	 */
+	FarmProductStock selectBy2Id(String strainId, String landId);
 }
diff --git a/src/main/java/org/springblade/modules/farmplant/service/impl/FarmProductStockServiceImpl.java b/src/main/java/org/springblade/modules/farmplant/service/impl/FarmProductStockServiceImpl.java
index c502f69..1fc8b8f 100644
--- a/src/main/java/org/springblade/modules/farmplant/service/impl/FarmProductStockServiceImpl.java
+++ b/src/main/java/org/springblade/modules/farmplant/service/impl/FarmProductStockServiceImpl.java
@@ -109,4 +109,9 @@
 	public boolean stockReduce(double sale,String id) {
 		return baseMapper.stockReduce(sale,id);
 	}
+
+	@Override
+	public FarmProductStock selectBy2Id(String strainId, String landId) {
+		return baseMapper.selectBy2Id(strainId,landId);
+	}
 }
diff --git a/src/main/java/org/springblade/modules/process/controller/ProcessController.java b/src/main/java/org/springblade/modules/process/controller/ProcessController.java
index 7e3cb38..d3ff6a8 100644
--- a/src/main/java/org/springblade/modules/process/controller/ProcessController.java
+++ b/src/main/java/org/springblade/modules/process/controller/ProcessController.java
@@ -28,7 +28,10 @@
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.modules.farmplant.entity.FarmProductStock;
 import org.springblade.modules.farmplant.service.FarmProductStockService;
+import org.springblade.modules.processInv.entity.ProcessInv;
+import org.springblade.modules.processInv.service.IProcessInvService;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -36,6 +39,8 @@
 import org.springblade.modules.process.vo.ProcessVO;
 import org.springblade.modules.process.service.IProcessService;
 import org.springblade.core.boot.ctrl.BladeController;
+
+import java.util.Date;
 
 /**
  * 加工记录表 控制器
@@ -51,6 +56,7 @@
 
 	private final IProcessService processService;
 	private final FarmProductStockService farmProductStockService;
+	private final IProcessInvService processInvService;
 	/**
 	 * 详情
 	 */
@@ -117,6 +123,13 @@
 		}else {
 			//库存充足,减去相应库存
 			farmProductStockService.stockReduce(process.getSaleNum(),process.getProid());
+			//向加工产品库存表中添加数据
+			ProcessInv processInv = new ProcessInv();
+			processInv.setProductId(Long.parseLong(process.getProcessId()));
+			processInv.setProductInventoryNum(process.getProcessNum());
+			processInv.setStrainId(Long.parseLong(process.getStrainId()));
+			processInv.setUpdateUser(process.getCreateUser());
+			processInvService.insertOrUpdate(processInv);
 		}
 		return R.status(processService.saveOrUpdate(process));
 	}
@@ -129,6 +142,27 @@
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "逻辑删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		//对加工产品库存和农产品库存进行回滚
+		Process process = processService.getById(Long.parseLong(ids));
+		//通过strainId和landId 确定是由哪一个品种库存加工而来
+		FarmProductStock farmProductStock = farmProductStockService.selectBy2Id(process.getStrainId(),process.getLandId());
+		//通过strainId和processId(processId为产品id)确定对应的加工库存
+		ProcessInv processInv = processInvService.selectBy2Id(process.getStrainId(),process.getProcessId());
+		//农产品增加相应库存
+		Double weight = Double.parseDouble(farmProductStock.getWeight())+process.getSaleNum();
+		farmProductStock.setWeight(weight.toString());
+		farmProductStockService.updateById(farmProductStock);
+		//加工产品减少对应库存
+		Double num = processInv.getProductInventoryNum()-process.getProcessNum();
+		if (num<=0){
+			//删除对应库存
+//			processInvService.del(processInv.getId());
+			throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前库存不足,不能删除数据!"));
+		}else {
+			//更新库存
+			processInv.setProductInventoryNum(num);
+			processInvService.updateById(processInv);
+		}
 		return R.status(processService.deleteLogic(Func.toLongList(ids)));
 	}
 
diff --git a/src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml b/src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml
index 7b00f08..d6c8197 100644
--- a/src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml
+++ b/src/main/java/org/springblade/modules/process/mapper/ProcessMapper.xml
@@ -39,7 +39,7 @@
         <if test="process.strainId !=null and process.strainId !=''">
             and p.strain_id = #{process.strainId}
         </if>
-        GROUP BY p.strain_id,m.machining_type,m.machining_tp,p.land_id,sale_time,sale_num,process_id,p.id
+        GROUP BY p.strain_id,m.machining_type,m.machining_tp,p.land_id,sale_time,sale_num,process_id,p.id ORDER BY p.create_time DESC
     </select>
 
     <select id="stockCompare" resultType="boolean">
diff --git a/src/main/java/org/springblade/modules/processInv/controller/ProcessInvController.java b/src/main/java/org/springblade/modules/processInv/controller/ProcessInvController.java
new file mode 100644
index 0000000..0b57c00
--- /dev/null
+++ b/src/main/java/org/springblade/modules/processInv/controller/ProcessInvController.java
@@ -0,0 +1,127 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.processInv.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.modules.processInv.entity.ProcessInv;
+import org.springblade.modules.processInv.service.IProcessInvService;
+import org.springblade.modules.processInv.vo.ProcessInvVO;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.RequestParam;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 加工库存表 控制器
+ *
+ * @author BladeX
+ * @since 2022-08-01
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/processinv/processinv")
+@Api(value = "加工库存表", tags = "加工库存表接口")
+public class ProcessInvController extends BladeController {
+
+	private final IProcessInvService processInvService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入processInv")
+	public R<ProcessInv> detail(ProcessInv processInv) {
+		ProcessInv detail = processInvService.getOne(Condition.getQueryWrapper(processInv));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 加工库存表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入processInv")
+	public R<IPage<ProcessInv>> list(ProcessInv processInv, Query query) {
+		IPage<ProcessInv> pages = processInvService.page(Condition.getPage(query), Condition.getQueryWrapper(processInv));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 加工库存表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入processInv")
+	public R<IPage<ProcessInvVO>> page(ProcessInvVO processInv, Query query) {
+		IPage<ProcessInvVO> pages = processInvService.selectProcessInvPage(Condition.getPage(query), processInv);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 加工库存表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入processInv")
+	public R save(@Valid @RequestBody ProcessInv processInv) {
+		return R.status(processInvService.save(processInv));
+	}
+
+	/**
+	 * 修改 加工库存表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入processInv")
+	public R update(@Valid @RequestBody ProcessInv processInv) {
+		return R.status(processInvService.updateById(processInv));
+	}
+
+	/**
+	 * 新增或修改 加工库存表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入processInv")
+	public R submit(@Valid @RequestBody ProcessInv processInv) {
+		return R.status(processInvService.saveOrUpdate(processInv));
+	}
+
+
+	/**
+	 * 删除 加工库存表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "逻辑删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(processInvService.deleteLogic(Func.toLongList(ids)));
+	}
+
+
+}
diff --git a/src/main/java/org/springblade/modules/processInv/dto/ProcessInvDTO.java b/src/main/java/org/springblade/modules/processInv/dto/ProcessInvDTO.java
new file mode 100644
index 0000000..1013d60
--- /dev/null
+++ b/src/main/java/org/springblade/modules/processInv/dto/ProcessInvDTO.java
@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.processInv.dto;
+
+import org.springblade.modules.processInv.entity.ProcessInv;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 加工库存表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2022-08-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProcessInvDTO extends ProcessInv {
+	private static final long serialVersionUID = 1L;
+
+}
diff --git a/src/main/java/org/springblade/modules/processInv/entity/ProcessInv.java b/src/main/java/org/springblade/modules/processInv/entity/ProcessInv.java
new file mode 100644
index 0000000..a114d48
--- /dev/null
+++ b/src/main/java/org/springblade/modules/processInv/entity/ProcessInv.java
@@ -0,0 +1,53 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.processInv.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import org.springblade.core.mp.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 加工库存表实体类
+ *
+ * @author BladeX
+ * @since 2022-08-01
+ */
+@Data
+@TableName("sys_process_inv")
+@EqualsAndHashCode(callSuper = true)
+public class ProcessInv extends BaseEntity {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	* 品种id
+	*/
+	private Long strainId;
+	/**
+	* 产品id 关联sys_machining加工管理表
+	*/
+	private Long productId;
+	/**
+	* 产品库存数量
+	*/
+	private Double productInventoryNum;
+
+
+}
diff --git a/src/main/java/org/springblade/modules/processInv/mapper/ProcessInvMapper.java b/src/main/java/org/springblade/modules/processInv/mapper/ProcessInvMapper.java
new file mode 100644
index 0000000..41b4605
--- /dev/null
+++ b/src/main/java/org/springblade/modules/processInv/mapper/ProcessInvMapper.java
@@ -0,0 +1,52 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.processInv.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.springblade.modules.processInv.entity.ProcessInv;
+import org.springblade.modules.processInv.vo.ProcessInvVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 加工库存表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2022-08-01
+ */
+public interface ProcessInvMapper extends BaseMapper<ProcessInv> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param processInv
+	 * @return
+	 */
+	List<ProcessInvVO> selectProcessInvPage(IPage page, ProcessInvVO processInv);
+
+	ProcessInv selectBy2Id(@Param("strainId") Long strainId, @Param("productId") Long productId);
+
+	Boolean add(@Param("processInv") ProcessInv processInv1);
+
+	boolean stockCompare(@Param("saleNum") Double saleNum, @Param("proid") String proid);
+
+	Boolean stockReduce(@Param("saleNum") Double saleNum, @Param("proid") String proid);
+
+	Boolean del(Long id);
+}
diff --git a/src/main/java/org/springblade/modules/processInv/mapper/ProcessInvMapper.xml b/src/main/java/org/springblade/modules/processInv/mapper/ProcessInvMapper.xml
new file mode 100644
index 0000000..6f0bf14
--- /dev/null
+++ b/src/main/java/org/springblade/modules/processInv/mapper/ProcessInvMapper.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.modules.processInv.mapper.ProcessInvMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="processInvResultMap" type="org.springblade.modules.processInv.vo.ProcessInvVO">
+        <result column="id" property="id"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="strain_id" property="strainId"/>
+        <result column="product_id" property="productId"/>
+        <result column="product_inventory_num" property="productInventoryNum"/>
+        <result column="machining_tp" property="tpurl"/>
+        <result column="machining_type" property="processName"/>
+        <result column="strain_name" property="strainName"/>
+    </resultMap>
+
+    <select id="selectProcessInvPage" resultMap="processInvResultMap">
+        select inv.*,m.machining_tp,
+               m.machining_type,strain_name
+        from sys_process_inv inv
+        LEFT JOIN sys_machining m ON m.id = inv.product_id
+        LEFT JOIN sys_strain strain ON strain.id = inv.strain_id
+        where inv.is_deleted = 0
+    </select>
+
+    <select id="selectBy2Id" resultType="org.springblade.modules.processInv.entity.ProcessInv">
+        SELECT id,strain_id,product_id,product_inventory_num,create_time,update_user,update_time,status,is_deleted
+        FROM sys_process_inv WHERE strain_id = #{strainId} AND product_id = #{productId}
+    </select>
+
+    <insert id="add">
+        INSERT INTO sys_process_inv (strain_id,product_id,product_inventory_num,create_time,status,is_deleted)
+        VALUES (#{processInv.strainId},#{processInv.productId},#{processInv.productInventoryNum},NOW(),1,0)
+    </insert>
+
+    <select id="stockCompare" resultType="java.lang.Boolean">
+        SELECT
+            CASE
+                WHEN
+                    product_inventory_num > #{saleNum} THEN
+                    TRUE ELSE FALSE
+                END result
+        FROM
+            sys_process_inv
+        WHERE
+            id = #{proid}
+    </select>
+
+    <update id="stockReduce">
+        UPDATE sys_process_inv SET product_inventory_num = product_inventory_num - #{saleNum}
+        WHERE
+            id = #{proid}
+    </update>
+
+    <delete id="del">
+        DELETE FROM sys_process_inv WHERE id = #{id}
+    </delete>
+</mapper>
diff --git a/src/main/java/org/springblade/modules/processInv/service/IProcessInvService.java b/src/main/java/org/springblade/modules/processInv/service/IProcessInvService.java
new file mode 100644
index 0000000..d27a036
--- /dev/null
+++ b/src/main/java/org/springblade/modules/processInv/service/IProcessInvService.java
@@ -0,0 +1,61 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.processInv.service;
+
+import org.springblade.modules.processInv.entity.ProcessInv;
+import org.springblade.modules.processInv.vo.ProcessInvVO;
+import org.springblade.core.mp.base.BaseService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 加工库存表 服务类
+ *
+ * @author BladeX
+ * @since 2022-08-01
+ */
+public interface IProcessInvService extends BaseService<ProcessInv> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param processInv
+	 * @return
+	 */
+	IPage<ProcessInvVO> selectProcessInvPage(IPage<ProcessInvVO> page, ProcessInvVO processInv);
+
+	Boolean insertOrUpdate(ProcessInv processInv);
+
+	boolean stockCompare(Double saleNum, String proid);
+
+	Boolean stockReduce(Double saleNum, String proid);
+
+	/**
+	 * 查找对应数据
+	 * @param strainId 品种id
+	 * @param processId	产品id
+	 * @return
+	 */
+	ProcessInv selectBy2Id(String strainId, String processId);
+
+	/**
+	 * 彻底删除
+	 * @param id 主键
+	 * @return
+	 */
+	Boolean del(Long id);
+}
diff --git a/src/main/java/org/springblade/modules/processInv/service/impl/ProcessInvServiceImpl.java b/src/main/java/org/springblade/modules/processInv/service/impl/ProcessInvServiceImpl.java
new file mode 100644
index 0000000..9fe23a2
--- /dev/null
+++ b/src/main/java/org/springblade/modules/processInv/service/impl/ProcessInvServiceImpl.java
@@ -0,0 +1,79 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.processInv.service.impl;
+
+import org.springblade.modules.processInv.entity.ProcessInv;
+import org.springblade.modules.processInv.mapper.ProcessInvMapper;
+import org.springblade.modules.processInv.service.IProcessInvService;
+import org.springblade.modules.processInv.vo.ProcessInvVO;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.Date;
+
+/**
+ * 加工库存表 服务实现类
+ *
+ * @author BladeX
+ * @since 2022-08-01
+ */
+@Service
+public class ProcessInvServiceImpl extends BaseServiceImpl<ProcessInvMapper, ProcessInv> implements IProcessInvService {
+
+	@Override
+	public IPage<ProcessInvVO> selectProcessInvPage(IPage<ProcessInvVO> page, ProcessInvVO processInv) {
+		return page.setRecords(baseMapper.selectProcessInvPage(page, processInv));
+	}
+
+	@Override
+	public Boolean insertOrUpdate(ProcessInv processInv) {
+		//通过strainId和productId查询对应数据
+		ProcessInv processInv1 = baseMapper.selectBy2Id(processInv.getStrainId(),processInv.getProductId());
+		if (processInv1 != null){
+			//当存在该数据时,修改
+			processInv1.setProductInventoryNum(processInv1.getProductInventoryNum()+processInv.getProductInventoryNum());
+			processInv1.setUpdateTime(new Date());
+			processInv1.setUpdateUser(processInv.getUpdateUser());
+			return baseMapper.updateById(processInv1)>0;
+		}else {
+			//不存在该数据时添加
+			return baseMapper.add(processInv);
+		}
+	}
+
+	@Override
+	public boolean stockCompare(Double saleNum, String proid) {
+		return baseMapper.stockCompare(saleNum,proid);
+	}
+
+	@Override
+	public Boolean stockReduce(Double saleNum, String proid) {
+		return baseMapper.stockReduce(saleNum,proid);
+	}
+
+	@Override
+	public ProcessInv selectBy2Id(String strainId, String processId) {
+		return baseMapper.selectBy2Id(Long.parseLong(strainId),Long.parseLong(processId));
+	}
+
+	@Override
+	public Boolean del(Long id) {
+		return baseMapper.del(id);
+	}
+
+}
diff --git a/src/main/java/org/springblade/modules/processInv/vo/ProcessInvVO.java b/src/main/java/org/springblade/modules/processInv/vo/ProcessInvVO.java
new file mode 100644
index 0000000..a0ea54d
--- /dev/null
+++ b/src/main/java/org/springblade/modules/processInv/vo/ProcessInvVO.java
@@ -0,0 +1,46 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.modules.processInv.vo;
+
+import org.springblade.modules.processInv.entity.ProcessInv;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 加工库存表视图实体类
+ *
+ * @author BladeX
+ * @since 2022-08-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProcessInvVO extends ProcessInv {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 加工产品图片
+	 */
+	private String tpurl;
+	/**
+	 * 加工产品名
+	 */
+	private String processName;
+	/**
+	 * 品种名
+	 */
+	private String strainName;
+}
diff --git a/src/main/java/org/springblade/modules/sale/controller/SaleController.java b/src/main/java/org/springblade/modules/sale/controller/SaleController.java
index 3884491..b6484b2 100644
--- a/src/main/java/org/springblade/modules/sale/controller/SaleController.java
+++ b/src/main/java/org/springblade/modules/sale/controller/SaleController.java
@@ -31,6 +31,8 @@
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.modules.farmplant.service.FarmProductStockService;
 import org.springblade.modules.process.service.IProcessService;
+import org.springblade.modules.processInv.entity.ProcessInv;
+import org.springblade.modules.processInv.service.IProcessInvService;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -38,6 +40,8 @@
 import org.springblade.modules.sale.vo.SaleVO;
 import org.springblade.modules.sale.service.ISaleService;
 import org.springblade.core.boot.ctrl.BladeController;
+
+import java.util.Date;
 
 /**
  * 销售记录表 控制器
@@ -53,8 +57,8 @@
 
 	private final ISaleService saleService;
 	private final FarmProductStockService farmProductStockService;
-	private final IProcessService processService;
-
+//	private final IProcessService processService;
+	private final IProcessInvService processInvService;
 	/**
 	 * 详情
 	 */
@@ -132,13 +136,28 @@
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "新增或修改", notes = "传入sale")
 	public R submitProcess(@Valid @RequestBody SaleVO sale) {
+//		//对比加工表库存量
+//		boolean res = processService.stockCompare(sale.getSaleNum(),sale.getProid());
+//		if (!res){
+//			throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前库存不足!"));
+//		}else {
+//			//库存充足,减去相应库存
+//			processService.stockReduce(sale.getSaleNum(),sale.getProid());
+//		}
+//		return R.status(saleService.saveOrUpdate(sale));
 		//对比加工表库存量
-		boolean res = processService.stockCompare(sale.getSaleNum(),sale.getProid());
+		boolean res = processInvService.stockCompare(sale.getSaleNum(),sale.getProid());
 		if (!res){
 			throw new org.springblade.core.log.exception.ServiceException(StringUtil.format("当前库存不足!"));
 		}else {
 			//库存充足,减去相应库存
-			processService.stockReduce(sale.getSaleNum(),sale.getProid());
+			processInvService.stockReduce(sale.getSaleNum(),sale.getProid());
+			//更新updateTIme 和 updateUser
+			ProcessInv processInv = new ProcessInv();
+			processInv.setUpdateUser(sale.getCreateUser());
+			processInv.setUpdateTime(new Date());
+			processInv.setId(Long.parseLong(sale.getProid()));
+			processInvService.updateById(processInv);
 		}
 		return R.status(saleService.saveOrUpdate(sale));
 	}

--
Gitblit v1.9.3