Browse Source

2022年10月8日 19:11

wangzhuo 3 năm trước cách đây
mục cha
commit
d942c899fe
20 tập tin đã thay đổi với 526 bổ sung19 xóa
  1. 5 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/LandVehicle.java
  2. 12 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ILandVehicleClient.java
  3. 17 2
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/SalesPolicy.java
  4. 37 0
      blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/feign/ISalesPolicyClient.java
  5. 5 1
      blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/entity/StockGoods.java
  6. 6 0
      blade-service/blade-check/pom.xml
  7. 4 0
      blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java
  8. 6 0
      blade-service/blade-check/src/main/java/org/springblade/check/service/IAuditProecessService.java
  9. 172 0
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  10. 9 0
      blade-service/blade-client/src/main/java/org/springblade/client/land/feign/LandVehicleClient.java
  11. 6 0
      blade-service/blade-mocha-item/pom.xml
  12. 44 1
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/SalesPolicyController.java
  13. 24 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/SalesPolicyClient.java
  14. 28 3
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/ISalesPolicyService.java
  15. 120 0
      blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/SalesPolicyServiceImpl.java
  16. 1 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml
  17. 5 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/excel/StockGoodsExcel.java
  18. 1 3
      blade-service/blade-stock/src/main/java/org/springblade/stock/mapper/StockGoodsMapper.xml
  19. 1 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/service/impl/StockGoodsServiceImpl.java
  20. 23 8
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/controller/PurchaseOrderController.java

+ 5 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/LandVehicle.java

