lazhaoqian 3 лет назад
Родитель
Сommit
c808922737

+ 26 - 0
blade-service-api/blade-check-api/src/main/java/org/springblade/check/entity/AuditProecess.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.check.entity;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.io.Serializable;
 import java.util.Date;
@@ -155,5 +156,30 @@ public class AuditProecess implements Serializable {
 	    private String checkType;
 
 	    private Long corpId;
+	/**
+	 * 数量
+	 */
+		@ApiModelProperty(value = "数量")
+		private BigDecimal orderQuantity;
+	/**
+	 * 金额
+	 */
+		@ApiModelProperty(value = "金额")
+		private BigDecimal amount;
+	/**
+	 * 利润率
+	 */
+		@ApiModelProperty(value = "利润率")
+		private BigDecimal grossProfitRate;
+	/**
+	 * 利润
+	 */
+		@ApiModelProperty(value = "利润")
+		private BigDecimal grossProfit;
+	/**
+	 * 订单备注
+	 */
+		@ApiModelProperty(value = "订单备注")
+		private String orderRemark;
 
 }

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/school/service/impl/SchoolTeacherServiceImpl.java

@@ -476,7 +476,7 @@ public class SchoolTeacherServiceImpl extends ServiceImpl<SchoolTeacherMapper, S
 			schoolTeacher.setCapitalIncrease(capitalIncreaseName.getSalary());
 		}
 		//履约奖标准
