纪新园 1 год назад
Родитель
Сommit
24d0e30def
15 измененных файлов с 366 добавлено и 32 удалено
  1. 16 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  2. 5 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrderItems.java
  3. 5 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjShipItems.java
  4. 4 3
      blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/TradeBillsController.java
  5. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/update/controller/UpdateController.java
  6. 1 1
      blade-service/blade-los/src/main/java/org/springblade/los/business/update/service/IUpdateService.java
  7. 48 11
      blade-service/blade-los/src/main/java/org/springblade/los/business/update/service/impl/UpdateServiceImpl.java
  8. 21 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/Interceptor/RepeatSubmitConfig.java
  9. 145 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/Interceptor/SubmitInterceptor.java
  10. 4 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java
  11. 18 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  12. 35 12
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java
  13. 13 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipController.java
  14. 9 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipReturnsController.java
  15. 41 4
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

+ 16 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java

@@ -24,11 +24,13 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springblade.los.business.amends.entity.Amends;
 import org.springblade.los.business.files.entity.FilesCenter;
 import org.springblade.los.business.sea.dto.ContainersReports;
 import org.springblade.los.business.sea.dto.WaitingBox;
 import org.springblade.los.finance.fee.dto.FeeCenterReports;
 import org.springblade.los.finance.fee.entity.FeeCenter;
+import org.springblade.los.finance.fee.entity.FinAccBills;
 import org.springblade.los.trade.entity.DispatchVehicles;
 import org.springblade.los.trade.entity.InOutStorage;
 import org.springblade.los.utils.LosSpecialHandle;