@@ -228,6 +228,11 @@ public class LandVehicle implements Serializable {
 	 */
 	@ApiModelProperty(value = "位置获取来源")
 	private String locationSource;
+	/**
+	 * gpsId
+	 */
+	@ApiModelProperty(value = "gpsId")
+	private String gpsId;
 
 	@TableField(exist = false)
 	private List<CommonFile> fileList;

+ 12 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ILandVehicleClient.java

@@ -1,8 +1,10 @@
 package org.springblade.client.feign;
 
+import org.springblade.client.entity.LandVehicle;
 import org.springblade.common.constant.LauncherConstant;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 @FeignClient(
 	value = LauncherConstant.APPLICATION_CLIENT_NAME
@@ -11,8 +13,18 @@ public interface ILandVehicleClient {
 
 	String API_PREFIX = "/client";
 	String GET_VEHICLE_COUNT = API_PREFIX + "/getVehicleCount";
+	String GET_BY_PLATE_NO = API_PREFIX + "/selectByPlateNo";
 
 	@GetMapping(GET_VEHICLE_COUNT)
 	int getVehicleCount();
 
+	/**
+	 * 根据车牌号查询车辆信息
+	 *
+	 * @param plateNo
+	 * @return
+	 */
+	@GetMapping(GET_BY_PLATE_NO)
+	LandVehicle selectByPlateNo(@RequestParam("plateNo") String plateNo);
+
 }

+ 17 - 2
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/entity/SalesPolicy.java

@@ -121,9 +121,9 @@ public class SalesPolicy implements Serializable {
 	@ApiModelProperty(value = "政策类型")
 	private String type;
 	/**
-	 * 状态(0 正常 1停用)
+	 * 状态(0 正常 1停用 2暂存
 	 */
-	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	@ApiModelProperty(value = "状态(0 正常 1停用 2暂存)")
 	private Integer status;
 	/**
 	 * 是否已删除(0 否 1是)
@@ -172,4 +172,19 @@ public class SalesPolicy implements Serializable {
 	@TableField(exist = false)
 	private String newTime;
 
+	/**
+	 * 跳转对应页面的路由
+	 */
+	@TableField(exist = false)
+	private String url;
+	/**
+	 * 页面枚举
+	 */
+	@TableField(exist = false)
+	private String pageStatus;
+	/**
+	 * 页面名字
+	 */
+	@TableField(exist = false)
+	private String pageLabel;
 }

+ 37 - 0
blade-service-api/blade-mocha-item-api/src/main/java/org/springblade/mocha/feign/ISalesPolicyClient.java

@@ -1,11 +1,13 @@
 package org.springblade.mocha.feign;
 
 import org.springblade.common.constant.LauncherConstant;
+import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.SalesPolicy;
 import org.springblade.mocha.entity.SalesPolicyItem;
 import org.springblade.mocha.vo.SalesPolicyItemVO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
@@ -25,6 +27,10 @@ public interface ISalesPolicyClient {
 	String GET_POLICY = API_PREFIX + "/getPolicy";
 	String GET_POLICY_ITEM = API_PREFIX + "/getPolicyItem";
 	String GET_SALES_POLICY = API_PREFIX + "getSalesPolicy";
+	String UNDER_REVIEW = API_PREFIX + "/underReview";
+	String PASS_CHECK = API_PREFIX + "/passCheck";
+	String PASS_CANCEL = API_PREFIX + "/passCancel";
+	String GET_BY_ID = API_PREFIX + "/getById";
 	/**
 	 * 获取商品所属政策名
 	 *
@@ -62,4 +68,35 @@ public interface ISalesPolicyClient {
 	List<SalesPolicyItemVO> getSalesPolicy(@RequestParam("code") String code,
 										   @RequestParam("tenantId") String tenantId);
 
+	/**
+	 * 销售政策审核中
+	 * @param id
+	 * @return
+	 */
+	@PostMapping(UNDER_REVIEW)
+	R underReview(@RequestParam("id") Long id);
+
+	/**
+	 * 销售政策审核通过
+	 * @param id
+	 * @return
+	 */
+	@PostMapping(PASS_CHECK)
+	R passCheck(@RequestParam("id") Long id);
+
+	/**
+	 * 销售政策审核驳回
+	 * @param id
+	 * @return
+	 */
+	@PostMapping(PASS_CANCEL)
+	R passCancel(@RequestParam("id") Long id);
+
+	/**
+	 * 获得销售政策
+	 * @param id
+	 * @return
+	 */
+	@GetMapping(GET_BY_ID)
+	SalesPolicy getById(@RequestParam("id") Long id);
 }

+ 5 - 1
blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/entity/StockGoods.java

@@ -228,7 +228,11 @@ public class StockGoods implements Serializable {
 	 */
 		@ApiModelProperty(value = "结余金额")
 		private BigDecimal balanceAmount;
-
+	/**
+	 * 库存价
+	 */
+		@ApiModelProperty(value = "库存价")
+		private BigDecimal stockPrice;
 
 	/**
 	 * 规格

+ 6 - 0
blade-service/blade-check/pom.xml

@@ -105,6 +105,12 @@
             <artifactId>trade-purchase-api</artifactId>
             <version>2.8.2.RELEASE</version>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-mocha-item-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 

+ 4 - 0
blade-service/blade-check/src/main/java/org/springblade/check/controller/AuditProecessController.java

@@ -265,6 +265,10 @@ public class AuditProecessController extends BladeController {
 		else if ("bsdd".equals(proecess.getCheckType())) {
 			auditProecessService.bidingCheck(auditProecess);
 		}
+		//销售政策审核
+		else if ("xszc".equals(proecess.getCheckType())){
+			auditProecessService.salesPolicyCheck(auditProecess);
+		}
 		// 办公用品采购
 		else if ("ocg".equals(proecess.getCheckType()) || "oly".equals(proecess.getCheckType())) {
 			auditProecessService.officeCheck(auditProecess);

+ 6 - 0
blade-service/blade-check/src/main/java/org/springblade/check/service/IAuditProecessService.java

@@ -74,6 +74,12 @@ public interface IAuditProecessService extends IService<AuditProecess> {
 	void bidingCheck(AuditProecess auditProecess);
 
 	/**
+	 * 销售政策审批
+	 * @param auditProecess
+	 */
+	void salesPolicyCheck(AuditProecess auditProecess);
+
+	/**
 	 * 销售机会审批
 	 * @param auditProecess
 	 */

+ 172 - 0
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -50,6 +50,8 @@ import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.finance.dto.SettlementDTO;
 import org.springblade.finance.feign.IFinanceClient;
 import org.springblade.finance.vojo.Settlement;
+import org.springblade.mocha.entity.SalesPolicy;
+import org.springblade.mocha.feign.ISalesPolicyClient;
 import org.springblade.project.entity.ServiceProject;
 import org.springblade.project.feign.IHandoverClient;
 import org.springblade.project.feign.IProjectClient;
@@ -120,6 +122,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 
 	private final IBidingDescClient bidingDescClient;//标书
 
+	private final ISalesPolicyClient salesPolicyClient;//销售政策
+
+
 	@Override
 	public IPage<AuditProecessVO> selectAuditProecessPage(IPage<AuditProecessVO> page, AuditProecessVO auditProecess) {
 		return page.setRecords(baseMapper.selectAuditProecessPage(page, auditProecess));
@@ -1981,6 +1986,173 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	}
 
 	/**
+	 * 销售政策审核
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public void salesPolicyCheck(AuditProecess auditProecess) {
+		//查看最新操作记录,防止重复提交
+		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
+		if (proecessTemp == null) {
+			throw new SecurityException("未查到此审批记录,禁止操作");
+		}
+		if ("A".equals(proecessTemp.getAuditStatus()) || "B".equals(proecessTemp.getAuditStatus())) {
+			throw new SecurityException("当前记录已经完成审批,禁止重复操作");
+		}
+
+		if (auditProecess.getAuditStatus() == null || !"S".equals(auditProecess.getAuditStatus())) {
+			throw new SecurityException("审批状态非待审,禁止操作");
+		}
+		//信息
+		Message sendMessage = new Message();
+		sendMessage.setParameter(String.valueOf(auditProecess.getBillId()));
+		sendMessage.setUserName(AuthUtil.getUserName());
+		sendMessage.setUserId(AuthUtil.getUserId());
+		sendMessage.setToUserId(auditProecess.getSendUserId());
+		sendMessage.setToUserName(auditProecess.getSendName());
+		sendMessage.setMessageType(1);
+		sendMessage.setTenantId(AuthUtil.getTenantId());
+		sendMessage.setCreateUser(AuthUtil.getUserId());
+		sendMessage.setCreateTime(new Date());
+		sendMessage.setUrl(auditProecess.getUrl());
+		sendMessage.setPageLabel(auditProecess.getPageLabel());
+		sendMessage.setPageStatus(auditProecess.getPageStatus());
+
+		//用户操作 1.通过  2.驳回
+		Integer operate = auditProecess.getOperate();
+		//查看当前审批是否为最后一级
+		String iffinalItem = auditProecess.getIffinalItem();
+		//审批人
+		auditProecess.setAuditUserId(String.valueOf(AuthUtil.getUserId()));
+		//审批时间
+		auditProecess.setAuditOpTime(new Date());
+		//不是最后一级
+		if ("F".equals(iffinalItem)) {
+			//通过
+			if (operate == 1) {
+				//如果是第一级, 则修改状态为审批中
+				if (auditProecess.getLevelId() == 1) {
+					R submit = salesPolicyClient.underReview(auditProecess.getSrcBillId());
+					if (!submit.isSuccess()) {
+						throw new SecurityException("审批开始修改审核状态失败");
+					}
+				}
+
+				auditProecess.setAuditStatus("A");
+				//查询下一级,开启待审
+				LambdaQueryWrapper<AuditProecess> auditProecessLambdaQueryWrapper = new LambdaQueryWrapper<>();
+				auditProecessLambdaQueryWrapper
+					.eq(AuditProecess::getBatchNo, auditProecess.getBatchNo())
+					.eq(AuditProecess::getSrcBillId, auditProecess.getSrcBillId())
+					.eq(AuditProecess::getIsDelete, 0)
+					.eq(AuditProecess::getActId, auditProecess.getActId())
+					.eq(AuditProecess::getBillId, auditProecess.getBillId())
+					.eq(AuditProecess::getBillNo, auditProecess.getBillNo())
+					.eq(AuditProecess::getTenantId, AuthUtil.getTenantId())
+					.eq(AuditProecess::getLevelId, auditProecess.getLevelId() + 1);
+				Integer count = baseMapper.selectCount(auditProecessLambdaQueryWrapper);
+				if (count != null && count > 1) {
+					throw new SecurityException("审核失败,获取下一级信息失败");
+				}
+				AuditProecess proecess = baseMapper.selectOne(auditProecessLambdaQueryWrapper);
+				if (proecess == null) {
+					throw new SecurityException("审批通过=>获取下一级信息失败");
+				}
+				proecess.setAuditStatus("S");
+				baseMapper.updateById(proecess);
+
+				SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
+
+				//获得单据创建日期
+				String orderDate = null;
+				if (proecessTemp.getBillId() != null) {
+					SalesPolicy salesPolicy = salesPolicyClient.getById(proecessTemp.getBillId());
+					if (salesPolicy != null) {
+						orderDate = simpleDateFormat.format(salesPolicy.getCreateTime());
+					}
+				}
+
+				Message message = new Message();
+				message.setUserName(AuthUtil.getUserName());
+				message.setUserId(AuthUtil.getUserId());
+				message.setParameter(String.valueOf(auditProecess.getBillId()));
+				message.setMessageType(1);
+				message.setTenantId(AuthUtil.getTenantId());
+				//销售政策模板
+				message.setMessageBody("您有销售政策单据审核,单据名称:" + "" + proecessTemp.getBillNo() + ","
+					+ "单据日期:" + orderDate + ",请审核。"
+					+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
+				);
+
+				message.setCreateUser(AuthUtil.getUserId());
+				message.setUrl("/maintenance/salesPolicy/index");
+				message.setCreateTime(new Date());
+
+				// 消息批量通知下一级
+				sendMsgToGroup(message, proecess.getAuditUserId());
+			}
+			//不通过
+			else if (operate == 2) {
+				auditProecess.setAuditStatus("B");
+				//todo 调用feign取消
+				R r = salesPolicyClient.passCancel(auditProecess.getSrcBillId());
+				if (!r.isSuccess()) {
+					throw new SecurityException("修改订单数据失败");
+				}
+
+				sendMessage.setMessageBody("您的销售政策审核未通过" + ",单据名称:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+
+		}
+		//是最后一级
+		else if ("T".equals(iffinalItem)) {
+			//通过
+			if (operate == 1) {
+				//todo 调用feign直接通过
+				auditProecess.setAuditStatus("A");
+				R r = salesPolicyClient.passCheck(auditProecess.getSrcBillId());
+				if (!r.isSuccess()) {
+					throw new SecurityException("修改订单数据失败");
+				}
+
+				sendMessage.setMessageBody("您的销售政策审核已通过" + ",单据名称:" + proecessTemp.getBillNo() + ",请继续操作");
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+			//不通过
+			else if (operate == 2) {
+				//todo 调用feign取消
+				auditProecess.setAuditStatus("B");
+				R r = salesPolicyClient.passCancel(auditProecess.getSrcBillId());
+				if (!r.isSuccess()) {
+					throw new SecurityException("修改订单数据失败");
+				}
+				sendMessage.setMessageBody("您的销售政策审核未通过" + ",单据名称:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+		} else {
+			throw new SecurityException("审批异常,请联系管理员");
+		}
+
+		cleanMsg(proecessTemp.getAuditUserId(), AuthUtil.getUserId(), proecessTemp.getSrcBillId());
+
+		//保存操作记录
+		auditProecess.setAuditMsg(auditProecess.getAuditMsg());
+		auditProecess.setAuditItem(new Date());
+		baseMapper.updateById(auditProecess);
+	}
+
+	/**
 	 * 销售机会审批
 	 *
 	 * @param auditProecess

+ 9 - 0
blade-service/blade-client/src/main/java/org/springblade/client/land/feign/LandVehicleClient.java

@@ -25,4 +25,13 @@ public class LandVehicleClient implements ILandVehicleClient {
 			.eq(LandVehicle::getIsDeleted, 0)
 		);
 	}
+
+	@Override
+	public LandVehicle selectByPlateNo(String plateNo){
+		return landVehicleService.getOne(new LambdaQueryWrapper<LandVehicle>()
+			.eq(LandVehicle::getTenantId, AuthUtil.getTenantId())
+			.eq(LandVehicle::getIsDeleted, 0)
+			.eq(LandVehicle::getPlateNo, plateNo)
+		);
+	}
 }

+ 6 - 0
blade-service/blade-mocha-item/pom.xml

@@ -62,6 +62,12 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-transaction</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-check-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>

+ 44 - 1
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/controller/SalesPolicyController.java

@@ -45,7 +45,6 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -214,5 +213,49 @@ public class SalesPolicyController extends BladeController {
 		ExcelUtil.export(response, "导入模板-销售政策明细", "导入数据表", list, SalesItemExcel.class);
 	}
 
+	/**
+	 * 请核
+	 */
+	@PostMapping("/checkSalesPolicy")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "请核", notes = "传入salesPolicy")
+	public R checkSalesPolicy(@RequestBody SalesPolicy salesPolicy){
+		salesPolicyService.checkSalesPolicy(salesPolicy);
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 审核通过
+	 */
+	@PostMapping("/passCheck")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "审核通过", notes = "传入id")
+	public R passCheck(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		salesPolicyService.passCheck(id);
+		return R.success("审批通过");
+	}
+
+	/**
+	 * 审核中
+	 */
+	@PostMapping("/underReview")
+	@ApiOperationSupport(order = 12)
+	@ApiOperation(value = "审核中", notes = "传入id")
+	public R underReview(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		salesPolicyService.underReview(id);
+		return R.success("操作成功");
+	}
+
+	/**
+	 * 审核不通过
+	 */
+	@PostMapping("/passCancel")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "审核不通过", notes = "传入id")
+	public R passCancel(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+		salesPolicyService.passCancel(id);
+		return R.success("操作成功");
+	}
+
 
 }

