فهرست منبع

2022年8月3日17点55分

纪新园 3 سال پیش
والد
کامیت
bedbcd51bb
15فایلهای تغییر یافته به همراه307 افزوده شده و 104 حذف شده
  1. 2 2
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsDescClient.java
  2. 17 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  3. 4 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/Order.java
  4. 3 2
      blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java
  5. 6 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsDescService.java
  6. 10 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java
  7. 4 3
      blade-service/blade-project/src/main/java/org/springblade/project/controller/ProjectController.java
  8. 112 86
      blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectServiceImpl.java
  9. 1 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/entrance/EntranceOrderController.java
  10. 23 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  11. 1 1
      blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/controller/LeadsController.java
  12. 7 9
      blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/service/impl/LeadsServiceImpl.java
  13. 20 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/controller/PurchaseOrderController.java
  14. 2 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/IOrderService.java
  15. 95 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

+ 2 - 2
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsDescClient.java

@@ -173,6 +173,6 @@ public interface ICorpsDescClient {
 	 * @param corpsDesc    客户信息
 	 * @return
 	 */
-	@GetMapping(INSERT_CORP)
-	R insertCorp(@RequestBody CorpsDesc corpsDesc);
+	@PostMapping(INSERT_CORP)
+	int insertCorps(@RequestBody CorpsDesc corpsDesc);
 }

+ 17 - 0
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java

@@ -17,16 +17,21 @@
 package org.springblade.system.user.feign;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.entity.UserInfo;
 import org.springblade.system.user.entity.UserOauth;
+import org.springblade.system.user.vo.UserVO;
 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.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
+import springfox.documentation.annotations.ApiIgnore;
 
 import java.util.List;
 import java.util.Map;