@@ -1790,6 +1792,18 @@ public class Bills implements Serializable {
 	private List<DispatchVehicles> dispatchVehiclesList;
 
 	/**
+	 * 账单明细
+	 */
+	@TableField(exist = false)
+	private List<FinAccBills> finAccBillsList;
+
+	/**
+	 * amends明细
+	 */
+	@TableField(exist = false)
+	private List<Amends> amendsList;
+
+	/**
 	 * 明细
 	 */
 	@TableField(exist = false)
@@ -1845,4 +1859,6 @@ public class Bills implements Serializable {
 	@TableField(exist = false)
 	private String dispatchTime2;
 
+
+
 }

+ 5 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrderItems.java

@@ -233,6 +233,11 @@ public class PjOrderItems implements Serializable {
 	@ApiModelProperty(value = "成本价")
 	private BigDecimal costprie;
 	/**
+	 * 成本单价
+	 */
+	@ApiModelProperty(value = "成本单价")
+	private BigDecimal costpriePrice;
+	/**
 	 * 利润
 	 */
 	@ApiModelProperty(value = "利润")

+ 5 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjShipItems.java

@@ -193,6 +193,11 @@ public class PjShipItems implements Serializable {
 	@ApiModelProperty(value = "成本价")
 	private BigDecimal costprie;
 	/**
+	 * 成本单价
+	 */
+	@ApiModelProperty(value = "成本单价")
+	private BigDecimal costpriePrice;
+	/**
 	 * 利润
 	 */
 	@ApiModelProperty(value = "利润")

+ 4 - 3
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/TradeBillsController.java

@@ -125,9 +125,10 @@ public class TradeBillsController extends BladeController {
 		}
 		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("允许修改他人业务") && !AuthUtil.getUserRole().contains("secondaryAdmin")) {
 			if (AuthUtil.getUserRole().contains("业务员") || AuthUtil.getUserRole().contains("操作员")) {
-				lambdaQueryWrapper.and(i -> i.eq(Bills::getSrcId, AuthUtil.getUserId()).or()
-					.eq(Bills::getOperatorId, AuthUtil.getUserId()));
-//				lambdaQueryWrapper.eq(Bills::getSrcId, AuthUtil.getUserId());
+				lambdaQueryWrapper.and(i -> i.eq(Bills::getSrcId, AuthUtil.getUserId())
+					.or().eq(Bills::getOperatorId, AuthUtil.getUserId())
+					.or().eq(Bills::getCreateUser, AuthUtil.getUserId())
+				);
 			} else {
 				lambdaQueryWrapper.eq(Bills::getCreateUser, AuthUtil.getUserId());
 			}

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/business/update/controller/UpdateController.java

@@ -162,7 +162,7 @@ public class UpdateController extends BladeController {
 	@PostMapping("/passCheck")
 	@ApiOperationSupport(order = 14)
 	@RepeatSubmit
-	public R passCheck(@ApiParam(value = "主表id", required = true) @RequestParam Long id) {
+	public R passCheck(@ApiParam(value = "主表id", required = true) @RequestParam Long id) throws Exception{
 		return updateService.passCheck(id);
 	}
 

+ 1 - 1
blade-service/blade-los/src/main/java/org/springblade/los/business/update/service/IUpdateService.java

@@ -47,7 +47,7 @@ public interface IUpdateService extends IService<Update> {
 
 	Update checkUpdate(Update update);
 
-	R passCheck(Long id);
+	R passCheck(Long id)throws Exception;
 
 	R underReview(Long id);
 

+ 48 - 11
blade-service/blade-los/src/main/java/org/springblade/los/business/update/service/impl/UpdateServiceImpl.java

@@ -53,6 +53,7 @@ import org.springblade.system.entity.Dept;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -245,7 +246,7 @@ public class UpdateServiceImpl extends ServiceImpl<UpdateMapper, Update> impleme
 	}
 
 	@Override
-	public R passCheck(Long id) {
+	public R passCheck(Long id) throws Exception {
 		Update update = baseMapper.selectById(id);
 		if (update == null) {
 			throw new SecurityException("审批通过失败");
@@ -342,13 +343,21 @@ public class UpdateServiceImpl extends ServiceImpl<UpdateMapper, Update> impleme
 			.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
 			.eq(FinAccBills::getIsDeleted, 0));
 		for (UpdateItem item : updateItemList) {
-			if ("SE".equals(update.getBusinessType()) || "SI".equals(update.getBusinessType())) {
-				bills = updateBills(bills, amendsList, feeCenterList, finAccBillsList, item);
-			} else if ("AI".equals(update.getBusinessType()) || "AE".equals(update.getBusinessType())) {
-				aeaBills = updateAeaBills(aeaBills, amendsList, feeCenterList, finAccBillsList, item);
-			} else if ("BGSE".equals(update.getBusinessType()) || "BGSI".equals(update.getBusinessType()) ||
-				"BGAI".equals(update.getBusinessType()) || "BGAE".equals(update.getBusinessType())) {
-				customsDeclaration = updateCustomsDeclaration(customsDeclaration, amendsList, feeCenterList, finAccBillsList, item);
+			if (0 == item.getStatus()) {
+				if ("SE".equals(update.getBusinessType()) || "SI".equals(update.getBusinessType())) {
+					if (bills != null) {
+						updateBills(bills, amendsList, feeCenterList, finAccBillsList, item);
+					}
+				} else if ("AI".equals(update.getBusinessType()) || "AE".equals(update.getBusinessType())) {
+					if (aeaBills != null) {
+						updateAeaBills(aeaBills, amendsList, feeCenterList, finAccBillsList, item);
+					}
+				} else if ("BGSE".equals(update.getBusinessType()) || "BGSI".equals(update.getBusinessType()) ||
+					"BGAI".equals(update.getBusinessType()) || "BGAE".equals(update.getBusinessType())) {
+					if (customsDeclaration != null) {
+						updateCustomsDeclaration(customsDeclaration, amendsList, feeCenterList, finAccBillsList, item);
+					}
+				}
 			}
 		}
 		if ("SE".equals(update.getBusinessType()) || "SI".equals(update.getBusinessType())) {
@@ -389,15 +398,43 @@ public class UpdateServiceImpl extends ServiceImpl<UpdateMapper, Update> impleme
 		return R.success("操作成功");
 	}
 
-	private Bills updateBills(Bills bills, List<Amends> amendsList, List<FeeCenter> feeCenterList, List<FinAccBills> finAccBillsList, UpdateItem item) {
+	private Bills updateBills(Bills bills, List<Amends> amendsList, List<FeeCenter> feeCenterList, List<FinAccBills> finAccBillsList, UpdateItem item) throws Exception {
+		Field field = bills.getClass().getDeclaredField(item.getField());
+		field.setAccessible(true); // 使私有字段可访问
+		field.set(bills, item.getFieldValueNew());
+
+		if (!amendsList.isEmpty()) {
+			for (Amends amends : amendsList) {
+				Field fieldAmends = amends.getClass().getDeclaredField(item.getField());
+				fieldAmends.setAccessible(true); // 使私有字段可访问
+				fieldAmends.set(amends, item.getFieldValueNew());
+			}
+			bills.setAmendsList(amendsList);
+		}
+		if (item.getSurface().contains("FeeCenter") && !feeCenterList.isEmpty()) {
+			for (FeeCenter feeCenter : feeCenterList) {
+				Field fieldFeeCenter = feeCenter.getClass().getDeclaredField(item.getField());
+				fieldFeeCenter.setAccessible(true); // 使私有字段可访问
+				fieldFeeCenter.set(feeCenter, item.getFieldValueNew());
+			}
+			bills.setFeeCenterListD(feeCenterList);
+		}
+		if (item.getSurface().contains("FinAccBills") && !finAccBillsList.isEmpty()) {
+			for (FinAccBills accBills : finAccBillsList) {
+				Field fieldFinAccBills = accBills.getClass().getDeclaredField(item.getField());
+				fieldFinAccBills.setAccessible(true); // 使私有字段可访问
+				fieldFinAccBills.set(accBills, item.getFieldValueNew());
+			}
+			bills.setFinAccBillsList(finAccBillsList);
+		}
 		return bills;
 	}
 
-	private AeaBills updateAeaBills(AeaBills aeaBills, List<Amends> amendsList, List<FeeCenter> feeCenterList, List<FinAccBills> finAccBillsList, UpdateItem item) {
+	private AeaBills updateAeaBills(AeaBills aeaBills, List<Amends> amendsList, List<FeeCenter> feeCenterList, List<FinAccBills> finAccBillsList, UpdateItem item) throws Exception {
 		return aeaBills;
 	}
 
-	private CustomsDeclaration updateCustomsDeclaration(CustomsDeclaration customsDeclaration, List<Amends> amendsList, List<FeeCenter> feeCenterList, List<FinAccBills> finAccBillsList, UpdateItem item) {
+	private CustomsDeclaration updateCustomsDeclaration(CustomsDeclaration customsDeclaration, List<Amends> amendsList, List<FeeCenter> feeCenterList, List<FinAccBills> finAccBillsList, UpdateItem item) throws Exception {
 		return customsDeclaration;
 	}
 

+ 21 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/Interceptor/RepeatSubmitConfig.java

@@ -0,0 +1,21 @@
+package org.springblade.salesPart.Interceptor;
+
+import lombok.AllArgsConstructor;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+@EnableWebMvc
+@AllArgsConstructor
+public class RepeatSubmitConfig implements WebMvcConfigurer {
+
+	private final SubmitInterceptor submitInterceptor;
+
+	@Override
+	public void addInterceptors(InterceptorRegistry registry) {
+		registry.addInterceptor(submitInterceptor).addPathPatterns("/**");
+	}
+}
+

+ 145 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/Interceptor/SubmitInterceptor.java

@@ -0,0 +1,145 @@
+package org.springblade.salesPart.Interceptor;
+
+import com.alibaba.cloud.commons.lang.StringUtils;
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.formula.functions.T;
+import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.common.constant.Constants;
+import org.springblade.common.filter.RepeatedlyRequestWrapper;
+import org.springblade.common.http.HttpHelper;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.ValueOperations;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 防止重复提交拦截器
+ *
+ * @author
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class SubmitInterceptor implements HandlerInterceptor {
+
+	public final RedisTemplate redisTemplate;
+
+	/**
+	 * 间隔时间,单位:秒 默认10秒
+	 *
+	 * 两次相同参数的请求,如果间隔时间大于该参数,系统不会认定为重复提交的数据
+	 */
+
+	@Override
+	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+		if (handler instanceof HandlerMethod) {
+			HandlerMethod handlerMethod = (HandlerMethod) handler;
+			Method method = handlerMethod.getMethod();
+			RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class);
+			if (annotation != null) {
+				if (this.isRepeatSubmit(request)) {
+					throw new RuntimeException("操作过于频繁,请稍后再试!");
+				}
+			}
+			return true;
+		} else {
+			return true;
+		}
+	}
+
+	/**
+	 * 验证是否重复提交由子类实现具体的防重复提交的规则
+	 *
+	 * @param request
+	 * @return
+	 * @throws Exception
+	 */
+	@SuppressWarnings("unchecked")
+	public boolean isRepeatSubmit(HttpServletRequest request)
+	{
+		String nowParams = "";
+		if (request instanceof RepeatedlyRequestWrapper)
+		{
+			RepeatedlyRequestWrapper repeatedlyRequest = (RepeatedlyRequestWrapper) request;
+			nowParams = HttpHelper.getBodyString(repeatedlyRequest);
+		}
+
+		// body参数为空,获取Parameter的数据
+		if (StringUtils.isEmpty(nowParams))
+		{
+			nowParams = JSONObject.toJSONString(request.getParameterMap());
+		}
+		Map<String, Object> nowDataMap = new HashMap<String, Object>();
+		nowDataMap.put(Constants.REPEAT_PARAMS, nowParams);
+		nowDataMap.put(Constants.REPEAT_TIME, System.currentTimeMillis());
+
+		// 请求地址(作为存放cache的key值)
+		String url = request.getRequestURI();
+
+		// 唯一值(没有消息头则使用请求地址)
+		String submitKey = "";
+		if (StringUtils.isEmpty(submitKey))
+		{
+			submitKey = url;
+		}
+
+		// 唯一标识(指定key + 消息头)
+		String cache_repeat_key = Constants.REPEAT_SUBMIT_KEY + submitKey;
+
+		ValueOperations<String, T> operation = redisTemplate.opsForValue();
+		Object sessionObj = operation.get(cache_repeat_key);
+		if (sessionObj != null)
+		{
+			Map<String, Object> sessionMap = (Map<String, Object>) sessionObj;
+			if (sessionMap.containsKey(url))
+			{
+				Map<String, Object> preDataMap = (Map<String, Object>) sessionMap.get(url);
+				if (compareParams(nowDataMap, preDataMap) && compareTime(nowDataMap, preDataMap))
+				{
+					return true;
+				}
+			}
+		}
+		Map<String, Object> cacheMap = new HashMap<String, Object>();
+		cacheMap.put(url, nowDataMap);
+		redisTemplate.opsForValue().set(cache_repeat_key, cacheMap, 2, TimeUnit.SECONDS);
+		return false;
+	}
+
+	/**
+	 * 判断参数是否相同
+	 */
+
+	private boolean compareParams(Map<String, Object> nowMap, Map<String, Object> preMap)
+	{
+		String nowParams = (String) nowMap.get(Constants.REPEAT_PARAMS);
+		String preParams = (String) preMap.get(Constants.REPEAT_PARAMS);
+		return nowParams.equals(preParams);
+	}
+
+	/**
+	 * 判断两次间隔时间
+	 */
+
+	private boolean compareTime(Map<String, Object> nowMap, Map<String, Object> preMap)
+	{
+		long time1 = (Long) nowMap.get(Constants.REPEAT_TIME);
+		long time2 = (Long) preMap.get(Constants.REPEAT_TIME);
+		if ((time1 - time2) < (2 * 1000))
+		{
+			return true;
+		}
+		return false;
+	}
+
+}

+ 4 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java

@@ -403,6 +403,7 @@ public class OrderController extends BladeController {
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "删除", notes = "传入ids")
+	@RepeatSubmit
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		List<Long> idList = Func.toLongList(ids);
 		List<PjShip> shipList = shipService.list(new LambdaQueryWrapper<PjShip>()
@@ -951,6 +952,7 @@ public class OrderController extends BladeController {
 	@GetMapping("/statistics-exportDetails")
 	@ApiOperationSupport(order = 3)
 	@ApiOperation(value = "分页", notes = "传入order")
+	@RepeatSubmit
 	public void listExportDetails(PjOrder order, HttpServletResponse response) {
 		LambdaQueryWrapper<PjOrder> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper
@@ -1064,6 +1066,7 @@ public class OrderController extends BladeController {
 	 */
 	@PostMapping("/import-item-name")
 	@ApiOperationSupport(order = 13)
+	@RepeatSubmit
 	public R importItemName(@RequestParam("file") MultipartFile file) {
 		//导入数据
 		List<ShipItemImportXSExcel> excelList = ExcelUtil.read(file, ShipItemImportXSExcel.class);
@@ -1080,6 +1083,7 @@ public class OrderController extends BladeController {
 	@PostMapping("/import-item-code")
 	@ApiOperationSupport(order = 13)
 	@ApiOperation(value = "入库明细导入", notes = "传入excel")
+	@RepeatSubmit
 	public R importItemCode(@RequestParam("file") MultipartFile file) {
 		//导入数据
 		List<ShipItemImportXSCodeExcel> excelList = ExcelUtil.read(file, ShipItemImportXSCodeExcel.class);

+ 18 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java

@@ -1845,6 +1845,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				System.out.println(e.getMessage());
 				// 关闭线程池
 				executor.shutdown();
+				throw new RuntimeException(e);
 			} finally {
 				// 关闭线程池
 				executor.shutdown();
@@ -1935,6 +1936,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				System.out.println(e.getMessage());
 				// 关闭线程池
 				executor.shutdown();
+				throw new RuntimeException(e);
 			} finally {
 				// 关闭线程池
 				executor.shutdown();
@@ -2053,6 +2055,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				System.out.println(e.getMessage());
 				// 关闭线程池
 				executor.shutdown();
+				throw new RuntimeException(e);
 			} finally {
 				// 关闭线程池
 				executor.shutdown();
@@ -2139,6 +2142,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				System.out.println(e.getMessage());
 				// 关闭线程池
 				executor.shutdown();
+				throw new RuntimeException(e);
 			} finally {
 				// 关闭线程池
 				executor.shutdown();
@@ -3430,6 +3434,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				System.out.println(e.getMessage());
 				// 关闭线程池
 				executor.shutdown();
+				throw new RuntimeException(e);
 			} finally {
 				// 关闭线程池
 				executor.shutdown();
@@ -3775,6 +3780,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 						goodsName.append(goodsDesc.getCname()).append(",");
 						retrieval.append(goodsDesc.getCnameInt()).append(",");
 						item.setCostprie(item.getGoodsNum().multiply(inventoryCostPrice));
+						item.setCostpriePrice(inventoryCostPrice);
 						item.setRebateCostprie(item.getGoodsNum().multiply(rebateInventoryCostPrice));
 					} else {//共享仓取共享上架的共享成本
 						LambdaQueryWrapper<PjProductLaunch> lambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -3788,6 +3794,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 						PjProductLaunch productLaunch = productLaunchService.getOne(lambdaQueryWrapper);
 						if (ObjectUtils.isNotNull(productLaunch)) {
 							item.setCostprie(item.getGoodsNum().multiply(productLaunch.getShareCost()));
+							item.setCostpriePrice(productLaunch.getShareCost());
 							item.setRebateCostprie(item.getGoodsNum().multiply(productLaunch.getShareCost()));
 						} else {
 							throw new RuntimeException("请维护共享商品成本价格");
@@ -3926,6 +3933,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					if (ObjectUtils.isNull(order.getStatus()) || "录入".equals(order.getStatus())) {
 						item.setPrimaryGoodsTotalNum(item.getGoodsNum());
 					}
+					item.setCostprie(item.getSubTotalMoney());
+					item.setCostpriePrice(item.getPrice());
 					if (item.getId() == null) {
 						item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 						item.setCreateTime(new Date());
@@ -4055,6 +4064,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					if (ObjectUtils.isNull(order.getStatus()) || "录入".equals(order.getStatus())) {
 						item.setPrimaryGoodsTotalNum(item.getGoodsNum());
 					}
+					item.setCostprie(item.getSubTotalMoney());
+					item.setCostpriePrice(item.getPrice());
 					if (item.getId() == null) {
 						item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 						item.setCreateTime(new Date());
@@ -4327,6 +4338,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 							}
 						} catch (IOException e) {
 							e.printStackTrace();
+							throw new RuntimeException(e);
 						}
 					} else {
 						throw new RuntimeException("access_token获取失败");
@@ -4336,6 +4348,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				}
 			} catch (IOException e) {
 				e.printStackTrace();
+				throw new RuntimeException(e);
 			}
 		}
 		// 创建线程池
@@ -4349,6 +4362,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				System.out.println(e.getMessage());
 				// 关闭线程池
 				executor.shutdown();
+				throw new RuntimeException(e);
 			} finally {
 				// 关闭线程池
 				executor.shutdown();
@@ -4463,6 +4477,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 									}
 								} catch (Exception e) {
 									e.printStackTrace();
+									throw new RuntimeException(e);
 								}
 							}
 							if (!data.isEmpty()) {
@@ -4566,6 +4581,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				System.out.println(e.getMessage());
 				// 关闭线程池
 				executor.shutdown();
+				throw new RuntimeException(e);
 			} finally {
 				// 关闭线程池
 				executor.shutdown();
@@ -4653,6 +4669,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				System.out.println(e.getMessage());
 				// 关闭线程池
 				executor.shutdown();
+				throw new RuntimeException(e);
 			} finally {
 				// 关闭线程池
 				executor.shutdown();
@@ -5485,6 +5502,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 				System.out.println(e.getMessage());
 				// 关闭线程池
 				executor.shutdown();
+				throw new RuntimeException(e);
 			} finally {
 				// 关闭线程池
 				executor.shutdown();

+ 35 - 12
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java

@@ -136,17 +136,29 @@ public class ProductLaunchController extends BladeController {
 				String[] chineseWords = productLaunch.getCname().split("[^一-龥]");
 				if (chineseWords.length > 0) {
 					String cname = productLaunch.getCname().substring(chineseWords[0].length());
-					lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, cname)
-						.or().like(PjProductLaunch::getCnameInt, cname)
-						.or().like(PjProductLaunch::getBrandItem, cname)
-						.or().like(PjProductLaunch::getSpecificationAndModel, cname)
-					);
-					lambdaQueryWrapper.like(PjProductLaunch::getBrandName, chineseWords[0]);
+					if (ObjectUtils.isNotNull(cname)){
+						lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, cname)
+							.or().like(PjProductLaunch::getCnameInt, cname)
+							.or().like(PjProductLaunch::getBrandItem, cname)
+							.or().like(PjProductLaunch::getSpecificationAndModel, cname)
+							.or().like(PjProductLaunch::getBrandName, chineseWords[0])
+						);
+//					lambdaQueryWrapper.like(PjProductLaunch::getBrandName, chineseWords[0]);
+					}else{
+						lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, chineseWords[0])
+							.or().like(PjProductLaunch::getCnameInt, chineseWords[0])
+							.or().like(PjProductLaunch::getBrandItem, chineseWords[0])
+							.or().like(PjProductLaunch::getSpecificationAndModel, chineseWords[0])
+							.or().like(PjProductLaunch::getBrandName, chineseWords[0])
+						);
+//					lambdaQueryWrapper.like(PjProductLaunch::getBrandName, chineseWords[0]);
+					}
 				} else {
 					lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, productLaunch.getCname())
 						.or().like(PjProductLaunch::getCnameInt, productLaunch.getCname())
 						.or().like(PjProductLaunch::getBrandItem, productLaunch.getCname())
 						.or().like(PjProductLaunch::getSpecificationAndModel, productLaunch.getCname())
+						.or().like(PjProductLaunch::getBrandName, productLaunch.getCname())
 					);
 				}
 			}
@@ -546,12 +558,23 @@ public class ProductLaunchController extends BladeController {
 				String[] chineseWords = productLaunch.getCname().split("[^一-龥]");
 				if (chineseWords.length > 0) {
 					String cname = productLaunch.getCname().substring(chineseWords[0].length());
-					lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, cname)
-						.or().like(PjProductLaunch::getCnameInt, cname)
-						.or().like(PjProductLaunch::getBrandItem, cname)
-						.or().like(PjProductLaunch::getSpecificationAndModel, cname)
-					);
-					lambdaQueryWrapper.like(PjProductLaunch::getBrandName, chineseWords[0]);
+					if (ObjectUtils.isNotNull(cname)){
+						lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, cname)
+							.or().like(PjProductLaunch::getCnameInt, cname)
+							.or().like(PjProductLaunch::getBrandItem, cname)
+							.or().like(PjProductLaunch::getSpecificationAndModel, cname)
+							.or().like(PjProductLaunch::getBrandName, chineseWords[0])
+						);
+//					lambdaQueryWrapper.like(PjProductLaunch::getBrandName, chineseWords[0]);
+					}else{
+						lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, chineseWords[0])
+							.or().like(PjProductLaunch::getCnameInt, chineseWords[0])
+							.or().like(PjProductLaunch::getBrandItem, chineseWords[0])
+							.or().like(PjProductLaunch::getSpecificationAndModel, chineseWords[0])
+							.or().like(PjProductLaunch::getBrandName, chineseWords[0])
+						);
+//					lambdaQueryWrapper.like(PjProductLaunch::getBrandName, chineseWords[0]);
+					}
 				} else {
 					lambdaQueryWrapper.and(i -> i.like(PjProductLaunch::getCname, productLaunch.getCname())
 						.or().like(PjProductLaunch::getCnameInt, productLaunch.getCname())

+ 13 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipController.java

@@ -25,6 +25,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -242,6 +243,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/submit")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入ship")
+	@RepeatSubmit
 	public R submit(@Valid @RequestBody PjShip ship) {
 		if (ObjectUtil.isEmpty(ship.getBizTypeName())) {
 			throw new RuntimeException("缺少必要参数");
@@ -268,6 +270,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/remove")
 	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "删除", notes = "传入ids")
+	@RepeatSubmit
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		return R.status(shipService.removeByIds(Func.toLongList(ids)));
 	}
@@ -278,6 +281,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/outboundWorkOrder")
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "删除", notes = "传入ids")
+	@RepeatSubmit
 	public R outboundWorkOrder(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		if (ObjectUtil.isEmpty(ids)) {
 			throw new RuntimeException("缺少必要参数");
@@ -291,6 +295,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/outboundCompleted")
 	@ApiOperationSupport(order = 10)
 	@ApiOperation(value = "出库完成", notes = "传入ship")
+	@RepeatSubmit
 	public R outboundCompleted(@Valid @RequestBody PjShip ship) {
 		return shipService.outboundCompleted(ship);
 	}
@@ -301,6 +306,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/revokeOutboundCompleted")
 	@ApiOperationSupport(order = 10)
 	@ApiOperation(value = "出库完成", notes = "传入ship")
+	@RepeatSubmit
 	public R revokeOutboundCompleted(@Valid @RequestBody PjShip ship) {
 		return shipService.revokeOutboundCompleted(ship);
 	}
@@ -311,6 +317,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/generateWarehousing")
 	@ApiOperationSupport(order = 11)
 	@ApiOperation(value = "删除", notes = "传入ids")
+	@RepeatSubmit
 	public R generateWarehousing(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		if (ObjectUtil.isEmpty(ids)) {
 			throw new RuntimeException("缺少必要参数");
@@ -324,6 +331,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/warehousingComplete")
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "入库完成", notes = "传入ship")
+	@RepeatSubmit
 	public R warehousingComplete(@Valid @RequestBody PjShip ship) {
 		return shipService.warehousingComplete(ship);
 	}
@@ -334,6 +342,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/revokeWarehousing")
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "撤销入库", notes = "传入ship")
+	@RepeatSubmit
 	public R revokeWarehousing(@Valid @RequestBody PjShip ship) {
 		return shipService.revokeWarehousing(ship);
 	}
@@ -344,6 +353,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/revokeWorkOrder")
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "删除", notes = "传入ids")
+	@RepeatSubmit
 	public R revokeWorkOrder(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		if (ObjectUtil.isEmpty(ids)) {
 			throw new RuntimeException("缺少必要参数");
@@ -357,6 +367,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/import-item")
 	@ApiOperationSupport(order = 13)
 	@ApiOperation(value = "入库明细导入", notes = "传入excel")
+	@RepeatSubmit
 	public R importItem(@RequestParam("file") MultipartFile file) {
 		//导入数据
 		List<ShipItemImportExcel> excelList = ExcelUtil.read(file, ShipItemImportExcel.class);
@@ -373,6 +384,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/import-item-code")
 	@ApiOperationSupport(order = 13)
 	@ApiOperation(value = "入库明细导入", notes = "传入excel")
+	@RepeatSubmit
 	public R importItemCode(@RequestParam("file") MultipartFile file) {
 		//导入数据
 		List<ShipItemImportCodeExcel> excelList = ExcelUtil.read(file, ShipItemImportCodeExcel.class);
@@ -411,6 +423,7 @@ public class ShipController extends BladeController {
 	@PostMapping("/returnWarehouse")
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "退货入库完成", notes = "传入ship")
+	@RepeatSubmit
 	public R returnWarehouse(@Valid @RequestBody PjShip ship) {
 		return shipService.returnWarehouse(ship);
 	}

+ 9 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipReturnsController.java

@@ -24,6 +24,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.AllArgsConstructor;
+import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -208,6 +209,7 @@ public class ShipReturnsController extends BladeController {
 	@PostMapping("/submitReturns")
 	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "新增或修改", notes = "传入ship")
+	@RepeatSubmit
 	public R submitReturns(@Valid @RequestBody PjShip ship) {
 		if (ObjectUtil.isEmpty(ship.getBizTypeName())) {
 			throw new RuntimeException("缺少必要参数");
@@ -231,6 +233,7 @@ public class ShipReturnsController extends BladeController {
 	@PostMapping("/outboundWorkOrderReturns")
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "删除", notes = "传入ids")
+	@RepeatSubmit
 	public R outboundWorkOrderReturns(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		if (ObjectUtil.isEmpty(ids)) {
 			throw new RuntimeException("缺少必要参数");
@@ -244,6 +247,7 @@ public class ShipReturnsController extends BladeController {
 	@PostMapping("/outboundCompletedReturns")
 	@ApiOperationSupport(order = 10)
 	@ApiOperation(value = "出库完成", notes = "传入ship")
+	@RepeatSubmit
 	public R outboundCompletedReturns(@Valid @RequestBody PjShip ship) {
 		return shipService.outboundCompletedReturns(ship);
 	}
@@ -254,6 +258,7 @@ public class ShipReturnsController extends BladeController {
 	@PostMapping("/revokeOutboundCompletedReturns")
 	@ApiOperationSupport(order = 10)
 	@ApiOperation(value = "出库完成", notes = "传入ship")
+	@RepeatSubmit
 	public R revokeOutboundCompletedReturns(@Valid @RequestBody PjShip ship) {
 		return shipService.revokeOutboundCompletedReturns(ship);
 	}
@@ -264,6 +269,7 @@ public class ShipReturnsController extends BladeController {
 	@PostMapping("/generateWarehousingReturns")
 	@ApiOperationSupport(order = 11)
 	@ApiOperation(value = "删除", notes = "传入ids")
+	@RepeatSubmit
 	public R generateWarehousingReturns(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		if (ObjectUtil.isEmpty(ids)) {
 			throw new RuntimeException("缺少必要参数");
@@ -277,6 +283,7 @@ public class ShipReturnsController extends BladeController {
 	@PostMapping("/warehousingCompleteReturns")
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "入库完成", notes = "传入ship")
+	@RepeatSubmit
 	public R warehousingCompleteReturns(@Valid @RequestBody PjShip ship) {
 		return shipService.warehousingCompleteReturns(ship);
 	}
@@ -287,6 +294,7 @@ public class ShipReturnsController extends BladeController {
 	@PostMapping("/revokeWarehousingReturns")
 	@ApiOperationSupport(order = 12)
 	@ApiOperation(value = "撤销入库", notes = "传入ship")
+	@RepeatSubmit
 	public R revokeWarehousingReturns(@Valid @RequestBody PjShip ship) {
 		return shipService.revokeWarehousingReturns(ship);
 	}
@@ -297,6 +305,7 @@ public class ShipReturnsController extends BladeController {
 	@PostMapping("/revokeWorkOrderReturns")
 	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "删除", notes = "传入ids")
+	@RepeatSubmit
 	public R revokeWorkOrderReturns(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		if (ObjectUtil.isEmpty(ids)) {
 			throw new RuntimeException("缺少必要参数");

+ 41 - 4
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java

@@ -252,6 +252,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 		if (CollectionUtils.isNotEmpty(ship.getShipItemsList())) {
 			List<PjShipItems> shipItemsList = new ArrayList<>();
 			ship.getShipItemsList().forEach(item -> {
+				item.setCostprie(item.getSendNum().multiply(item.getCostpriePrice()));
 				if (item.getId() == null) {
 					item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
 					item.setCreateTime(new Date());
@@ -499,6 +500,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 							}
 						} catch (Exception e) {
 							e.printStackTrace();
+							throw new RuntimeException(e);
 						}
 					}
 					if (!data.isEmpty()) {
@@ -678,6 +680,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 							}
 						} catch (Exception e) {
 							e.printStackTrace();
+							throw new RuntimeException(e);
 						}
 					}
 					if (!data.isEmpty()) {
@@ -791,6 +794,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			);
 			StringBuilder msg1 = new StringBuilder();
 			for (PjShipItems item : ship.getShipItemsList()) {
+				item.setCostprie(item.getSendNum().multiply(item.getCostpriePrice()));
 				number = number.add(item.getSendNum());
 				if (item.getId() == null) {
 					item.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
@@ -849,11 +853,11 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				if (orderItems != null) {
 					if (ObjectUtils.isNull(orderItems.getCostprie()) || new BigDecimal("0.00").compareTo(orderItems.getCostprie()) == 0) {
 						orderItems.setCostprie(stockOne.getInventoryCostPrice().multiply(orderItems.getGoodsNum()));
-						orderItems.setGrossProfit(item.getSubTotalMoney().subtract(orderItems.getCostprie()));
+						orderItems.setGrossProfit(orderItems.getSubTotalMoney().subtract(orderItems.getCostprie()));
 					}
 					if (ObjectUtils.isNull(orderItems.getRebateCostprie()) || new BigDecimal("0.00").compareTo(orderItems.getRebateCostprie()) == 0) {
 						orderItems.setRebateCostprie(stockOne.getRebatePrice().multiply(orderItems.getGoodsNum()));
-						orderItems.setRebateProfit(item.getSubTotalMoney().subtract(orderItems.getRebateCostprie()));
+						orderItems.setRebateProfit(orderItems.getSubTotalMoney().subtract(orderItems.getRebateCostprie()));
 					}
 					if (orderItems.getGoodsNum().compareTo(orderItems.getSendNum().add(item.getSendNum())) < 0) {
 						throw new RuntimeException(orderItems.getGoodsName() + "剩余应发货数量" + orderItems.getGoodsNum().subtract(orderItems.getSendNum()));
@@ -931,6 +935,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 				orderMapper.updateById(order);
 			}
 		}
+		//融资流程
 		if (ObjectUtils.isNotNull(status) && "1".equals(status)) {
 			String firstProportion = sysClient.getParamService("first.month.proportion");
 			String secondProportion = sysClient.getParamService("second.month.proportion");
@@ -945,6 +950,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			calendarDate.setTime(date);
 			calendarDate.add(Calendar.DAY_OF_MONTH, -90);
 			Date dateTime = calendarDate.getTime();
+			//获取融资采购单主表数据
 			List<PjOrder> orderList = orderMapper.selectList(new LambdaQueryWrapper<PjOrder>()
 				.eq(PjOrder::getTenantId, AuthUtil.getTenantId())
 				.eq(PjOrder::getIsDeleted, 0)
@@ -957,6 +963,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			List<Long> ordIds = orderList.stream().map(PjOrder::getId).collect(Collectors.toList());
 			List<Long> goodsList = shipItemsList.stream().filter(e -> ObjectUtils.isNotNull(financingBrand) && financingBrand.contains(e.getBrandName()))
 				.map(PjShipItems::getGoodsId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+			//获取融资采购单明细数据
 			List<PjOrderItems> orderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
 				.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
 				.eq(PjOrderItems::getIsDeleted, 0)
@@ -986,13 +993,17 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			List<FinancingShipItemDto> allList = new ArrayList<>();
 			List<ShipItemsRecord> recordList = new ArrayList<>();
 			List<PjOrderItems> orderItemList1 = new ArrayList<>();
+			//出库明细循环
 			for (PjShipItems shipItems : shipItemsList) {
 				if (ObjectUtils.isNotNull(financingBrand) && financingBrand.contains(shipItems.getBrandName())) {
 					BigDecimal number = shipItems.getSendNum();
+					//获取出库明细商品对应融资采购商品明细
 					List<PjOrderItems> orderItemList = orderItemsList.stream().filter(e -> e.getGoodsId().equals(shipItems.getGoodsId())).collect(Collectors.toList());
 					List<FinancingShipItemDto> mapList = new ArrayList<>();
+					//采购商品明细循环
 					for (PjOrderItems orderItems1 : orderItemList) {
 						if (number.compareTo(new BigDecimal("0.00")) > 0) {
+							//记录出库明细对应融资采购单据
 							ShipItemsRecord shipItemsRecord = new ShipItemsRecord();
 							shipItemsRecord.setBillNo(ship.getBillno());
 							shipItemsRecord.setPid(shipItems.getPid());
@@ -1003,16 +1014,20 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 							shipItemsRecord.setCreateUser(AuthUtil.getUserId());
 							shipItemsRecord.setCreateUserName(AuthUtil.getUserName());
 							shipItemsRecord.setCreateTime(new Date());
+							//记录具体出库数量,来源融资采购明细
 							FinancingShipItemDto financingShipItemDto = new FinancingShipItemDto();
 							financingShipItemDto.setId(orderItems1.getId());
 							financingShipItemDto.setPid(orderItems1.getPid());
 							financingShipItemDto.setItemId(shipItems.getId());
 							BigDecimal subNum = orderItems1.getSendNum().subtract(orderItems1.getOutGoodsTotalShipNum());
+							//剩余数量 = 入库数量-已出数量
+							//修改明细出库数量
 							if (number.compareTo(subNum) > 0) {
 								financingShipItemDto.setNum(subNum);
 								financingShipItemDto.setAmount(subNum.multiply(orderItems1.getPrice()));
 								shipItemsRecord.setNum(subNum);
 								shipItemsRecord.setAmount(subNum.multiply(orderItems1.getPrice()));
+								//本次出库数量大于剩余数量  融资采购明细出库数量=入库数量
 								orderItems1.setOutGoodsTotalShipNum(orderItems1.getSendNum());
 								orderItems1.setOutGoodsTotalShipAmount(orderItems1.getOutGoodsTotalShipNum().multiply(orderItems1.getPrice()));
 								number = number.subtract(subNum);
@@ -1021,6 +1036,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 								financingShipItemDto.setAmount(subNum.multiply(orderItems1.getPrice()));
 								shipItemsRecord.setNum(subNum);
 								shipItemsRecord.setAmount(subNum.multiply(orderItems1.getPrice()));
+								//本次出库数量等于剩余数量  融资采购明细出库数量=入库数量
 								orderItems1.setOutGoodsTotalShipNum(orderItems1.getSendNum());
 								orderItems1.setOutGoodsTotalShipAmount(orderItems1.getOutGoodsTotalShipNum().multiply(orderItems1.getPrice()));
 								number = new BigDecimal("0.00");
@@ -1029,6 +1045,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 								financingShipItemDto.setAmount(number.multiply(orderItems1.getPrice()));
 								shipItemsRecord.setNum(number);
 								shipItemsRecord.setAmount(number.multiply(orderItems1.getPrice()));
+								//本次出库数量小于剩余数量  融资采购明细出库数量=入库数量-本次出库数量
 								orderItems1.setOutGoodsTotalShipNum(orderItems1.getOutGoodsTotalShipNum().add(number));
 								orderItems1.setOutGoodsTotalShipAmount(orderItems1.getOutGoodsTotalShipNum().multiply(orderItems1.getPrice()));
 								number = new BigDecimal("0.00");
@@ -1044,7 +1061,8 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 							String jsonString = mapper.writeValueAsString(mapList);
 							shipItems.setSrcFinancing(jsonString);
 						} catch (Exception e) {
-							e.printStackTrace();
+							System.err.println(e.getMessage());
+							throw new RuntimeException(e);
 						}
 						allList.addAll(mapList);
 					}
@@ -1055,26 +1073,33 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			}
 			orderItemsService.updateBatchById(orderItemList1);
 			if (!orderItemList1.isEmpty()) {
+				//所有融资采购剩余金额的保证金
 				BigDecimal bondAmountSum = new BigDecimal("0.00");
+				//所有融资采购剩余金额的融资金额
 				BigDecimal fundingAmountSum = new BigDecimal("0.00");
+				//保证金释放金额
 				BigDecimal availableAmountSum = new BigDecimal("0.00");
 				for (PjOrder items : orderList) {
 					List<PjOrderItems> pjOrderItems = orderItemList1.stream().filter(e -> items.getId().equals(e.getPid()))
 						.collect(Collectors.toList());
+					//重新合计融资采购已出数量,金额
 					if (!pjOrderItems.isEmpty()) {
 						items.setOutGoodsTotalShipNum(items.getOutGoodsTotalShipNum().add(pjOrderItems.stream().map(PjOrderItems::getOutGoodsTotalShipNum)
 							.reduce(BigDecimal.ZERO, BigDecimal::add)));
 						items.setOutGoodsTotalShipAmount(items.getOutGoodsTotalShipAmount().add(pjOrderItems.stream().map(PjOrderItems::getOutGoodsTotalShipAmount)
 							.reduce(BigDecimal.ZERO, BigDecimal::add)));
 					}
+					//重新计算所有未赎回融资采购,保证金,融资金额
 					if (!"1".equals(items.getWhetherRedeem())) {
 						Date currentDate = new Date();
 						Calendar calendar = Calendar.getInstance();
 						calendar.setTime(currentDate);
 						calendar.add(Calendar.DAY_OF_MONTH, -60);
 						Date thirtyDayAgo = calendar.getTime();
+						//计算本融资采购剩余金额
 						BigDecimal subAmount = items.getGoodsTotalShipAmount().subtract(items.getOutGoodsTotalShipAmount());
 						List<Long> itemIdList = allList.stream().filter(e -> e.getPid().equals(items.getId())).map(FinancingShipItemDto::getItemId).collect(Collectors.toList());
+						//判断本融资采购单据是否超过两个月 未超过按第一个比例计算,否则按第二个比例计算
 						if (currentDate.compareTo(thirtyDayAgo) > 0) {
 							if (!shipItemsList.isEmpty()) {
 								for (PjShipItems shipItems1 : shipItemsList) {
@@ -1086,18 +1111,23 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 								}
 							}
 							String[] arr = firstProportion.split(":");
+							//计算剩余金额的保证金
 							BigDecimal bondAmount = subAmount.multiply(
 								(new BigDecimal(arr[0]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
 									.setScale(2, RoundingMode.HALF_UP)));
+							//计算剩余金额的融资金额
 							BigDecimal fundingAmount = subAmount.multiply(
 								(new BigDecimal(arr[1]).divide(new BigDecimal("10"), MathContext.DECIMAL32)
 									.setScale(2, RoundingMode.HALF_UP)));
+							//判断本次出库后保证金是否小于等于上次保证金
 							if (bondAmount.compareTo(items.getBondAmount()) <= 0) {
+								//本次出库后释放金额
 								BigDecimal availableAmount = items.getBondAmount().subtract(bondAmount);
 								items.setBondAmount(bondAmount);
 								bondAmountSum = bondAmountSum.add(bondAmount);
 								availableAmountSum = availableAmountSum.add(availableAmount);
 							}
+							//判断本次出库后融资金额是否小于等于上次融资金额
 							if (fundingAmount.compareTo(items.getFundingAmount()) <= 0) {
 								items.setFundingAmount(fundingAmount);
 								fundingAmountSum = fundingAmountSum.add(fundingAmount);
@@ -1131,15 +1161,19 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					}
 					orderMapper.updateById(items);
 				}
+				//可用金额 = 原可用金额 + 本次释放金额
 				pjpfFunding.setAvailableAmount(pjpfFunding.getAvailableAmount().add(availableAmountSum));
 				pjpfFunding.setSurplusFundingAmount(fundingAmountSum);
 				pjpfFunding.setPaidAlreadyBondAmount(bondAmountSum);
 				pjpfFunding.setBondAmount(bondAmountSum);
+				//总金额 = 保证金 + 在库融资金额
 				pjpfFunding.setAmount(pjpfFunding.getSurplusFundingAmount().add(pjpfFunding.getBondAmount()));
+				//融资金额 = 原融资金额 + (本次出库金额-本次释放金额)
 				pjpfFunding.setFundingAmount(pjpfFunding.getFundingAmount().add(amountSum.subtract(availableAmountSum)));
 				pjpfFunding.setProportion(pjpfFunding.getBondAmount().divide(pjpfFunding.getAmount(), MathContext.DECIMAL32)
 					.setScale(2, RoundingMode.HALF_UP));
 				pjpfFundingService.updateById(pjpfFunding);
+				//融资管理明细记录
 				PjpfFundingItem item = new PjpfFundingItem();
 				item.setPid(pjpfFunding.getId());
 				item.setTenantId(AuthUtil.getTenantId());
@@ -2795,6 +2829,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 							shipItems.setSrcFinancing(jsonString);
 						} catch (Exception e) {
 							e.printStackTrace();
+							throw new RuntimeException(e);
 						}
 						allList.addAll(mapList);
 					}
@@ -3808,6 +3843,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 						shipItems.setSrcFinancing(jsonString);
 					} catch (Exception e) {
 						e.printStackTrace();
+						throw new RuntimeException(e);
 					}
 					allList.addAll(mapList);
 				}
@@ -5105,6 +5141,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 						}
 					} catch (IOException e) {
 						e.printStackTrace();
+						throw new RuntimeException(e);
 					}
 				} else {
 					throw new RuntimeException("access_token获取失败");
@@ -5114,8 +5151,8 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			}
 		} catch (IOException e) {
 			e.printStackTrace();
+			throw new RuntimeException(e);
 		}
-		return R.data("操作成功");
 	}
 
 }