+ 24 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/feign/SalesPolicyClient.java

@@ -8,6 +8,7 @@ import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
@@ -96,4 +97,27 @@ public class SalesPolicyClient implements ISalesPolicyClient {
 		return salesPolicyService.selectSales(tenantId,agentCode.getId().toString(),new Date());
 	}
 
+	@Override
+	public R underReview(Long id) {
+		salesPolicyService.underReview(id);
+		return R.success("操作成功");
+	}
+
+	@Override
+	public R passCheck(Long id) {
+		salesPolicyService.passCheck(id);
+		return R.success("审批通过");
+	}
+
+	@Override
+	public R passCancel(Long id) {
+		salesPolicyService.passCancel(id);
+		return R.success("操作成功");
+	}
+
+	@Override
+	public SalesPolicy getById(Long id) {
+		return salesPolicyService.getById(id);
+	}
+
 }

+ 28 - 3
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/ISalesPolicyService.java

@@ -16,11 +16,8 @@
  */
 package org.springblade.mocha.service;
 
-import org.apache.ibatis.annotations.Param;
 import org.springblade.core.tool.api.R;
 import org.springblade.mocha.entity.SalesPolicy;
-import org.springblade.mocha.entity.SalesPolicyItem;
-import org.springblade.mocha.excel.PriceItemExcel;
 import org.springblade.mocha.excel.SalesItemExcel;
 import org.springblade.mocha.vo.SalesPolicyItemVO;
 import org.springblade.mocha.vo.SalesPolicyVO;