-		if (StringUtils.isNotBlank(schoolTeacher.getSalaryWithdrawalStandardName()) && !schoolTeacher.getSalaryWithdrawalStandardName().contains("公办")) {
+		if (StringUtils.isNotBlank(schoolTeacher.getEnjoyOfficeTreatment()) && schoolTeacher.getEnjoyOfficeTreatment().equals("是")) {
 			SchoolConfigItem performanceAward = schoolConfigItemMapper.getConfigMessage(schoolTeacher.getTenantId(), schoolTeacher.getInSection(), null, "履约奖标准", schoolTeacher.getSchoolAge().toString(), null,null);
 			if (performanceAward == null){
 				SchoolConfigItem performanceAwardName = schoolConfigItemMapper.getConfigMessage(schoolTeacher.getTenantId(), schoolTeacher.getInSection(), null, "履约奖标准", null, null,null);

+ 5 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/SalesPolicyItemController.java

@@ -25,6 +25,7 @@ import javax.validation.Valid;
 
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
@@ -66,6 +67,8 @@ public class SalesPolicyItemController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入salesPolicyItem")
 	public R<IPage<SalesPolicyItem>> list(SalesPolicyItem salesPolicyItem, Query query) {
+		salesPolicyItem.setTenantId(SecureUtil.getTenantId());
+		salesPolicyItem.setIsDeleted(0);
 		IPage<SalesPolicyItem> pages = salesPolicyItemService.page(Condition.getPage(query), Condition.getQueryWrapper(salesPolicyItem));
 		return R.data(pages);
 	}
@@ -77,6 +80,8 @@ public class SalesPolicyItemController extends BladeController {
 	@ApiOperationSupport(order = 3)
 	@ApiOperation(value = "分页", notes = "传入salesPolicyItem")
 	public R<IPage<SalesPolicyItemVO>> page(SalesPolicyItemVO salesPolicyItem, Query query) {
+		salesPolicyItem.setTenantId(SecureUtil.getTenantId());
+		salesPolicyItem.setIsDeleted(0);
 		IPage<SalesPolicyItemVO> pages = salesPolicyItemService.selectSalesPolicyItemPage(Condition.getPage(query), salesPolicyItem);
 		return R.data(pages);
 	}

+ 10 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java

@@ -652,6 +652,16 @@ public class OrderController extends BladeController {
 		orderService.passCancel(id);
 		return R.success("操作成功");
 	}
+	/**
+	 * 撤销审核
+	 */
+	@PostMapping("/repealCancel")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
+	public R repealCancel(@ApiParam(value = "订单主表id", required = true) @RequestParam Long id) {
+		orderService.repealCancel(id);
+		return R.success("操作成功");
+	}
 
 	/**
 	 * 更换审批人

+ 6 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -106,6 +106,12 @@ public interface IOrderService extends IService<Order> {
 
 	void passCancel(Long id);
 
+	/**
+	 * 撤销审核
+	 * @param id
+	 */
+	void repealCancel(Long id);
+
 	void changeAuditUser(Long auditId, String auditUserId);
 
 	/**

+ 205 - 7
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java

@@ -607,12 +607,68 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		if (order == null) {
 			throw new SecurityException("审批失败,未查到单据");
 		}
+		if (order.getStatus() != 0){
+			throw new SecurityException("订单已开启审核,请勿重复提交");
+		}
 		//判断是否有审批流,如果审批流已开启就进入审批流,否则直接走申请通过
 		Integer checkFlag = order.getCheckFlag();
 		AuditPathsActs pathsActs = null;
 		if (checkFlag == null) {
 			throw new SecurityException("请核失败:未配置请核标识");
 		}
+		//销售锁定库存
+		if (checkFlag == 2 && SecureUtil.getTenantId().equals("681169")){
+			if (salesOrder.getBillType().equals("XS")) {
+				/**===========================Start 审核通过锁定库存=============================*/
+				//获取此销售订单下,所有明细的库存
+				LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				orderItemsLambdaQueryWrapper
+					.eq(OrderItems::getGoodType, 0)
+					.eq(OrderItems::getPid, salesOrder.getId())
+					.eq(OrderItems::getIsDeleted, 0);
+				List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+				if (CollectionUtils.isNotEmpty(orderItems)) {
+					orderItems.forEach(e -> {
+						StockGoods stockGoods = new StockGoods();
+						stockGoods.setCorpId(e.getCorpId());
+						stockGoods.setGoodsId(e.getItemId());
+						stockGoods.setTenantId(SecureUtil.getTenantId());
+						List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
+						if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
+							throw new SecurityException("锁定库存失败:未查询到库存 或者 存在多条库存记录");
+						}
+						//开始锁定库存,减少可用
+						StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+						if (oneStock == null) {
+							throw new SecurityException("锁定库存失败:未查询到库存信息");
+						}
+						//原单据的订货数量
+						BigDecimal orderQuantity = e.getOrderQuantity();
+						//可用库存
+						BigDecimal surplusRouteQuantity = oneStock.getSurplusRouteQuantity();
+						//锁定库存
+						BigDecimal lockingQuantity = oneStock.getLockingQuantity();
+
+						//判断比较大小
+						if (orderQuantity.compareTo(surplusRouteQuantity) == 1) {
+							throw new SecurityException("锁定库存失败:原单据的订货数量大于可用库存,无法锁定");
+						}
+						if (surplusRouteQuantity == null) {
+							throw new SecurityException("锁定库存失败:可用库存为空,禁止操作");
+						}
+						//减少可用库存
+						oneStock.setSurplusRouteQuantity(surplusRouteQuantity.subtract(orderQuantity == null ? new BigDecimal("0") : orderQuantity));
+						//增加锁定库存
+						oneStock.setLockingQuantity(lockingQuantity == null ? new BigDecimal("0").add(orderQuantity) : lockingQuantity.add(orderQuantity));
+						//更新库存
+						R r = stockGoodsClient.updateStock(oneStock);
+						if (!r.isSuccess()) {
+							throw new SecurityException("锁定库存失败: 更新失败");
+						}
+					});
+				}
+			}
+		}
 		//判断是采购审批 还是 销售审批
 		if (checkFlag == 2) {
 			pathsActs = iCheckClient.getActsByActId(3, "status");
@@ -663,8 +719,22 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			} else if (checkFlag == 1) {
 				auditProecessDTO.setProcessType("采购审批");
 			}
-
-
+			LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			orderItemsLambdaQueryWrapper
+				.eq(OrderItems::getGoodType, 0)
+				.eq(OrderItems::getPid, salesOrder.getId())
+				.eq(OrderItems::getIsDeleted, 0);
+			List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+			if (CollectionUtils.isNotEmpty(orderItems)){
+				auditProecessDTO.setOrderQuantity(orderItems.stream().filter(e ->e.getOrderQuantity() != null).map(OrderItems::getOrderQuantity).reduce(BigDecimal.ZERO,BigDecimal::add));
+				auditProecessDTO.setAmount(orderItems.stream().filter(e ->e.getAmount() != null).map(OrderItems::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add));
+			}else {
+				auditProecessDTO.setOrderQuantity(BigDecimal.ZERO);
+				auditProecessDTO.setAmount(BigDecimal.ZERO);
+			}
+			auditProecessDTO.setOrderRemark(salesOrder.getOrderRemark());
+			auditProecessDTO.setGrossProfit(salesOrder.getGrossProfit());
+			auditProecessDTO.setGrossProfitRate(salesOrder.getGrossProfitRate());
 			auditProecessDTO.setCorpId(salesOrder.getCorpId());
 			auditProecessDTO.setCheckType(order.getCheckType());
 			auditProecessDTO.setPathsLevelsList(auditPathsLevels);
@@ -697,6 +767,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		if (order == null) {
 			throw new SecurityException("审批通过失败");
 		}
+		if (order.getStatus() == 3){
+			throw new SecurityException("订单已审批通过请勿重复审批");
+		}
 		order.setStatus(3);
 		baseMapper.updateById(order);
 		/**===========================end 审核通过修改销售订单信息==========================*/
@@ -706,7 +779,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			if (order.getBillType().equals("XS")) {
 				/**===========================Start 审核通过锁定库存=============================*/
 				//获取此销售订单下,所有明细的库存
-				LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				/*LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
 				orderItemsLambdaQueryWrapper
 					.eq(OrderItems::getGoodType, 0)
 					.eq(OrderItems::getPid, id)
@@ -751,7 +824,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 							throw new SecurityException("锁定库存失败: 更新失败");
 						}
 					});
-				}
+				}*/
 
 
 				/**===========================End 审核通过锁定库存=============================*/
@@ -830,9 +903,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	public void underReview(Long id) {
 		Order order = baseMapper.selectById(id);
 		if (order == null) {
-			throw new SecurityException("审批驳回失败");
+			throw new SecurityException("审批失败");
 		}
-		order.setStatus(0);
+		order.setStatus(2);
 		baseMapper.updateById(order);
 	}
 
@@ -844,7 +917,132 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			.eq(Order::getTenantId, AuthUtil.getTenantId());
 		Order order = baseMapper.selectOne(orderLambdaQueryWrapper);
 		if (order == null) {
-			throw new SecurityException("审批驳回失败");
+			throw new SecurityException("未找到单据");
+		}
+		if (order.getStatus() == 0){
+			throw new SecurityException("订单已驳回或未提交审批,请勿重复操作");
+		}
+		//销售审核不通过释放库存
+		if (order.getBillType().equals("XS") && SecureUtil.getTenantId().equals("681169")){
+				/**===========================Start 审核通过锁定库存=============================*/
+				//获取此销售订单下,所有明细的库存
+				LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				orderItemsLambdaQueryWrapper
+					.eq(OrderItems::getGoodType, 0)
+					.eq(OrderItems::getPid, order.getId())
+					.eq(OrderItems::getIsDeleted, 0);
+				List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+				if (CollectionUtils.isNotEmpty(orderItems)) {
+					orderItems.forEach(e -> {
+						StockGoods stockGoods = new StockGoods();
+						stockGoods.setCorpId(e.getCorpId());
+						stockGoods.setGoodsId(e.getItemId());
+						stockGoods.setTenantId(SecureUtil.getTenantId());
+						List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
+						if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
+							throw new SecurityException("锁定库存失败:未查询到库存 或者 存在多条库存记录");
+						}
+						//开始锁定库存,减少可用
+						StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+						if (oneStock == null) {
+							throw new SecurityException("锁定库存失败:未查询到库存信息");
+						}
+						//原单据的订货数量
+						BigDecimal orderQuantity = e.getOrderQuantity();
+						//可用库存
+						BigDecimal surplusRouteQuantity = oneStock.getSurplusRouteQuantity();
+						//锁定库存
+						BigDecimal lockingQuantity = oneStock.getLockingQuantity();
+
+						//判断比较大小
+						if (orderQuantity.compareTo(surplusRouteQuantity) == 1) {
+							throw new SecurityException("锁定库存失败:原单据的订货数量大于可用库存,无法锁定");
+						}
+						if (surplusRouteQuantity == null) {
+							throw new SecurityException("锁定库存失败:可用库存为空,禁止操作");
+						}
+						//增加可用库存
+						oneStock.setSurplusRouteQuantity(surplusRouteQuantity.add(orderQuantity == null ? new BigDecimal("0") : orderQuantity));
+						//减少锁定库存
+						oneStock.setLockingQuantity(lockingQuantity == null ? new BigDecimal("0") : lockingQuantity.subtract(orderQuantity));
+						//更新库存
+						R r = stockGoodsClient.updateStock(oneStock);
+						if (!r.isSuccess()) {
+							throw new SecurityException("锁定库存失败: 更新失败");
+						}
+					});
+			}
+		}
+		order.setStatus(0);
+		baseMapper.updateById(order);
+	}
+
+	@Override
+	public void repealCancel(Long id) {
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		orderLambdaQueryWrapper
+			.eq(Order::getId, id)
+			.eq(Order::getTenantId, AuthUtil.getTenantId());
+		Order order = baseMapper.selectOne(orderLambdaQueryWrapper);
+		if (order == null) {
+			throw new SecurityException("未找到订单");
+		}
+		if (order.getStatus() == 0){
+			throw new SecurityException("订单未开启审批");
+		}
+		if (order.getStatus() == 1){
+			throw new SecurityException("订单已经开启审批不能撤销");
+		}
+		//销售审核不通过释放库存
+		if (order.getBillType().equals("XS") && SecureUtil.getTenantId().equals("681169")){
+			/**===========================Start 审核通过锁定库存=============================*/
+			//获取此销售订单下,所有明细的库存
+			LambdaQueryWrapper<OrderItems> orderItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			orderItemsLambdaQueryWrapper
+				.eq(OrderItems::getGoodType, 0)
+				.eq(OrderItems::getPid, order.getId())
+				.eq(OrderItems::getIsDeleted, 0);
+			List<OrderItems> orderItems = orderItemsMapper.selectList(orderItemsLambdaQueryWrapper);
+			if (CollectionUtils.isNotEmpty(orderItems)) {
+				orderItems.forEach(e -> {
+					StockGoods stockGoods = new StockGoods();
+					stockGoods.setCorpId(e.getCorpId());
+					stockGoods.setGoodsId(e.getItemId());
+					stockGoods.setTenantId(SecureUtil.getTenantId());
+					List<StockGoods> listStockGoods = stockGoodsClient.postListStockByCondition(stockGoods);
+					if (listStockGoods.size() > 1 || CollectionUtils.isEmpty(listStockGoods)) {
+						throw new SecurityException("锁定库存失败:未查询到库存 或者 存在多条库存记录");
+					}
+					//开始锁定库存,减少可用
+					StockGoods oneStock = stockGoodsClient.getOneStock(stockGoods);
+					if (oneStock == null) {
+						throw new SecurityException("锁定库存失败:未查询到库存信息");
+					}
+					//原单据的订货数量
+					BigDecimal orderQuantity = e.getOrderQuantity();
+					//可用库存
+					BigDecimal surplusRouteQuantity = oneStock.getSurplusRouteQuantity();
+					//锁定库存
+					BigDecimal lockingQuantity = oneStock.getLockingQuantity();
+
+					//判断比较大小
+					if (orderQuantity.compareTo(surplusRouteQuantity) == 1) {
+						throw new SecurityException("锁定库存失败:原单据的订货数量大于可用库存,无法锁定");
+					}
+					if (surplusRouteQuantity == null) {
+						throw new SecurityException("锁定库存失败:可用库存为空,禁止操作");
+					}
+					//增加可用库存
+					oneStock.setSurplusRouteQuantity(surplusRouteQuantity.add(orderQuantity == null ? new BigDecimal("0") : orderQuantity));
+					//减少锁定库存
+					oneStock.setLockingQuantity(lockingQuantity == null ? new BigDecimal("0") : lockingQuantity.subtract(orderQuantity));
+					//更新库存
+					R r = stockGoodsClient.updateStock(oneStock);
+					if (!r.isSuccess()) {
+						throw new SecurityException("锁定库存失败: 更新失败");
+					}
+				});
+			}
 		}
 		order.setStatus(0);
 		baseMapper.updateById(order);

+ 1 - 1
blade-service/blade-stock/src/main/java/org/springblade/stock/controller/StockGoodsController.java

@@ -313,7 +313,7 @@ public class StockGoodsController extends BladeController {
 		ExcelUtil.export(response, "导入模板-库存更新", "库存导入数据表", list, StockGoodsExcel.class);
 	}
 	/**
-	 * 导入用户
+	 * 导入库存
 	 */
 	@PostMapping("/import-price")
 	@ApiOperationSupport(order = 12)

+ 2 - 2
blade-service/blade-stock/src/main/java/org/springblade/stock/service/impl/StockGoodsServiceImpl.java

@@ -128,9 +128,7 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 			stockGoods.setSurplusRouteQuantity(datum.getSurplusRouteQuantity());//可用数量
 			stockGoods.setInQuantity(datum.getSurplusRouteQuantity());//入库数量
 			stockGoods.setOutQuantity(BigDecimal.ZERO);//出库数量
-			stockGoods.setLockingQuantity(BigDecimal.ZERO);//锁定数量
 			stockGoods.setEnRouteQuantity(BigDecimal.ZERO);//在途数量
-
 			stockGoods.setTradeType("GN");
 			stockGoods.setTenantId(SecureUtil.getTenantId());
 			//获取商品id
@@ -195,11 +193,13 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 			if (goods == null){
 				stockGoods.setCreateTime(new Date());
 				stockGoods.setCreateUser(SecureUtil.getUserId());
+				stockGoods.setLockingQuantity(BigDecimal.ZERO);//锁定数量
 				baseMapper.insert(stockGoods);
 			}else {
 				stockGoods.setUpdateUser(SecureUtil.getUserId());
 				stockGoods.setUpdateTime(new Date());
 				stockGoods.setId(goods.getId());
+				stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(goods.getLockingQuantity()));//可用数量 = 可用减去之前的锁定
 				baseMapper.updateById(stockGoods);
 			}
 		}