@@ -53,6 +58,7 @@ public interface IUserClient {
 	String GAIN_USER = API_PREFIX + "/gainUser";
 	String USER_INFO_BY_NAME=API_PREFIX+"/user-info-by-name";
 	String LIST_USER_BY_ROLE_ID=API_PREFIX+"/listUserByRoleId";
+	String GET_USER_PAGE=API_PREFIX+"/getUserPage";
 
 	@GetMapping(LIST_USER_BY_ROLE_ID)
 	R<List<User>> listUserByRoleId(@RequestParam("roleId")Long roleId);
@@ -150,4 +156,15 @@ public interface IUserClient {
 	@GetMapping(GAIN_USER)
 	R<List<Map<String,Object>>> gainUser();
 
+	/**
+	 * 获取用户
+	 * @param user
+	 * @param query
+	 * @param deptId
+	 * @param bladeUser
+	 * @return
+	 */
+	/*@GetMapping(GET_USER_PAGE)
+	R<IPage<UserVO>> getUserPage(@RequestBody User user, Query query, Long deptId, BladeUser bladeUser);*/
+
 }

+ 4 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/entity/Order.java

@@ -792,4 +792,8 @@ public class Order extends OrderBase {
 	private Date createStartTime;
 	@TableField(exist = false)
 	private Date createEndTime;
+
+	//请核标识  1采购 2销售
+	@TableField(exist = false)
+	private Integer checkFlag;
 }

+ 3 - 2
blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java

@@ -199,8 +199,9 @@ public class CorpsDescClient implements ICorpsDescClient {
 	 * @return
 	 */
 	@Override
-	public R insertCorp(CorpsDesc corpsDesc) {
-		return service.submit(corpsDesc);
+	@PostMapping(INSERT_CORP)
+	public int insertCorps(CorpsDesc corpsDesc) {
+		return service.inserts(corpsDesc);
 	}
 
 	@Override

+ 6 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsDescService.java

@@ -158,4 +158,10 @@ public interface ICorpsDescService extends IService<CorpsDesc> {
 	 */
 	List<CorpsDesc> getCorp(CorpsDesc corpsDesc);
 
+	/**
+	 * 添加客户信息
+	 * @param corpsDesc
+	 * @return
+	 */
+	int inserts(CorpsDesc corpsDesc);
 }

+ 10 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java

@@ -586,6 +586,16 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 		return baseMapper.getCorp(corpsDesc);
 	}
 
+	/**
+	 * 添加客户信息
+	 * @param corpsDesc
+	 * @return
+	 */
+	@Override
+	public int inserts(CorpsDesc corpsDesc) {
+		return baseMapper.insert(corpsDesc);
+	}
+
 
 	/**
 	 * 保护客户联系人信息

+ 4 - 3
blade-service/blade-project/src/main/java/org/springblade/project/controller/ProjectController.java

@@ -229,7 +229,7 @@ public class ProjectController {
 		ServiceProject serviceProject = serviceProjectService.getById(id);
 		List<String> status = Arrays.asList(itemStatus.split(","));
 		LambdaQueryWrapper<ServiceProjectItem> itemServiceLambdaQueryWrapper = new LambdaQueryWrapper<>();
-		itemServiceLambdaQueryWrapper.in(ServiceProjectItem::getStatus, status).eq(ServiceProjectItem::getPId, id).eq(ServiceProjectItem::getIsDeleted, 0);
+		itemServiceLambdaQueryWrapper.in(ServiceProjectItem::getStatus, status).eq(ServiceProjectItem::getPId, id).eq(ServiceProjectItem::getIsDeleted, 0).eq(ServiceProjectItem::getBranch,"N");
 		List<ServiceProjectItem> serviceProjectItems = serviceProjectItemService.list(itemServiceLambdaQueryWrapper);
 		if (serviceProject.getCorpId() != null) {
 			R<List<Map<String, Object>>> corpMessage = corpsDescClient.getCorpsMessage(serviceProject.getCorpId().toString());
@@ -343,7 +343,8 @@ public class ProjectController {
 		itemLambdaQueryWrapper.orderByDesc(ServiceProjectItem::getUpdateTime)
 			.eq(deptid != null, ServiceProjectItem::getDeptid, deptid)
 			/* .eq(ServiceProjectItem::getIsDeleted,0) */
-			.in(ServiceProjectItem::getStatus, listStatus);
+			.in(ServiceProjectItem::getStatus, listStatus)
+		.eq(ServiceProjectItem::getBranch,"Y");
 		Page<ServiceProjectItem> page = new Page<>(current, size);
 		IPage<ServiceProjectItem> iPage = serviceProjectItemService.page(page, itemLambdaQueryWrapper);
 		if (!CollectionUtils.isEmpty(iPage.getRecords())) {
@@ -925,7 +926,7 @@ public class ProjectController {
 	 * @param serviceProject
 	 * @return
 	 */
-	@PutMapping("dispatch")
+	@PostMapping("/dispatch")
 	public R dispatch(@RequestBody ServiceProject serviceProject) {
 		serviceProjectService.dispatch(serviceProject);
 		return R.data(serviceProject.getId());

+ 112 - 86
blade-service/blade-project/src/main/java/org/springblade/project/service/impl/ServiceProjectServiceImpl.java

@@ -123,6 +123,7 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
 			if (!CollectionUtils.isEmpty(itemList)) {
 				//判断新增或者修改操作
 				itemList.forEach(ls -> {
+					ls.setTaskStatus(10);
 					//修改
 					if (null != ls.getId()) {
 						if (ls.getProjectType() == 2) {
@@ -478,115 +479,140 @@ public class ServiceProjectServiceImpl extends ServiceImpl<ServiceProjectMapper,
 	 * @return
 	 */
 	@Override
+	@Transactional
 	public int dispatch(ServiceProject serviceProject) {
 		List<ServiceProjectItem> itemList = serviceProject.getItemList();
 		AtomicInteger status = new AtomicInteger(1);
 		itemList.forEach(ls -> {
+			//修改任务明细单据状态
+			ServiceProjectItem up = new ServiceProjectItem();
+			up.setId(ls.getId());
+			up.setTaskStatus(20);
+			up.setUpdateUser(SecureUtil.getUserId());
+			up.setUpdateTime(new Date());
+			up.setUpdateUserName(SecureUtil.getUser().getUserName());
+			serviceProjectItemMapper.updateById(up);
+
+			//派工生成任务处理
 			//判断次数  如果为空赋值为1
-			if (ObjectUtils.isNotNull(ls.getFrequency())) {
-				//判断次数  如果为空赋值为1
-				if (ObjectUtils.isNull(ls.getSecond())) {
-					ls.setSecond(1);
-				}
+			if (ObjectUtils.isNull(ls.getSecond())) {
+				ls.setSecond(1);
+			}
+			//获取当前时间
+			Date date = new Date();
+			//服务费
+			BigDecimal serviceCharge = ls.getServiceCharge().divide(new BigDecimal(ls.getSecond()));
+			//合计金额
+			BigDecimal amount = ls.getAmount().divide(new BigDecimal(ls.getSecond()));
+			//成本
+			BigDecimal matMoney = ls.getMatMoney().divide(new BigDecimal(ls.getSecond()));
+			//提成
+			if (ObjectUtils.isNotNull(ls.getCommission())) {
+				ls.setCommission(ls.getAmount().multiply(ls.getCommission()).divide(new BigDecimal(ls.getSecond())));
+			} else {
+				ls.setCommission(new BigDecimal(0));
+			}
+			//通过频率次数循环生成任务
+			for (int i = 0; i < ls.getSecond(); i++) {
+				//获取需求开始日期
+				Calendar calendar = Calendar.getInstance();
+				calendar.setTime(ls.getBeginTime());
+
+				//获取提醒日期
+				Calendar reminderCalendar = Calendar.getInstance();
+				Date reminderDate;
+
+				//判断开始,提醒日期
 				switch (ls.getFrequency()) {
 					case "1"://年
-						if(ObjectUtils.isNotNull(ls.getCommission())){
-							ls.setCommission(ls.getAmount().multiply(ls.getCommission()).divide(new BigDecimal(ls.getSecond() * 12)));
-						}else{
-							ls.setCommission(new BigDecimal(0));
+						if (i > 0) {
+							//开始日期
+							calendar.add(Calendar.MONTH, i + 12);//设置月分
+							//提醒日期
+							reminderCalendar.add(Calendar.MONTH, i + 12);//设置月分
+						} else {
+							//开始日期
+							calendar.add(Calendar.MONTH, i);//设置月分
+							//提醒日期
+							reminderCalendar.add(Calendar.MONTH, i);//设置月分
 						}
-						this.insertProjectItem(ls, ls.getSecond() * 12, serviceProject.getId());
 					case "2"://半年
-						if(ObjectUtils.isNotNull(ls.getCommission())){
-							ls.setCommission(ls.getAmount().multiply(ls.getCommission()).divide(new BigDecimal(ls.getSecond() * 6)));
-						}else{
-							ls.setCommission(new BigDecimal(0));
+						if (i > 0) {
+							//开始日期
+							calendar.add(Calendar.MONTH, i + 6);//设置月分
+							//提醒日期
+							reminderCalendar.add(Calendar.MONTH, i + 6);//设置月分
+						} else {
+							//开始日期
+							calendar.add(Calendar.MONTH, i);//设置月分
+							//提醒日期
+							reminderCalendar.add(Calendar.MONTH, i);//设置月分
 						}
-						this.insertProjectItem(ls, ls.getSecond() * 6, serviceProject.getId());
 					case "3"://季度
-						if(ObjectUtils.isNotNull(ls.getCommission())){
-							ls.setCommission(ls.getAmount().multiply(ls.getCommission()).divide(new BigDecimal(ls.getSecond() * 3)));
-						}else{
-							ls.setCommission(new BigDecimal(0));
+						if (i > 0) {
+							//开始日期
+							calendar.add(Calendar.MONTH, i + 3);//设置月分
+							//提醒日期
+							reminderCalendar.add(Calendar.MONTH, i + 3);//设置月分
+						} else {
+							//开始日期
+							calendar.add(Calendar.MONTH, i);//设置月分
+							//提醒日期
+							reminderCalendar.add(Calendar.MONTH, i);//设置月分
 						}
-						this.insertProjectItem(ls, ls.getSecond() * 3, serviceProject.getId());
 					case "4"://月
-						if(ObjectUtils.isNotNull(ls.getCommission())){
-							ls.setCommission(ls.getAmount().multiply(ls.getCommission()).divide(new BigDecimal(ls.getSecond())));
-						}else{
-							ls.setCommission(new BigDecimal(0));
+						if (i > 0) {
+							//开始日期
+							calendar.add(Calendar.MONTH, i + 1);//设置月分
+							//提醒日期
+							reminderCalendar.add(Calendar.MONTH, i + 1);//设置月分
+						} else {
+							//开始日期
+							calendar.add(Calendar.MONTH, i);//设置月分
+							//提醒日期
+							reminderCalendar.add(Calendar.MONTH, i);//设置月分
 						}
-						this.insertProjectItem(ls, ls.getSecond(), serviceProject.getId());
 					case "5"://次
-						if(ObjectUtils.isNotNull(ls.getCommission())){
-							ls.setCommission(ls.getAmount().multiply(ls.getCommission()).divide(new BigDecimal(ls.getSecond())));
-						}else{
-							ls.setCommission(new BigDecimal(0));
-						}
-						this.insertProjectItem(ls, ls.getSecond(), serviceProject.getId());
+						//开始日期
+						calendar.add(Calendar.MONTH, i);//设置月分
+						//提醒日期
+						reminderCalendar.add(Calendar.MONTH, i);//设置月分
 					default:
 						status.set(0);
 						break;
 				}
-			} else {
-				this.insertProjectItem(ls, 1, serviceProject.getId());
-			}
-		});
-		return status.get();
-	}
 
-	/**
-	 * 派工生成单条或多条任务
-	 * @param ls 任务集合
-	 * @param number  生成条数
-	 * @param projectId  父id
-	 */
-	public void insertProjectItem(ServiceProjectItem ls, int number, Long projectId) {
-		//获取当前时间
-		Date date = new Date();
-		//服务费每月需缴纳
-		BigDecimal serviceCharge = ls.getServiceCharge().divide(new BigDecimal(number));
-		//合计金额每月需缴纳
-		BigDecimal amount = ls.getAmount().divide(new BigDecimal(number));
-		//成本每月需缴纳
-		BigDecimal matMoney = ls.getMatMoney().divide(new BigDecimal(number));
-		for (int i = 0; i < number; i++) {
-			//获取需求开始日期
-			Calendar calendar = Calendar.getInstance();
-			calendar.setTime(ls.getBeginTime());
-			calendar.add(Calendar.MONTH, i);//设置月分
-			calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
-			Date date1 = calendar.getTime();
-
-			//获取提醒日期
-			Calendar reminderCalendar = Calendar.getInstance();
-			Date reminderDate;
-			//判断提醒日期是否为空  空默认每月一日为提醒日期  否则 每月提醒日期为当前日
-			if (ObjectUtils.isNotNull(ls.getReminderDay())) {
-				reminderCalendar.setTime(ls.getReminderDay());
-				calendar.add(Calendar.MONTH, i);//设置月分
-				reminderDate = calendar.getTime();
-			} else {
-				calendar.setTime(date);
 				calendar.add(Calendar.MONTH, i);//设置月分
 				calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
-				reminderDate = calendar.getTime();
-			}
+				Date date1 = calendar.getTime();
+
+				//判断提醒日期是否为空  空默认每月一日为提醒日期  否则 每月提醒日期为当前日
+				if (ObjectUtils.isNotNull(ls.getReminderDay())) {
+					reminderCalendar.setTime(ls.getReminderDay());
+					reminderDate = reminderCalendar.getTime();
+				} else {
+					reminderCalendar.setTime(date);
+					reminderCalendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天
+					reminderDate = reminderCalendar.getTime();
+				}
 
-			ls.setServiceCharge(serviceCharge);
-			ls.setAmount(amount);
-			ls.setMatMoney(matMoney);
-			ls.setBeginTime(date1);
-			ls.setReminderDay(reminderDate);
-			ls.setTenantId(AuthUtil.getTenantId());
-			ls.setPId(projectId);
-			ls.setCreateTime(new Date());
-			ls.setCreateUser(SecureUtil.getUserId());
-			ls.setCreateUserName(SecureUtil.getUser().getUserName());
-			ls.setTaskStatus(10);
-			ls.setBranch("Y");
-			serviceProjectItemMapper.insert(ls);
-		}
+				ls.setServiceCharge(serviceCharge);
+				ls.setAmount(amount);
+				ls.setMatMoney(matMoney);
+				ls.setBeginTime(date1);
+				ls.setReminderDay(reminderDate);
+				ls.setTenantId(AuthUtil.getTenantId());
+				ls.setPId(ls.getPId());
+				ls.setCreateTime(new Date());
+				ls.setCreateUser(SecureUtil.getUserId());
+				ls.setCreateUserName(SecureUtil.getUser().getUserName());
+				ls.setStatus(4);
+				ls.setBranch("Y");
+				ls.setId(null);
+				serviceProjectItemMapper.insert(ls);
+			}
+		});
+		return status.get();
 	}
 
 	public void checkMoney(Long serviceId, List<ServiceProjectItem> items) {

+ 1 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/entrance/EntranceOrderController.java

@@ -334,7 +334,7 @@ public class EntranceOrderController extends BladeController {
 	/**
 	 * 删除 销售或采购费用明细订单表
 	 */
-	@PostMapping("/removeOrderFees")
+	@GetMapping("/removeOrderFees")
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入id")
 	public R removeOrderFees(@ApiParam(value = "主键id", required = true) @RequestParam String id) {

+ 23 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java

@@ -17,18 +17,26 @@
 package org.springblade.system.user.feign;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 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.constant.BladeConstant;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.entity.UserInfo;
 import org.springblade.system.user.entity.UserOauth;
 import org.springblade.system.user.enums.UserEnum;
 import org.springblade.system.user.service.IUserService;
+import org.springblade.system.user.vo.UserVO;
+import org.springblade.system.user.wrapper.UserWrapper;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -124,4 +132,19 @@ public class UserClient implements IUserClient {
 		return R.data(service.gainUser(SecureUtil.getTenantId()));
 	}
 
+	/**
+	 * 获取用户
+	 * @param user
+	 * @param query
+	 * @param deptId
+	 * @param bladeUser
+	 * @return
+	 */
+	/*@Override
+	@GetMapping(GET_USER_PAGE)
+	public R<IPage<UserVO>> getUserPage(User user, Query query, Long deptId, BladeUser bladeUser) {
+		IPage<User> pages = service.selectUserPage(Condition.getPage(query), user, deptId, (bladeUser.getTenantId().equals(BladeConstant.ADMIN_TENANT_ID) ? StringPool.EMPTY : bladeUser.getTenantId()));
+		return R.data(UserWrapper.build().pageVO(pages));
+	}*/
+
 }

+ 1 - 1
blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/controller/LeadsController.java

@@ -153,7 +153,7 @@ public class LeadsController extends BladeController {
 	}
 
 	/**
-	 * 新增 销售机会表(请核)
+	 * 新增 销售机会提交
 	 */
 	@PostMapping("/leadsSubmit")
 	@ApiOperationSupport(order = 4)

+ 7 - 9
blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/service/impl/LeadsServiceImpl.java

@@ -279,18 +279,16 @@ public class LeadsServiceImpl extends ServiceImpl<LeadsMapper, Leads> implements
 			corpsDesc.setCname(leads.getCorpName());
 			corpsDesc.setCode(leads.getCorpName());
 			corpsDesc.setCorpType("KH");
-			corpsDescClient.insertCorp(corpsDesc);
-
-			if (ObjectUtil.isNotEmpty(leads.getId())) {
-				leads.setCorpId(corpsDesc.getId());
-				leads.setUpdateUser(AuthUtil.getUserId());
-				leads.setUpdateTime(new Date());
-				baseMapper.updateById(leads);
+			corpsDescClient.insertCorps(corpsDesc);
+			R<CorpsDesc> corpsDesc1 = corpsDescClient.getCorpByName(leads.getCorpName(),AuthUtil.getTenantId());
+			if (ObjectUtils.isNotNull(corpsDesc1.getData())){
+				return corpsDesc1.getData().getId();
 			}else{
-				throw new SecurityException("操作失败:未查询到销售机会数据");
+				throw new SecurityException("操作失败:该用户不存在,添加未成功");
 			}
+		}else{
+			return corpsDescR.getData().getId();
 		}
-		return leads;
 	}
 
 	private String getUserName(Long userId) {

+ 20 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/controller/PurchaseOrderController.java

@@ -712,9 +712,29 @@ public class PurchaseOrderController extends BladeController {
 			GoodsDesc goodsDesc = goodsDescClient.getGoodsDescByCname(orderItemsExecl.getPriceCategoryNames());
 			if (ObjectUtils.isNotNull(goodsDesc)){
 				orderItemsExecl.setPriceCategory(goodsDesc.getId());
+			}else{
+				throw new SecurityException("商品类别未识别");
+			}
+			R<Long> cntrTypeId = dictBizClient.getId("boxModel",orderItemsExecl.getCntrType());
+			if (ObjectUtils.isNull(cntrTypeId)){
+				throw new SecurityException("箱型未识别");
 			}
 		}
 		return R.data(excelList);
 	}
 
+	/**
+	 * 撤销审核
+	 */
+	@PostMapping("/repealCancel")
+	@ApiOperationSupport(order = 11)
+	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
+	public R repealCancel(@RequestBody Order order) {
+		if (order.getId() == null){
+			throw  new SecurityException("缺少必要的参数");
+		}
+		orderService.repealCancel(order);
+		return R.success("操作成功");
+	}
+
 }

+ 2 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/IOrderService.java

@@ -131,4 +131,6 @@ public interface IOrderService extends IService<Order> {
 	 * 销售或采购订单表导出
 	 */
 	List<PurchaseOrderExcel> selOrderExport(Order order);
+
+    void repealCancel(Order order);
 }

+ 95 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/order/service/impl/OrderServiceImpl.java

@@ -1,6 +1,7 @@
 package com.trade.purchase.order.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -15,6 +16,7 @@ import com.trade.purchase.order.assemble.mapstruct.OrderMapstructMapper;
 import com.trade.purchase.order.component.IOrderSave;
 import com.trade.purchase.order.dto.OrderSubmitDto;
 import com.trade.purchase.order.entity.*;
+import com.trade.purchase.order.enums.OrderStatusEnum;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import com.trade.purchase.order.mapper.OrderItemsMapper;
 import com.trade.purchase.order.mapper.OrderMapper;
@@ -25,6 +27,8 @@ import com.trade.purchase.order.vo.OrderItemsVO;
 import com.trade.purchase.order.vo.OrderVO;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
+import org.springblade.check.dto.AuditProecessDTO;
+import org.springblade.check.feign.ICheckClient;
 import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.entity.FeesDesc;
 import org.springblade.client.feign.ICorpsDescClient;
@@ -77,6 +81,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	private IOrderFreightService orderFreightService;
 	private IPriceBankClient priceBankClient;
 
+	private final ICheckClient iCheckClient;
+
 
 
 	private final IOrderSave orderSave;
@@ -836,4 +842,93 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			order.getArrivalDateStart(), order.getArrivalDateEnd());
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class)
+	public void repealCancel(Order orderMessage) {
+		LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		orderLambdaQueryWrapper
+			.eq(Order::getId, orderMessage.getId())
+			.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 ("XS".equals(order.getBillType()) && order.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())) {
+				// ===========================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(lockingQuantity) > 0) {
+							throw new SecurityException("撤销失败:原单据的订货数量大于锁定库存,无法释放 库存");
+						}
+						// 增加可用库存
+						oneStock.setSurplusRouteQuantity(surplusRouteQuantity.add(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);
+			order.setOrderStatus("录入");
+			baseMapper.updateById(order);
+
+		// 删除审批流数据
+		AuditProecessDTO proecessDTO = new AuditProecessDTO();
+		if (orderMessage.getCheckFlag() == 1) {
+			proecessDTO.setProcessType("采购审批");
+		} else if (orderMessage.getCheckFlag() == 2) {
+			proecessDTO.setProcessType("销售审批");
+		} else {
+			proecessDTO.setProcessType("无");
+		}
+		proecessDTO.setCheckType(orderMessage.getCheckType());
+		proecessDTO.setBillId(orderMessage.getId());
+		proecessDTO.setPageLabel(orderMessage.getPageLabel());
+		R update = iCheckClient.update(proecessDTO);
+		if (!update.isSuccess()) {
+			throw new RuntimeException("删除审批流数据失败");
+		}
+	}
+
 }