@@ -85,4 +82,32 @@ public interface ISalesPolicyService extends IService<SalesPolicy> {
 	 */
 	List<SalesPolicyItemVO> selectSales(String tenantId, String corps, Date newTime);
 
+	/**
+	 * 请核
+	 * @param salesPolicy
+	 * @return
+	 */
+	void checkSalesPolicy(SalesPolicy salesPolicy);
+
+	/**
+	 * 审批通过
+	 * @param id
+	 * @teturn
+	 */
+	void passCheck(Long id);
+
+	/**
+	 * 审批中
+	 * @param id
+	 * @teturn
+	 */
+	void underReview(Long id);
+
+	/**
+	 * 审核不通过
+	 * @param id
+	 * @teturn
+	 */
+	void passCancel(Long id);
+
 }

+ 120 - 0
blade-service/blade-mocha-item/src/main/java/org/springblade/mocha/service/impl/SalesPolicyServiceImpl.java

@@ -16,16 +16,23 @@
  */
 package org.springblade.mocha.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
+import org.springblade.check.dto.AuditProecessDTO;
+import org.springblade.check.entity.AuditPathsActs;
+import org.springblade.check.entity.AuditPathsLevels;
+import org.springblade.check.feign.ICheckClient;
 import org.springblade.client.entity.GoodsDesc;
 import org.springblade.client.entity.GoodsType;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IGoodsDescClient;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.ObjectUtil;
@@ -37,6 +44,7 @@ import org.springblade.mocha.mapper.SalesPolicyMapper;
 import org.springblade.mocha.service.ISalesPolicyService;
 import org.springblade.mocha.vo.SalesPolicyItemVO;
 import org.springblade.mocha.vo.SalesPolicyVO;
+import org.springblade.purchase.sales.entity.Biding;
 import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
@@ -71,6 +79,7 @@ public class SalesPolicyServiceImpl extends ServiceImpl<SalesPolicyMapper, Sales
 	 * 商品信息
 	 */
 	private final IGoodsDescClient goodsDescClient;
+	private final ICheckClient iCheckClient;//审批
 
 	@Override
 	public IPage<SalesPolicy> selectSalesPolicyPage(IPage<SalesPolicy> page, SalesPolicy salesPolicy) {
@@ -272,4 +281,115 @@ public class SalesPolicyServiceImpl extends ServiceImpl<SalesPolicyMapper, Sales
 		return userName;
 	}
 
+	/**
+	 * 请核
+	 * @param salesPolicy
+	 * @return
+	 */
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public void checkSalesPolicy(SalesPolicy salesPolicy){
+		SalesPolicy policy = baseMapper.selectById(salesPolicy.getId());
+		if (policy.getStatus() == 0){
+			throw new SecurityException("订单已请核,请勿重复请核");
+		}
+		//生成平台审核数据
+		AuditPathsActs pathsActs = iCheckClient.getApprovalActId(16, "status", AuthUtil.getTenantId());
+		if (pathsActs == null || pathsActs.getIsEnable() == 2) {
+			throw new SecurityException("当前租户未查询到审批流配置");
+		} else {
+			//获取审批级次
+			List<AuditPathsLevels> auditPathsLevels = iCheckClient.listApproval(16, "status", AuthUtil.getTenantId());
+			if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isEmpty(auditPathsLevels)) {
+				throw new SecurityException("开启审批失败:未查询到审批信息");
+			}
+			//修改订单信息
+			AuditProecessDTO auditProecessDTO = new AuditProecessDTO();
+			// 绑定审核类型
+			auditProecessDTO.setCheckType("xszc");//销售政策
+			// 追加跳转路由url
+			auditProecessDTO.setUrl(salesPolicy.getUrl());
+			auditProecessDTO.setPageStatus(salesPolicy.getPageStatus());
+			auditProecessDTO.setPageLabel(salesPolicy.getPageLabel());
+			//增加审批类型
+			auditProecessDTO.setProcessType("销售政策审批");
+			auditProecessDTO.setOrderRemark(policy.getRemarks());//订单备注
+			auditProecessDTO.setPathsLevelsList(auditPathsLevels);
+			auditProecessDTO.setActId(1);
+			auditProecessDTO.setSrcBillId(policy.getId());//申请表id
+			auditProecessDTO.setBillId(policy.getId());//业务id
+			auditProecessDTO.setBillNo(policy.getCname());//业务编号
+			auditProecessDTO.setSendUserId(AuthUtil.getUserId());//请核人id
+			auditProecessDTO.setSendName(AuthUtil.getUserName());//请核人名称
+			auditProecessDTO.setSendTime(new Date());//请核时间
+			auditProecessDTO.setTenantId(AuthUtil.getTenantId());//租户id
+			R financeProcess = iCheckClient.createFinanceProcess(auditProecessDTO);
+			if (!financeProcess.isSuccess()) {
+				throw new SecurityException("操作失败,请联系管理员");
+			}
+			SalesPolicy upSalesPolicy = new SalesPolicy();
+			upSalesPolicy.setId(policy.getId());
+			upSalesPolicy.setStatus(2);
+			baseMapper.updateById(upSalesPolicy);
+		}
+	}
+
+	/**
+	 * 审核通过
+	 */
+	@Override
+	public void passCheck(Long id) {
+		LambdaQueryWrapper<SalesPolicy> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(SalesPolicy::getId, id);
+		lambdaQueryWrapper.eq(SalesPolicy::getTenantId, AuthUtil.getTenantId());
+		lambdaQueryWrapper.eq(SalesPolicy::getIsDeleted, 0);
+		SalesPolicy salesPolicy = baseMapper.selectOne(lambdaQueryWrapper);
+		if (salesPolicy == null){
+			throw new SecurityException("审批通过失败");
+		}
+		if (salesPolicy.getStatus() == 0){
+			throw new SecurityException("订单已审批通过请勿重复审批");
+		}
+		salesPolicy.setStatus(0);
+		baseMapper.updateById(salesPolicy);
+	}
+
+	/**
+	 * 审批中
+	 */
+	@Override
+	public void underReview(Long id) {
+		LambdaQueryWrapper<SalesPolicy> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(SalesPolicy::getId, id);
+		lambdaQueryWrapper.eq(SalesPolicy::getTenantId, AuthUtil.getTenantId());
+		lambdaQueryWrapper.eq(SalesPolicy::getIsDeleted, 0);
+		SalesPolicy salesPolicy = baseMapper.selectOne(lambdaQueryWrapper);
+		if (salesPolicy == null) {
+			throw new SecurityException("审批失败");
+		}
+		salesPolicy.setStatus(3);
+		baseMapper.updateById(salesPolicy);
+	}
+
+	/**
+	 * 审核不通过
+	 */
+	@Override
+	public void passCancel(Long id) {
+		LambdaQueryWrapper<SalesPolicy> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(SalesPolicy::getId, id);
+		lambdaQueryWrapper.eq(SalesPolicy::getTenantId, AuthUtil.getTenantId());
+		lambdaQueryWrapper.eq(SalesPolicy::getIsDeleted, 0);
+		SalesPolicy salesPolicy = baseMapper.selectOne(lambdaQueryWrapper);
+		if (salesPolicy == null){
+			throw new SecurityException("审批驳回失败,未找到单据");
+		}
+		if (salesPolicy.getStatus() == 2){
+			throw new SecurityException("订单已驳回或未提交审批,请勿重复操作");
+		}
+		salesPolicy.setStatus(2);
+		baseMapper.updateById(salesPolicy);
+	}
+
 }

+ 1 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml

@@ -590,7 +590,7 @@ ORDER BY
     </select>
 
     <select id="salesDetailsExport" resultType="org.springblade.purchase.sales.excel.SalesDetailsExcel">
-        SELECT
+        SELECT DISTINCT
         BCD.cname AS corpName,
         BO.create_time AS careteTime,
         BO.charge_member AS salesName,

+ 5 - 0
blade-service/blade-stock/src/main/java/org/springblade/stock/excel/StockGoodsExcel.java

@@ -36,5 +36,10 @@ public class StockGoodsExcel implements Serializable {
 	 */
 	@ExcelProperty("供应商名称(选填)")
 	private String corpName;
+	/**
+	 * 库存价
+	 */
+	@ExcelProperty("库存价")
+	private BigDecimal stockPrice;
 
 }

+ 1 - 3
blade-service/blade-stock/src/main/java/org/springblade/stock/mapper/StockGoodsMapper.xml

@@ -101,13 +101,11 @@
         from business_stock_goods t1
                  left join basic_goods_desc t2 on t1.goods_id = t2.id
                  left join basic_storage_desc t3 on t1.storage_id = t3.id
-                 left join basic_price_item t4 on t4.code = t2.code
+                 left join basic_price_item t4 on t4.code = t2.code and t4.tenant_id = #{stock.tenantId} and t4.is_deleted = 0
         <where>
             t1.is_deleted = 0
             and t1.surplus_route_quantity > 0
-            and t4.is_deleted = 0
             and t1.tenant_id = #{stock.tenantId}
-            and t4.tenant_id = #{stock.tenantId}
             <if test="stock.goodsInt != null and stock.goodsInt != ''">
                 and (t2.cname_int like concat('%', #{stock.goodsInt}, '%') or t2.cname like concat('%', #{stock.goodsInt}, '%'))
             </if>

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

@@ -138,6 +138,7 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 			stockGoods.setBalanceQuantity(datum.getSurplusRouteQuantity());//结余数量
 			stockGoods.setSurplusRouteQuantity(datum.getSurplusRouteQuantity());//可用数量
 			stockGoods.setInQuantity(datum.getSurplusRouteQuantity());//入库数量
+			stockGoods.setStockPrice(datum.getStockPrice());//库存价
 			stockGoods.setOutQuantity(BigDecimal.ZERO);//出库数量
 			stockGoods.setEnRouteQuantity(BigDecimal.ZERO);//在途数量
 			stockGoods.setTradeType("GN");

+ 23 - 8
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/controller/PurchaseOrderController.java

@@ -108,20 +108,32 @@ public class PurchaseOrderController extends BladeController {
 
 			List<OrderItems> orderItemsList = orderMessage.getData().getOrderItemsList();
 			if (CollectionUtil.isNotEmpty(orderItemsList)) {
+				String updateUserIds = "";//修改人
+				String createUserIds = "";//创建人
+				for (OrderItems orderItems : orderItemsList){
+					if (ObjectUtil.isEmpty(orderItems.getUpdateUser())){
+						updateUserIds = updateUserIds + orderItems.getUpdateUser() + ",";
+					}
+					if (ObjectUtil.isEmpty(orderItems.getCreateUser())){
+						createUserIds = createUserIds + orderItems.getCreateUser() + ",";
+					}
+				}
+				List<User> updateUser = userClient.selectUserIds(updateUserIds);
+				List<User> createUser = userClient.selectUserIds(createUserIds);
 				orderItemsList.forEach(e->{
-					R<User> user2 = userClient.userInfoById(e.getUpdateUser());
-					if (user2.isSuccess() && user2.getData() != null){
-						e.setUpdateUserName(user2.getData().getName());
+					if (e.getUpdateUser() != null){
+						if (ObjectUtil.isEmpty(updateUser)){
+							e.setUpdateUserName(updateUser.stream().filter(d -> d.getId().equals(e.getUpdateUser())).findFirst().get().getName());
+						}
 					}
-					R<User> user3 = userClient.userInfoById(e.getCreateUser());
-					if (user3.isSuccess() && user3.getData() != null){
-						e.setCreateUserName(user3.getData().getName());
+					if (e.getCreateUser() != null){
+						if (ObjectUtil.isEmpty(createUser)){
+							e.setUpdateUserName(createUser.stream().filter(d -> d.getId().equals(e.getCreateUser())).findFirst().get().getName());
+						}
 					}
 				});
 			}
 		}
-
-
 		return orderMessage;
 	}
 
@@ -328,6 +340,9 @@ public class PurchaseOrderController extends BladeController {
 						.filter(Objects::nonNull)
 						.reduce(BigDecimal.ZERO, BigDecimal::add);
 					e.setActualWeight(actualWeight);
+
+					//明细信息
+					e.setItemsList(orderItemsList);
 				}
 			});
 		}