Browse Source

新系统 诺晶bug 2023年5月22日17:54:12

纪新园 2 years ago
parent
commit
69d613c358
25 changed files with 1236 additions and 455 deletions
  1. 3 0
      blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java
  2. 1 1
      blade-common/src/main/java/org/springblade/common/config/MD5Util.java
  3. 28 0
      blade-common/src/main/java/org/springblade/common/dto/DefaultTrustManager.java
  4. 19 0
      blade-common/src/main/java/org/springblade/common/dto/token2DTO.java
  5. 42 0
      blade-common/src/main/java/org/springblade/common/dto/token2Data.java
  6. 17 0
      blade-common/src/main/java/org/springblade/common/dto/tokenDTO.java
  7. 19 0
      blade-common/src/main/java/org/springblade/common/dto/tokenData.java
  8. 6 0
      blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java
  9. 18 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/BidingItems.java
  10. 2 2
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/service/impl/AnnualBudgetItemServiceImpl.java
  11. 111 110
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  12. 21 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java
  13. 2 0
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/IDeliveryService.java
  14. 245 170
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java
  15. 439 82
      blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java
  16. 1 1
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java
  17. 31 6
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java
  18. 2 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/BidingItemsMapper.xml
  19. 85 57
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/BidingItemsServiceImpl.java
  20. 10 10
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  21. 10 1
      blade-service/blade-stock/src/main/java/org/springblade/stock/feign/StockGoodsClient.java
  22. 15 1
      blade-service/trade-finance/src/main/java/org/springblade/finance/controller/AccController.java
  23. 92 8
      blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java
  24. 6 5
      blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/service/impl/ClaimServiceImpl.java
  25. 11 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/service/impl/LeadsServiceImpl.java

+ 3 - 0
blade-auth/src/main/java/org/springblade/auth/service/BladeUserDetailsServiceImpl.java

@@ -102,6 +102,9 @@ public class BladeUserDetailsServiceImpl implements UserDetailsService {
 				}
 				user = userClient.loginByAccount(null, username, "4", tenant.getData().getTenantId());
 				if (ObjectUtils.isNull(user)) {
+					if ("wx0a0feca24b695636".equals(appletsId)){
+						throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+					}
 					/*User user1 = userClient.loginByAccount(null, username, null, tenant.getData().getTenantId());
 					if (ObjectUtils.isNotNull(user1.getUserType()) && 4 != user1.getUserType()) {
 						throw new UsernameNotFoundException(TokenUtil.USER_NOT_FORBIDDEN);

+ 1 - 1
blade-service/trade-purchase/src/main/java/com/trade/purchase/config/MD5Util.java → blade-common/src/main/java/org/springblade/common/config/MD5Util.java

@@ -1,4 +1,4 @@
-package com.trade.purchase.config;
+package org.springblade.common.config;
 
 import org.apache.commons.codec.binary.Base64;
 

+ 28 - 0
blade-common/src/main/java/org/springblade/common/dto/DefaultTrustManager.java

@@ -0,0 +1,28 @@
+package org.springblade.common.dto;
+
+import lombok.Data;
+
+import javax.net.ssl.X509TrustManager;
+import java.security.cert.X509Certificate;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/5/19
+ */
+@Data
+public class DefaultTrustManager implements X509TrustManager {
+
+	@Override
+	public X509Certificate[] getAcceptedIssuers() {
+		return null;
+	}
+
+	@Override
+	public void checkClientTrusted(X509Certificate[] cert, String oauthType) {
+	}
+
+	@Override
+	public void checkServerTrusted(X509Certificate[] cert, String oauthType) {
+	}
+
+}

+ 19 - 0
blade-common/src/main/java/org/springblade/common/dto/token2DTO.java

@@ -0,0 +1,19 @@
+package org.springblade.common.dto;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/5/19
+ */
+@Data
+public class token2DTO {
+
+	private Long code;
+
+	private String msg;
+
+	private List<token2Data> data;
+}

+ 42 - 0
blade-common/src/main/java/org/springblade/common/dto/token2Data.java

@@ -0,0 +1,42 @@
+package org.springblade.common.dto;
+
+import lombok.Data;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/5/19
+ */
+@Data
+public class token2Data {
+
+	private String id;
+	private String appKey;
+	private String appSecret;
+	private String oldAppSecret;
+	private String status;
+	private String accessToken;
+	private String appToken;
+	private String expires;
+	private String userNumber;
+	private String serviceId;
+	private String clientId;
+	private String externalNumber;
+	private String outerInstanceId;
+	private String agreementCompanyName;
+	private String agreementAuthProductType;
+	private String agreementAdministratorName;
+	private String agreementAdministratorAccountNumber;
+	private String tenantId;
+	private String accountId;
+	private String uid;
+	private String tid;
+	private String createTime;
+	private String openTime;
+	private String secretUpdateTime;
+	private String isBrand;
+	private String brandSupplierId;
+	private String groupName;
+	private String accountName;
+	private String domain;
+
+}

+ 17 - 0
blade-common/src/main/java/org/springblade/common/dto/tokenDTO.java

@@ -0,0 +1,17 @@
+package org.springblade.common.dto;
+
+import lombok.Data;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/5/19
+ */
+@Data
+public class tokenDTO {
+
+	private Long errcode;
+
+	private String description;
+
+	private tokenData data;
+}

+ 19 - 0
blade-common/src/main/java/org/springblade/common/dto/tokenData.java

@@ -0,0 +1,19 @@
+package org.springblade.common.dto;
+
+import lombok.Data;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/5/19
+ */
+@Data
+public class tokenData {
+
+	private String access_token;
+	private String avatar;
+	private String expires;
+	private String expires_in;
+	private String gender;
+	private String nickname;
+	private String uid;
+}

+ 6 - 0
blade-service-api/blade-deliver-goods-api/src/main/java/org/springblade/deliver/goods/entity/Delivery.java

@@ -695,4 +695,10 @@ public class Delivery implements Serializable {
 	@ApiModelProperty(value = "三方检验(福达)")
 	private String tripartiteInspection;
 
+	/**
+	 * 是否生成凭证
+	 */
+	@TableField(exist = false)
+	private String generate;
+
 }

+ 18 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/BidingItems.java

@@ -216,4 +216,22 @@ public class BidingItems implements Serializable {
 	@DateTimeFormat(pattern = "yyyy-MM-dd")
 	private Date shippingDate;
 
+	/**
+	 * 排名
+	 */
+	@ApiModelProperty(value = "排名")
+	private int ranking;
+
+	/**
+	 * 单据类型
+	 */
+	@ApiModelProperty(value = "单据类型")
+	private String documentType;
+
+	/**
+	 * 亏舱费用
+	 */
+	@ApiModelProperty(value = "亏舱费用")
+	private BigDecimal brokenStowageAmount;
+
 }

+ 2 - 2
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/annualBudget/service/impl/AnnualBudgetItemServiceImpl.java

@@ -113,13 +113,13 @@ public class AnnualBudgetItemServiceImpl extends ServiceImpl<AnnualBudgetItemMap
 				}
 				//订单完成率
 				if (e.getQuantitySummary().compareTo(BigDecimal.ZERO) > 0) {
-					e.setOrderCompletionRate(e.getOrderSummary().divide(e.getQuantitySummary(), 2, BigDecimal.ROUND_HALF_UP));
+					e.setOrderCompletionRate(e.getOrderSummary().divide(e.getQuantitySummary(), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)));
 				} else {
 					e.setOrderCompletionRate(BigDecimal.ZERO);
 				}
 				//发货完成率
 				if (e.getQuantitySummary().compareTo(BigDecimal.ZERO) > 0) {
-					e.setDeliveryCompletionRate(e.getOrderSummary().divide(e.getQuantitySummary(), 2, BigDecimal.ROUND_HALF_UP));
+					e.setDeliveryCompletionRate(e.getOrderSummary().divide(e.getQuantitySummary(), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)));
 				} else {
 					e.setDeliveryCompletionRate(BigDecimal.ZERO);
 				}

+ 111 - 110
blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java

@@ -462,81 +462,85 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("发送消息失败");
 				}
 
-				if (!"681169".equals(AuthUtil.getTenantId())){
-					Settlement settlement = new Settlement();
-					settlement.setId(auditProecess.getSrcBillId());
-					R settlementR = financeClient.details(auditProecess.getSrcBillId());
-					if (settlementR.isSuccess()) {
-						ObjectMapper objectMapper = new ObjectMapper();
-						Settlement settlement1 = objectMapper.convertValue(settlementR.getData(), Settlement.class);
-						SettlementDTO settlementDTO = new SettlementDTO();
-						settlementDTO.setId(settlement1.getId());
-						settlementDTO.setItemsList(settlement1.getItemsList());
-						settlementDTO.setSrcOrderno(settlement1.getSrcOrderno());
-						settlementDTO.setAmount(settlement1.getAmount());
-						settlementDTO.setBillType("付费");
-						settlementDTO.setCaseOverPayment(settlement1.getCaseOverPayment());
-						settlementDTO.setCheckStatus(settlement1.getCheckStatus());
-						settlementDTO.setCorpId(settlement1.getCorpId());
-						settlementDTO.setCreateTime(settlement1.getCreateTime());
-						settlementDTO.setCreateUser(settlement1.getCreateUser());
-						settlementDTO.setCreateUserName(settlement1.getCreateUserName());
-						settlementDTO.setCustomerModel(settlement1.getCustomerModel());
-						settlementDTO.setDc(settlement1.getDc());
-
-						settlementDTO.setFinanceStatus(settlement1.getFinanceStatus());
-
-						settlementDTO.setPageLabel(settlement1.getPageLabel());
-						settlementDTO.setOverPayment(settlement1.getOverPayment());
-						settlementDTO.setPageStatus(settlement1.getPageStatus());
-						settlementDTO.setSettlementType(settlement1.getSettlementType());
-						settlementDTO.setSrcBillId(settlement1.getSrcBillId());
-						settlementDTO.setSysNo(settlement1.getSysNo());
-						settlementDTO.setTenantId(settlement1.getTenantId());
-						settlementDTO.setUrl(settlement1.getUrl());
-						R saveR = financeClient.saveOrEdit(settlementDTO);
-						if (saveR.isSuccess()) {
-
-							R roleId = sysClient.getRoleIds(AuthUtil.getTenantId(), "财务出纳");
-							if (roleId.isSuccess() && ObjectUtils.isNotNull(roleId.getData())) {
-								R<List<User>> userList = iUserSearchClient.listByRole(roleId.getData().toString());
-								if (userList.isSuccess() && ObjectUtils.isNotNull(userList.getData())) {
-									for (User user : userList.getData()) {
-										//信息
-										Message message = new Message();
-										message.setParameter(String.valueOf(auditProecess.getBillId()));
-										message.setUserName(AuthUtil.getUserName());
-										message.setUserId(AuthUtil.getUserId());
-										message.setToUserId(user.getId());
-										message.setToUserName(user.getName());
-										message.setMessageType(1);
-										message.setTenantId(AuthUtil.getTenantId());
-										message.setCreateUser(AuthUtil.getUserId());
-										message.setCreateTime(new Date());
-										message.setUrl(auditProecess.getUrl());
-										message.setPageLabel(auditProecess.getPageLabel());
-										message.setPageStatus(auditProecess.getPageStatus());
-										message.setMessageBody("付费请核已通过" + ",采购订单号:" + proecessTemp.getBillNo() + ",请继续操作");
-										R messageR = messageClient.save(message);
-										if (!messageR.isSuccess()) {
-											throw new SecurityException("发送消息失败");
+				if (!"681169".equals(AuthUtil.getTenantId())) {
+					if (!ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+						&& !"1".equals(sysClient.getParamService("synchronous"))) {
+						Settlement settlement = new Settlement();
+						settlement.setId(auditProecess.getSrcBillId());
+						R settlementR = financeClient.details(auditProecess.getSrcBillId());
+						if (settlementR.isSuccess()) {
+							ObjectMapper objectMapper = new ObjectMapper();
+							Settlement settlement1 = objectMapper.convertValue(settlementR.getData(), Settlement.class);
+							SettlementDTO settlementDTO = new SettlementDTO();
+							settlementDTO.setId(settlement1.getId());
+							settlementDTO.setItemsList(settlement1.getItemsList());
+							settlementDTO.setSrcOrderno(settlement1.getSrcOrderno());
+							settlementDTO.setAmount(settlement1.getAmount());
+							settlementDTO.setBillType("付费");
+							settlementDTO.setCaseOverPayment(settlement1.getCaseOverPayment());
+							settlementDTO.setCheckStatus(settlement1.getCheckStatus());
+							settlementDTO.setCorpId(settlement1.getCorpId());
+							settlementDTO.setCreateTime(settlement1.getCreateTime());
+							settlementDTO.setCreateUser(settlement1.getCreateUser());
+							settlementDTO.setCreateUserName(settlement1.getCreateUserName());
+							settlementDTO.setCustomerModel(settlement1.getCustomerModel());
+							settlementDTO.setDc(settlement1.getDc());
+
+							settlementDTO.setFinanceStatus(settlement1.getFinanceStatus());
+
+							settlementDTO.setPageLabel(settlement1.getPageLabel());
+							settlementDTO.setOverPayment(settlement1.getOverPayment());
+							settlementDTO.setPageStatus(settlement1.getPageStatus());
+							settlementDTO.setSettlementType(settlement1.getSettlementType());
+							settlementDTO.setSrcBillId(settlement1.getSrcBillId());
+							settlementDTO.setSysNo(settlement1.getSysNo());
+							settlementDTO.setTenantId(settlement1.getTenantId());
+							settlementDTO.setUrl(settlement1.getUrl());
+							R saveR = financeClient.saveOrEdit(settlementDTO);
+							if (saveR.isSuccess()) {
+
+								R roleId = sysClient.getRoleIds(AuthUtil.getTenantId(), "财务出纳");
+								if (roleId.isSuccess() && ObjectUtils.isNotNull(roleId.getData())) {
+									R<List<User>> userList = iUserSearchClient.listByRole(roleId.getData().toString());
+									if (userList.isSuccess() && ObjectUtils.isNotNull(userList.getData())) {
+										for (User user : userList.getData()) {
+											//信息
+											Message message = new Message();
+											message.setParameter(String.valueOf(auditProecess.getBillId()));
+											message.setUserName(AuthUtil.getUserName());
+											message.setUserId(AuthUtil.getUserId());
+											message.setToUserId(user.getId());
+											message.setToUserName(user.getName());
+											message.setMessageType(1);
+											message.setTenantId(AuthUtil.getTenantId());
+											message.setCreateUser(AuthUtil.getUserId());
+											message.setCreateTime(new Date());
+											message.setUrl(auditProecess.getUrl());
+											message.setPageLabel(auditProecess.getPageLabel());
+											message.setPageStatus(auditProecess.getPageStatus());
+											message.setMessageBody("付费请核已通过" + ",采购订单号:" + proecessTemp.getBillNo() + ",请继续操作");
+											R messageR = messageClient.save(message);
+											if (!messageR.isSuccess()) {
+												throw new SecurityException("发送消息失败");
+											}
 										}
+									} else {
+										throw new SecurityException("发送消息失败102");
 									}
-								}else {
-									throw new SecurityException("发送消息失败102");
+
+								} else {
+									throw new SecurityException("发送消息失败101");
 								}
 
 							} else {
-								throw new SecurityException("发送消息失败101");
+								throw new SecurityException("生成账单保存失败");
 							}
-
 						} else {
-							throw new SecurityException("生成账单保存失败");
+							throw new SecurityException("生成账单失败");
 						}
-					} else {
-						throw new SecurityException("生成账单失败");
 					}
 				}
+
 			}
 			//不通过
 			else if (operate == 2) {
@@ -975,7 +979,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
-	public void  chargeBackCheck(AuditProecess auditProecess) {
+	public void chargeBackCheck(AuditProecess auditProecess) {
 		//查看最新操作记录,防止重复提交
 		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
 		if (proecessTemp == null) {
@@ -1156,9 +1160,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				this.agencyOrderProcess(e);
 			} else if ("ocg".equals(e.getCheckType()) || "oly".equals(e.getCheckType())) {
 				this.officeCheck(e);
-			} else if ("bsdd".equals(e.getCheckType())){
+			} else if ("bsdd".equals(e.getCheckType())) {
 				this.bidingCheck(e);
-			}else {
+			} else {
 				this.commonCheck(e);
 			}
 		});
@@ -1777,20 +1781,20 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			if (operate == 1) {
 				auditProecess.setAuditStatus("A");
 				//if (auditProecess.getLevelId() == 1) {
-					R submit;
-					if ("fybx".equals(proecessTemp.getCheckType())) {
-						submit = claimClient.passCheck(auditProecess.getSrcBillId());
-						sendMessage.setMessageBody("您的费用报销请核已通过,请继续操作");
-					} else if ("jjd".equals(proecessTemp.getCheckType())) {
-						submit = handoverClient.passCheck(auditProecess.getSrcBillId());
-						sendMessage.setMessageBody("您的交接单请核已通过,请继续操作");
-					} else {
-						throw new SecurityException("此审批类型未查到相关审批类型");
-					}
+				R submit;
+				if ("fybx".equals(proecessTemp.getCheckType())) {
+					submit = claimClient.passCheck(auditProecess.getSrcBillId());
+					sendMessage.setMessageBody("您的费用报销请核已通过,请继续操作");
+				} else if ("jjd".equals(proecessTemp.getCheckType())) {
+					submit = handoverClient.passCheck(auditProecess.getSrcBillId());
+					sendMessage.setMessageBody("您的交接单请核已通过,请继续操作");
+				} else {
+					throw new SecurityException("此审批类型未查到相关审批类型");
+				}
 
-					if (!submit.isSuccess()) {
-						throw new SecurityException(submit.getMsg());
-					}
+				if (!submit.isSuccess()) {
+					throw new SecurityException(submit.getMsg());
+				}
 				//}
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
@@ -2218,10 +2222,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		DeclareCustoms declareCustoms = declareCustomsClient.getById(proecessTemp.getBillId());
 		String typeName = "";
 
-		if (ObjectUtil.isNotEmpty(declareCustoms)){
-			if ("BGJK".equals(declareCustoms.getImportExportSigns())){
+		if (ObjectUtil.isNotEmpty(declareCustoms)) {
+			if ("BGJK".equals(declareCustoms.getImportExportSigns())) {
 				typeName = "进口";
-			}else if ("BGCK".equals(declareCustoms.getImportExportSigns())){
+			} else if ("BGCK".equals(declareCustoms.getImportExportSigns())) {
 				typeName = "出口";
 			}
 		}
@@ -2279,7 +2283,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				message.setMessageType(1);
 				message.setTenantId(AuthUtil.getTenantId());
 				//报关模板
-				message.setMessageBody("您有"+typeName+"订单审核,订单单号:" + "" + proecessTemp.getBillNo() + ","
+				message.setMessageBody("您有" + typeName + "订单审核,订单单号:" + "" + proecessTemp.getBillNo() + ","
 					+ "订单日期:" + orderDate + ",请审核。"
 					+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 				);
@@ -2300,7 +2304,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改订单数据失败");
 				}
 
-				sendMessage.setMessageBody("您的"+typeName+"订单审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				sendMessage.setMessageBody("您的" + typeName + "订单审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -2319,7 +2323,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改订单数据失败");
 				}
 
-				sendMessage.setMessageBody("您的"+typeName+"订单审核已通过" + ",订单号:" + proecessTemp.getBillNo() + ",请继续操作");
+				sendMessage.setMessageBody("您的" + typeName + "订单审核已通过" + ",订单号:" + proecessTemp.getBillNo() + ",请继续操作");
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -2333,7 +2337,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改订单数据失败");
 				}
-				sendMessage.setMessageBody("您的"+typeName+"订单审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				sendMessage.setMessageBody("您的" + typeName + "订单审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -2357,7 +2361,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
-	public void  agreementCheck(AuditProecess auditProecess) {
+	public void agreementCheck(AuditProecess auditProecess) {
 		//查看最新操作记录,防止重复提交
 		AuditProecess proecessTemp = baseMapper.selectById(auditProecess.getId());
 		if (proecessTemp == null) {
@@ -2839,8 +2843,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 		auditProecess.setAuditItem(new Date());
 		baseMapper.updateById(auditProecess);
 	}
+
 	/**
 	 * 嘉通入出库审批
+	 *
 	 * @param auditProecess
 	 */
 	@Override
@@ -2887,7 +2893,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			if (operate == 1) {
 				//如果是第一级, 则修改状态为审批中
 				if (auditProecess.getLevelId() == 1) {
-					R submit = iorderDescClient.underReview(auditProecess.getSrcBillId(),auditProecess.getTimes());
+					R submit = iorderDescClient.underReview(auditProecess.getSrcBillId(), auditProecess.getTimes());
 					if (!submit.isSuccess()) {
 						throw new SecurityException("审批开始修改审核状态失败");
 					}
@@ -2962,7 +2968,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			else if (operate == 2) {
 				auditProecess.setAuditStatus("B");
 				//todo 调用feign取消
-				R r = iorderDescClient.passCancel(auditProecess.getSrcBillId(),auditProecess.getTimes());
+				R r = iorderDescClient.passCancel(auditProecess.getSrcBillId(), auditProecess.getTimes());
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改审核状态失败");
 				}
@@ -2986,7 +2992,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			if (operate == 1) {
 				//todo 调用feign直接通过
 				auditProecess.setAuditStatus("A");
-				R r = iorderDescClient.passCheck(auditProecess.getSrcBillId(),auditProecess.getTimes());
+				R r = iorderDescClient.passCheck(auditProecess.getSrcBillId(), auditProecess.getTimes());
 				if (!r.isSuccess()) {
 					throw new SecurityException(r.getMsg());
 				}
@@ -3006,7 +3012,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 			else if (operate == 2) {
 				//todo 调用feign取消
 				auditProecess.setAuditStatus("B");
-				R r = iorderDescClient.passCancel(auditProecess.getSrcBillId(),auditProecess.getTimes());
+				R r = iorderDescClient.passCancel(auditProecess.getSrcBillId(), auditProecess.getTimes());
 
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改审核状态失败");
@@ -3036,6 +3042,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 
 	/**
 	 * 采木云融资审批
+	 *
 	 * @param auditProecess
 	 */
 	@Override
@@ -4117,10 +4124,10 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				R<Map<String, String>> sumbit = orderDescClient.passCheckTH(auditProecess.getSrcBillId());
 				if (!sumbit.isSuccess()) {
 					throw new SecurityException(sumbit.getMsg());
-				}else{
-					if ("3008".equals(sumbit.getData().get("trxstatus"))){
+				} else {
+					if ("3008".equals(sumbit.getData().get("trxstatus"))) {
 						throw new RuntimeException("账户余额不足,退款失败");
-					}else if ("3999".equals(sumbit.getData().get("trxstatus"))){
+					} else if ("3999".equals(sumbit.getData().get("trxstatus"))) {
 						throw new RuntimeException("金额错误,当前可退货金额为:0.00");
 					}
 				}
@@ -4480,14 +4487,12 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 						"" + proecessTemp.getBillNo() + "," + "订单日期:" + transportDate + ",请审核。"
 						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-				}
-				else if ("海运进口单据审批".equals(proecessTemp.getProcessType())) {
+				} else if ("海运进口单据审批".equals(proecessTemp.getProcessType())) {
 					message.setMessageBody("您有海运进口单据审批,客户名:" + corpName + "," + "业务单号:" +
 						"" + proecessTemp.getBillNo() + "," + "订单日期:" + transportDate + ",请审核。"
 						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 					);
-				}
-				else if ("海运进口费用审批".equals(proecessTemp.getProcessType())) {
+				} else if ("海运进口费用审批".equals(proecessTemp.getProcessType())) {
 					message.setMessageBody("您有海运进口费用审批,客户名:" + corpName + "," + "业务单号:" +
 						"" + proecessTemp.getBillNo() + "," + "订单日期:" + transportDate + ",请审核。"
 						+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
@@ -4514,11 +4519,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					sendMessage.setMessageBody("您的海运出口单据审批未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else if ("海运出口费用审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的海运出口费用审批未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				}
-				else if ("海运进口单据审批".equals(proecessTemp.getProcessType())) {
+				} else if ("海运进口单据审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的海运进口单据审批未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				}
-				else if ("海运进口费用审批".equals(proecessTemp.getProcessType())) {
+				} else if ("海运进口费用审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的海运进口费用审批未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 
@@ -4544,9 +4547,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					sendMessage.setMessageBody("您的海运出口单据审批已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
 				} else if ("海运出口费用审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的海运出口费用审批已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
-				}else if ("海运进口单据审批".equals(proecessTemp.getProcessType())) {
+				} else if ("海运进口单据审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的海运进口单据审批已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
-				}else if ("海运进口费用审批".equals(proecessTemp.getProcessType())) {
+				} else if ("海运进口费用审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的海运进口费用审批已通过" + ",业务单号:" + proecessTemp.getBillNo() + ",请继续操作");
 				}
 
@@ -4568,11 +4571,9 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					sendMessage.setMessageBody("您的海运出口单据审批未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				} else if ("海运出口费用审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的海运出口费用审批未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				}
-				else if ("海运进口单据审批".equals(proecessTemp.getProcessType())) {
+				} else if ("海运进口单据审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的海运进口单据审批未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
-				}
-				else if ("海运进口费用审批".equals(proecessTemp.getProcessType())) {
+				} else if ("海运进口费用审批".equals(proecessTemp.getProcessType())) {
 					sendMessage.setMessageBody("您的海运进口费用审批未通过" + ",业务单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				}
 

+ 21 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/controller/DeliveryController.java

@@ -19,6 +19,7 @@ package org.springblade.deliver.goods.controller;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.trade.purchase.order.enums.OrderTypeEnum;
@@ -108,6 +109,15 @@ public class DeliveryController extends BladeController {
 		lambdaQueryWrapper.eq(Delivery::getTenantId,SecureUtil.getTenantId());
 		lambdaQueryWrapper.eq(Delivery::getBillType,OrderTypeEnum.SHIP.getType());
 		lambdaQueryWrapper.eq(Delivery::getTradeType,OrderTypeEnum.DOMESTIC.getType());
+		if (ObjectUtils.isNotNull(delivery.getGenerate())){
+			if ("1".equals(delivery.getGenerate())){
+				lambdaQueryWrapper.isNotNull(Delivery::getVoucherNo);
+			}else{
+				lambdaQueryWrapper.isNull(Delivery::getVoucherNo);
+			}
+		}else{
+			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(delivery.getVoucherNo()),Delivery::getVoucherNo,delivery.getVoucherNo());
+		}
 		lambdaQueryWrapper.eq(delivery.getSalesCompany()!=null,Delivery::getSalesCompany,delivery.getSalesCompany());
 		lambdaQueryWrapper.like(StringUtils.isNotBlank(delivery.getPurchaseMode()),Delivery::getPurchaseMode,delivery.getPurchaseMode());
 		lambdaQueryWrapper.ge(Func.isNotEmpty(delivery.getCreateStartTime()),Delivery::getCreateTime,delivery.getCreateStartTime());//制单日期开始
@@ -338,6 +348,17 @@ public class DeliveryController extends BladeController {
 		delivery.setOverpayment(DeliveryStatusEnum.REDUCE.getType());
 		return deliveryService.revocation(delivery);
 	}
+
+	/**
+	 * 国内贸易批量生成凭证
+	 */
+	@GetMapping("/takeDeliveryBatch")
+	@ApiOperationSupport(order = 4)
+	@RepeatSubmit
+	public R takeDeliveryBatch(@RequestParam("ids") String ids) {
+		return deliveryService.takeDeliveryBatch(ids);
+	}
+
 	/**
 	 * 国内贸易发货单撤销确认到货
 	 */

+ 2 - 0
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/IDeliveryService.java

@@ -94,4 +94,6 @@ public interface IDeliveryService extends IService<Delivery> {
 	R repealAllot(Delivery delivery);
 
     R documentaryStatusUpdate(Delivery delivery);
+
+	R takeDeliveryBatch(String ids);
 }

+ 245 - 170
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryItemsServiceImpl.java

@@ -53,6 +53,7 @@ import org.springblade.purchase.sales.feign.IOrderItemsClient;
 import org.springblade.stock.entity.StockGoods;
 import org.springblade.stock.feign.IStockGoodsClient;
 import org.springblade.stock.vo.StockGoodsVO;
+import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -60,6 +61,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.math.MathContext;
 import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Date;
@@ -89,6 +91,8 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	private final ICorpsDescClient corpsDescClient;
 	private final RedisTemplate<String, Object> redisTemplate;
 	private final IRedisClient redisClient;//redis缓存处理
+	private final ISysClient sysClient;//消息
+
 	@Override
 	public IPage<DeliveryItemsVO> selectDeliveryItemsPage(IPage<DeliveryItemsVO> page, DeliveryItemsVO deliveryItems) {
 		return page.setRecords(baseMapper.selectDeliveryItemsPage(page, deliveryItems));
@@ -96,46 +100,48 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 
 	/**
 	 * 保存发货信息
+	 *
 	 * @param pId
 	 * @param deliveryItemsList
 	 * @return
 	 */
-	public List<DeliveryItems> saveDeliveryItemsList(Long pId,List<DeliveryItems> deliveryItemsList){
-			for (DeliveryItems deliveryItems : deliveryItemsList) {
-				if (deliveryItems.getItemId() == null){
-					throw new RuntimeException("发货明细中商品id不能为空");
-				}
-				deliveryItems.setPid(pId);//父级ID
-				deliveryItems.setTenantId(SecureUtil.getTenantId());//租户id
-				if (deliveryItems.getId() == null){
-					deliveryItems.setCreateUser(SecureUtil.getUserId());
-					deliveryItems.setCreateTime(new Date());
-					baseMapper.insert(deliveryItems);
-				}else {
-					deliveryItems.setUpdateTime(new Date());
-					deliveryItems.setUpdateUser(SecureUtil.getUserId());
-					baseMapper.updateById(deliveryItems);
-				}
+	public List<DeliveryItems> saveDeliveryItemsList(Long pId, List<DeliveryItems> deliveryItemsList) {
+		for (DeliveryItems deliveryItems : deliveryItemsList) {
+			if (deliveryItems.getItemId() == null) {
+				throw new RuntimeException("发货明细中商品id不能为空");
+			}
+			deliveryItems.setPid(pId);//父级ID
+			deliveryItems.setTenantId(SecureUtil.getTenantId());//租户id
+			if (deliveryItems.getId() == null) {
+				deliveryItems.setCreateUser(SecureUtil.getUserId());
+				deliveryItems.setCreateTime(new Date());
+				baseMapper.insert(deliveryItems);
+			} else {
+				deliveryItems.setUpdateTime(new Date());
+				deliveryItems.setUpdateUser(SecureUtil.getUserId());
+				baseMapper.updateById(deliveryItems);
 			}
+		}
 		return deliveryItemsList;
 	}
 
 	/**
 	 * 获取发货明细
+	 *
 	 * @param delivery
 	 * @return
 	 */
-	public List<DeliveryItems> getDeliveryItems(Delivery delivery){
+	public List<DeliveryItems> getDeliveryItems(Delivery delivery) {
 		List<DeliveryItems> deliveryItemsList = baseMapper.selectList(new QueryWrapper<DeliveryItems>().eq("pid", delivery.getId())
 			.eq("tenant_id", SecureUtil.getTenantId()).eq("is_deleted", 0).orderByAsc("id"));
 
 		String updateUserIds = "";//修改人id拼接
 		String createUserIds = "";//创建人id拼接
-		for (DeliveryItems items : deliveryItemsList){
-			if (ObjectUtil.isNotEmpty(items.getUpdateUser())){
+		for (DeliveryItems items : deliveryItemsList) {
+			if (ObjectUtil.isNotEmpty(items.getUpdateUser())) {
 				updateUserIds = updateUserIds + items.getUpdateUser() + ",";
 			}
-			if (ObjectUtil.isNotEmpty(items.getCreateUser())){
+			if (ObjectUtil.isNotEmpty(items.getCreateUser())) {
 				createUserIds = createUserIds + items.getCreateUser() + ",";
 			}
 		}
@@ -145,7 +151,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		//获得创建人信息
 		List<User> createUserList = iUserClient.selectUserIds(createUserIds);
 
-		if (CollectionUtils.isNotEmpty(deliveryItemsList)){
+		if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
 			for (DeliveryItems deliveryItems : deliveryItemsList) {
 				if (ObjectUtil.isNotEmpty(updateUserList)) {
 					User user = updateUserList.stream().anyMatch(e -> e.getId().equals(deliveryItems.getUpdateUser())) ? updateUserList.stream().filter(e -> e.getId().equals(deliveryItems.getUpdateUser())).findFirst().get() : null;
@@ -161,10 +167,10 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 					}
 				}
 
-				if (deliveryItems.getItemId() != null){
+				if (deliveryItems.getItemId() != null) {
 					//获取商品编码,名称,规格编码,规格型号
 					R<GoodsDescVO> goodsMessage = goodsDescClient.selectGoodsMessage(deliveryItems.getItemId());
-					if (goodsMessage.isSuccess() && goodsMessage.getData() != null){
+					if (goodsMessage.isSuccess() && goodsMessage.getData() != null) {
 						deliveryItems.setCode(goodsMessage.getData().getCode());
 						deliveryItems.setCname(goodsMessage.getData().getCname());
 						deliveryItems.setTypeno(goodsMessage.getData().getTypeno());
@@ -234,15 +240,25 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 				StockGoods stockGoods = null;
 				StockGoodsVO stock = null;
 				StockGoods goods = null;
-				if ("681169".equals(AuthUtil.getTenantId())){
+				if ("681169".equals(AuthUtil.getTenantId())) {
 					goods = stockGoodsList.stream().filter(s ->
 						s.getGoodsId().equals(deliveryItems.getItemId())
-						&& s.getTradeType().equals("GN")
-						&& s.getCorpId().equals(deliveryItems.getCorpId())
-						&& s.getStorageId().equals(delivery.getStorageId())
+							&& s.getTradeType().equals("GN")
+							&& s.getCorpId().equals(deliveryItems.getCorpId())
+							&& s.getStorageId().equals(delivery.getStorageId())
 					).findFirst().orElse(null);
-				}else {
-					stock = this.getStock(delivery.getTradeType(), deliveryItems.getCorpId(), delivery.getStorageId(), deliveryItems);
+				} else {
+					if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+						&& "1".equals(sysClient.getParamService("synchronous"))) {
+						goods = stockGoodsList.stream().filter(s ->
+							s.getGoodsId().equals(deliveryItems.getItemId())
+								&& s.getTradeType().equals("GN")
+								&& s.getCorpId().equals(deliveryItems.getCorpId())
+								&& s.getStorageId().equals(delivery.getStorageId())
+						).findFirst().orElse(null);
+					}else{
+						stock = this.getStock(delivery.getTradeType(), deliveryItems.getCorpId(), delivery.getStorageId(), deliveryItems);
+					}
 				}
 
 				// todo 国内贸易暂定不更新库存
@@ -251,7 +267,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 					if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
 						// 更新库存账
 						stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
-					// 撤销发货
+						// 撤销发货
 					} else if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
 						stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
 					} else {
@@ -259,6 +275,20 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 						throw new RuntimeException("库存为空");
 					}
 
+				} else {
+					if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
+						// 发货
+						if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
+							// 更新库存账
+							stockGoods = this.deliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
+							// 撤销发货
+						} else if (stock != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
+							stockGoods = this.revocationDeliverGoods(delivery.getTradeType(), stock.getId(), deliveryItems);
+						} else {
+							//新增库存账
+							throw new RuntimeException("库存为空");
+						}
+					}
 				}
 				// todo 更新订单明细中发货数量  采购和销售可能需要调不同接口
 				R actualQuantity = orderItemsClient.updateActualQuantity(deliveryItems.getSrcId(), deliveryItems.getArrivalQuantity(), delivery.getDeliveryType());
@@ -273,20 +303,29 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 					}
 				}
 				//更新发货明细库存字段
-				if ("681169".equals(AuthUtil.getTenantId())){
+				if ("681169".equals(AuthUtil.getTenantId())) {
 					if (goods != null) {
 						deliveryItems.setInventoryNumber(goods.getSurplusRouteQuantity());
-					}else {
-						deliveryItems.setInventoryNumber(BigDecimal.ZERO);
-					}
-				}else {
-					if (stockGoods != null) {
-						deliveryItems.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
-					} else if (stock != null) {
-						deliveryItems.setInventoryNumber(stock.getSurplusRouteQuantity());
 					} else {
 						deliveryItems.setInventoryNumber(BigDecimal.ZERO);
 					}
+				} else {
+					if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+						&& "1".equals(sysClient.getParamService("synchronous"))) {
+						if (goods != null) {
+							deliveryItems.setInventoryNumber(goods.getSurplusRouteQuantity());
+						} else {
+							deliveryItems.setInventoryNumber(BigDecimal.ZERO);
+						}
+					}else{
+						if (stockGoods != null) {
+							deliveryItems.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
+						} else if (stock != null) {
+							deliveryItems.setInventoryNumber(stock.getSurplusRouteQuantity());
+						} else {
+							deliveryItems.setInventoryNumber(BigDecimal.ZERO);
+						}
+					}
 				}
 				baseMapper.updateById(deliveryItems);
 			}
@@ -318,61 +357,65 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		}
 		return deliveryItemsList;
 	}
+
 	/**
 	 * 提交收货信息
+	 *
 	 * @param pId
 	 * @param deliveryItemsList
 	 * @param
 	 * @return
 	 */
-	public List<DeliveryItems> revocation(Long pId,Delivery delivery,List<DeliveryItems> deliveryItemsList){
+	public List<DeliveryItems> revocation(Long pId, Delivery delivery, List<DeliveryItems> deliveryItemsList) {
 		List<DeliveryItems> collect = deliveryItemsList.stream().filter(e -> e.getGoodType() == 0).collect(Collectors.toList());//发货商品
 		//收货只会增加积分
-		if (delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())){
+		if (delivery.getTradeType().equals(OrderTypeEnum.DOMESTIC.getType())) {
 			R updatePoints = this.updatePoints(delivery, collect, null);
-			if (!updatePoints.isSuccess()){
-				throw  new RuntimeException(updatePoints.getMsg());
+			if (!updatePoints.isSuccess()) {
+				throw new RuntimeException(updatePoints.getMsg());
 			}
 		}
 		// todo 溢付款
 		R overpayment = this.updateOverpayment(delivery, collect);
-		if (!overpayment.isSuccess()){
+		if (!overpayment.isSuccess()) {
 			throw new RuntimeException(overpayment.getMsg());
 		}
 		return deliveryItemsList;
 	}
+
 	/**
 	 * 查询库存账
-	 * @param tradeType 单据类型 进口、出口、国内
-	 * @param corpId 销售公司/客户/工厂
-	 * @param storageId 仓库id
+	 *
+	 * @param tradeType     单据类型 进口、出口、国内
+	 * @param corpId        销售公司/客户/工厂
+	 * @param storageId     仓库id
 	 * @param deliveryItems 明细信息
 	 */
-	public StockGoodsVO getStock(String tradeType,Long corpId,Long storageId,DeliveryItems deliveryItems){
+	public StockGoodsVO getStock(String tradeType, Long corpId, Long storageId, DeliveryItems deliveryItems) {
 		String itemType = deliveryItems.getSpecificationAndModel();//产品型号
 		String lotNo = null;//批次号
 		String cntrNo = null;//箱号
 		String billNo = null;//提单号
 		String contractNumber = null;//合同号
 		//国内贸易和出口贸易查询同一个库存账接口,进口查询另一个接口需要合同号、提单号、箱号
-		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())){
+		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
 			itemType = null;
 			corpId = null;
 			cntrNo = deliveryItems.getCntrNo();//箱号
 			billNo = deliveryItems.getBillNo();//提单号
 			contractNumber = deliveryItems.getContractNumber();//合同号
-		}else if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())){//国内
+		} else if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())) {//国内
 			//corpId = null;
 			//storageId = null;
-		}else if (tradeType.equals(OrderTypeEnum.EXPORT.getType())){//出口
+		} else if (tradeType.equals(OrderTypeEnum.EXPORT.getType())) {//出口
 			storageId = null;
 			corpId = null;
-		}else if (tradeType.equals(OrderTypeEnum.DEALER.getType())){//经销商
+		} else if (tradeType.equals(OrderTypeEnum.DEALER.getType())) {//经销商
 			corpId = null;
 			itemType = null;
 		}
-		R<StockGoodsVO> goodsVOR = stockGoodsClient.selectStock(corpId, storageId, deliveryItems.getItemId(), itemType, lotNo, cntrNo, billNo, contractNumber,tradeType);
-		if (goodsVOR.isSuccess()){
+		R<StockGoodsVO> goodsVOR = stockGoodsClient.selectStock(corpId, storageId, deliveryItems.getItemId(), itemType, lotNo, cntrNo, billNo, contractNumber, tradeType);
+		if (goodsVOR.isSuccess()) {
 			return goodsVOR.getData();
 		}
 		return null;
@@ -380,44 +423,48 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 
 	/**
 	 * 发货减少库存账
-	 * @param tradeType 单据类型 进口、出口、国内
-	 * @param stockId 库存账id
+	 *
+	 * @param tradeType     单据类型 进口、出口、国内
+	 * @param stockId       库存账id
 	 * @param deliveryItems 货物明细信息
 	 */
-	public StockGoods deliverGoods(String tradeType,Long stockId,DeliveryItems deliveryItems){
+	public StockGoods deliverGoods(String tradeType, Long stockId, DeliveryItems deliveryItems) {
 		//查询库存账
 		R<StockGoods> stockById = stockGoodsClient.getStockById(stockId);
-		if (!stockById.isSuccess()){
-			throw  new RuntimeException("查询库存账出错");
+		if (!stockById.isSuccess()) {
+			throw new RuntimeException("查询库存账出错");
 		}
-		if (stockById.getData() == null){
-			throw  new RuntimeException("库存账不存在");
+		if (stockById.getData() == null) {
+			throw new RuntimeException("库存账不存在");
 		}
 		StockGoods stockGoods = stockById.getData();
 		//判断出库数量和结余数量的大小
-		if (stockGoods.getBalanceQuantity().compareTo(deliveryItems.getActualQuantity()) < 0){
-			throw  new RuntimeException("当前结余数量为:"+stockGoods.getBalanceQuantity() +"小于发货数量,发货数量为:" +deliveryItems.getActualQuantity());
+		if (stockGoods.getBalanceQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
+			throw new RuntimeException("当前结余数量为:" + stockGoods.getBalanceQuantity() + "小于发货数量,发货数量为:" + deliveryItems.getActualQuantity());
 		}
-		if (stockGoods.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) < 0){
-			throw  new RuntimeException("当前可用数量为:"+stockGoods.getSurplusRouteQuantity() +"小于发货数量,发货数量为:" +deliveryItems.getActualQuantity());
+		if (stockGoods.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
+			throw new RuntimeException("当前可用数量为:" + stockGoods.getSurplusRouteQuantity() + "小于发货数量,发货数量为:" + deliveryItems.getActualQuantity());
+		}
+		stockGoods.setOutQuantity(stockGoods.getOutQuantity().add(deliveryItems.getActualQuantity()));//出库数量 加
+		if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
+			stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));//锁定数量 减
+		} else {
+			stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getActualQuantity()));//结余数量 减
+			stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
 		}
-		stockGoods.setOutQuantity(stockGoods.getOutQuantity().add( deliveryItems.getActualQuantity()));//出库数量 加
-		//stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().subtract(deliveryItems.getActualQuantity()));//锁定数量 减
-		stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().subtract(deliveryItems.getActualQuantity()));//结余数量 减
-		stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
 //		stockGoods.setOutAmount(stockGoods.getOutAmount().add(deliveryItems.getDeliveryAmount()));//出库金额加
 		stockGoods.setOutAmount(stockGoods.getOutAmount().add(deliveryItems.getContractAmount()));//出库金额加
-		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())){
+		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
 			//判断出库发票重量和结余发票重量
-			if (stockGoods.getBalanceWeight().compareTo(deliveryItems.getInvoiceWeight()) < 0){
-				throw  new RuntimeException("当前结余发票重量为:"+stockGoods.getBalanceWeight() +"小于发货发票重量,发货发票重量为:" +deliveryItems.getInvoiceWeight());
+			if (stockGoods.getBalanceWeight().compareTo(deliveryItems.getInvoiceWeight()) < 0) {
+				throw new RuntimeException("当前结余发票重量为:" + stockGoods.getBalanceWeight() + "小于发货发票重量,发货发票重量为:" + deliveryItems.getInvoiceWeight());
 			}
 			stockGoods.setOutWeight(stockGoods.getOutWeight().add(deliveryItems.getInvoiceWeight()));//出库发票重量
 			//stockGoods.setLockingWeight(stockGoods.getLockingWeight().subtract(deliveryItems.getInvoiceWeight()));//锁定发票重量
 			stockGoods.setBalanceWeight(stockGoods.getBalanceWeight().subtract(deliveryItems.getInvoiceWeight()));//结余发票重量
 			//判断出库码单重量和结余码单重量
-			if (stockGoods.getBalanceVolumn().compareTo(deliveryItems.getBillWeight()) < 0){
-				throw  new RuntimeException("当前结余码单重量为:"+stockGoods.getBalanceVolumn() +"小于发货码单重量,发货码单重量为:" +deliveryItems.getBillWeight());
+			if (stockGoods.getBalanceVolumn().compareTo(deliveryItems.getBillWeight()) < 0) {
+				throw new RuntimeException("当前结余码单重量为:" + stockGoods.getBalanceVolumn() + "小于发货码单重量,发货码单重量为:" + deliveryItems.getBillWeight());
 			}
 			stockGoods.setOutVolumn(stockGoods.getOutVolumn().add(deliveryItems.getBillWeight()));//出库码单重量
 			//stockGoods.setLockingVolumn(stockGoods.getLockingVolumn().subtract(deliveryItems.getBillWeight()));//锁定码单重量
@@ -426,51 +473,58 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		stockGoods.setUpdateTime(new Date());
 		stockGoods.setUpdateUser(SecureUtil.getUserId());
 		boolean updateStock = stockGoodsClient.updateStock(stockGoods);
-		if (!updateStock){
+		if (!updateStock) {
 			throw new RuntimeException("更新库存总账失败");
 		}
 		return stockGoods;
 	}
+
 	/**
 	 * 撤销发货
-	 * @param tradeType 单据类型 进口、出口、国内
-	 * @param stockId 库存账id
+	 *
+	 * @param tradeType     单据类型 进口、出口、国内
+	 * @param stockId       库存账id
 	 * @param deliveryItems 货物明细信息
 	 */
-	public StockGoods revocationDeliverGoods(String tradeType,Long stockId,DeliveryItems deliveryItems){
+	public StockGoods revocationDeliverGoods(String tradeType, Long stockId, DeliveryItems deliveryItems) {
 		//查询库存账
 		R<StockGoods> stockById = stockGoodsClient.getStockById(stockId);
-		if (!stockById.isSuccess()){
-			throw  new RuntimeException("查询库存账出错");
+		if (!stockById.isSuccess()) {
+			throw new RuntimeException("查询库存账出错");
 		}
-		if (stockById.getData() == null){
-			throw  new RuntimeException("库存账不存在");
+		if (stockById.getData() == null) {
+			throw new RuntimeException("库存账不存在");
 		}
 		StockGoods stockGoods = stockById.getData();
 		//判断出库数量和结余数量的大小
-		if (stockGoods.getOutQuantity().compareTo(deliveryItems.getActualQuantity()) < 0){
-			throw  new RuntimeException("当前可减少出库数量为:"+stockGoods.getOutQuantity() +"小于发货数量,发货数量为:" +deliveryItems.getActualQuantity());
+		if (stockGoods.getOutQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
+			throw new RuntimeException("当前可减少出库数量为:" + stockGoods.getOutQuantity() + "小于发货数量,发货数量为:" + deliveryItems.getActualQuantity());
 		}
-		stockGoods.setOutQuantity(stockGoods.getOutQuantity().subtract( deliveryItems.getActualQuantity()));//出库数量 减
+		stockGoods.setOutQuantity(stockGoods.getOutQuantity().subtract(deliveryItems.getActualQuantity()));//出库数量 减
 		//stockGoods.setLockingQuantity(stockGoods.getLockingQuantity().add(deliveryItems.getActualQuantity()));//锁定数量 加
 		stockGoods.setBalanceQuantity(stockGoods.getBalanceQuantity().add(deliveryItems.getActualQuantity()));//结余数量 加
 		stockGoods.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//可用数量 加
-		if ("681169".equals(AuthUtil.getTenantId())){
+		if ("681169".equals(AuthUtil.getTenantId())) {
 			stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getDeliveryAmount()));//出库金额减
-		}else{
-			stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getContractAmount()));//出库金额减
+		} else {
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))) {
+				stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getDeliveryAmount()));//出库金额减
+			}else{
+				stockGoods.setOutAmount(stockGoods.getOutAmount().subtract(deliveryItems.getContractAmount()));//出库金额减
+			}
 		}
-		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())){
+		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
 			//判断出库发票重量和结余发票重量
-			if (stockGoods.getOutWeight().compareTo(deliveryItems.getInvoiceWeight()) < 0){
-				throw  new RuntimeException("当前出库发票重量为:"+stockGoods.getOutWeight() +"小于发货发票重量,发货发票重量为:" +deliveryItems.getInvoiceWeight());
+			if (stockGoods.getOutWeight().compareTo(deliveryItems.getInvoiceWeight()) < 0) {
+				throw new RuntimeException("当前出库发票重量为:" + stockGoods.getOutWeight() + "小于发货发票重量,发货发票重量为:" + deliveryItems.getInvoiceWeight());
 			}
 			stockGoods.setOutWeight(stockGoods.getOutWeight().subtract(deliveryItems.getInvoiceWeight()));//出库发票重量 减
 			//stockGoods.setLockingWeight(stockGoods.getLockingWeight().add(deliveryItems.getInvoiceWeight()));//锁定发票重量 加
 			stockGoods.setBalanceWeight(stockGoods.getBalanceWeight().add(deliveryItems.getInvoiceWeight()));//结余发票重量 加
 			//判断出库码单重量和结余码单重量
-			if (stockGoods.getOutVolumn().compareTo(deliveryItems.getBillWeight()) < 0){
-				throw  new RuntimeException("当前出库码单重量为:"+stockGoods.getOutVolumn() +"小于发货码单重量,发货码单重量为:" +deliveryItems.getBillWeight());
+			if (stockGoods.getOutVolumn().compareTo(deliveryItems.getBillWeight()) < 0) {
+				throw new RuntimeException("当前出库码单重量为:" + stockGoods.getOutVolumn() + "小于发货码单重量,发货码单重量为:" + deliveryItems.getBillWeight());
 			}
 			stockGoods.setOutVolumn(stockGoods.getOutVolumn().subtract(deliveryItems.getBillWeight()));//出库码单重量 减
 			//stockGoods.setLockingVolumn(stockGoods.getLockingVolumn().add(deliveryItems.getBillWeight()));//锁定码单重量 加
@@ -479,7 +533,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		stockGoods.setUpdateTime(new Date());
 		stockGoods.setUpdateUser(SecureUtil.getUserId());
 		boolean updateStock = stockGoodsClient.updateStock(stockGoods);
-		if (!updateStock){
+		if (!updateStock) {
 			throw new RuntimeException("更新库存总账失败");
 		}
 		return stockGoods;
@@ -487,8 +541,9 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 
 	/**
 	 * 撤销收货
-	 * @param tradeType 单据类型 进口、出口、国内
-	 * @param stockId 库存账id
+	 *
+	 * @param tradeType     单据类型 进口、出口、国内
+	 * @param stockId       库存账id
 	 * @param deliveryItems 货物明细信息
 	 */
 	public StockGoods cancelStock(String tradeType, Long stockId, DeliveryItems deliveryItems) {
@@ -539,11 +594,11 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	}
 
 
-
 	/**
 	 * 收货单新增库存账
-	 * @param tradeType 单据类型 进口、出口、国内
-	 * @param stockId 库存账id
+	 *
+	 * @param tradeType     单据类型 进口、出口、国内
+	 * @param stockId       库存账id
 	 * @param deliveryItems 货物明细信息
 	 */
 	public StockGoods receiving(String tradeType, Long stockId, DeliveryItems deliveryItems) {
@@ -568,7 +623,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 				stockGoods.setBalanceVolumn(stockGoods.getBalanceVolumn() != null ? stockGoods.getBalanceVolumn().add(deliveryItems.getBillWeight()) : new BigDecimal("0").add(deliveryItems.getBillWeight()));//结余码单重量 加
 			}
 		} else {
-			if (!"681169".equals(AuthUtil.getTenantId())){
+			if (!"681169".equals(AuthUtil.getTenantId())) {
 				if (stockGoods.getLockingQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
 					throw new RuntimeException(stockGoods.getCode() + "更新库存总账失败,锁定库存不足");
 				}
@@ -579,6 +634,14 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		stockGoods.setCntrNo(deliveryItems.getCntrNo());
 		stockGoods.setUpdateTime(new Date());
 		stockGoods.setUpdateUser(SecureUtil.getUserId());
+		if (!new BigDecimal("0.00").equals(stockGoods.getBalanceAmount()) &&
+			!new BigDecimal("0.00").equals(stockGoods.getBalanceQuantity())){
+			//库存金额
+			stockGoods.setBalanceAmount(stockGoods.getBalanceAmount().subtract(deliveryItems.getDeliveryAmount()));
+			stockGoods.setStockPrice(stockGoods.getBalanceAmount().divide(stockGoods.getBalanceQuantity(), MathContext.DECIMAL32));
+		}else{
+			stockGoods.setStockPrice(new BigDecimal("0.00"));
+		}
 		boolean updateStock = stockGoodsClient.updateStock(stockGoods);
 		if (!updateStock) {
 			throw new RuntimeException(stockGoods.getCode() + "更新库存总账失败");
@@ -588,12 +651,13 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 
 	/**
 	 * 新增库存账
-	 * @param tradeType 单据类型 进口、出口、国内
-	 * @param corpId 销售公司/客户/工厂
-	 * @param storageId 仓库id
+	 *
+	 * @param tradeType     单据类型 进口、出口、国内
+	 * @param corpId        销售公司/客户/工厂
+	 * @param storageId     仓库id
 	 * @param deliveryItems 明细信息
 	 */
-	public StockGoods saveStock(String tradeType,Long corpId,Long storageId,DeliveryItems deliveryItems,String orderType){
+	public StockGoods saveStock(String tradeType, Long corpId, Long storageId, DeliveryItems deliveryItems, String orderType) {
 		StockGoods stockGoods = new StockGoods();
 		stockGoods.setGoodsId(deliveryItems.getItemId());//商品id
 
@@ -608,7 +672,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		stockGoods.setInAmount(deliveryItems.getDeliveryAmount());//入库金额
 		stockGoods.setSurplusRouteQuantity(deliveryItems.getActualQuantity());//可用数量
 		//进口贸易 还需要追加码单重量 和 发票重量
-		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())){
+		if (tradeType.equals(OrderTypeEnum.IMPORT.getType())) {
 			stockGoods.setBillNo(deliveryItems.getBillNo());//提单号
 			stockGoods.setContractNumber(deliveryItems.getContractNumber());//合同号
 			stockGoods.setStorageId(storageId);//仓库id
@@ -625,30 +689,27 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 			stockGoods.setBalanceVolumn(deliveryItems.getBillWeight());//结余码单重量
 
 			stockGoods.setTradeType("JK");
-			if (ObjectUtil.isNotEmpty(orderType)){
+			if (ObjectUtil.isNotEmpty(orderType)) {
 				stockGoods.setOrderType(orderType);
-			}else{
+			} else {
 				stockGoods.setOrderType(deliveryItems.getOrderType());
 			}
 		}
 		//国内
-		else if(tradeType.equals(OrderTypeEnum.DOMESTIC.getType()))
-		{
+		else if (tradeType.equals(OrderTypeEnum.DOMESTIC.getType())) {
 			stockGoods.setCorpId(corpId);
 			stockGoods.setStorageId(storageId);
 			stockGoods.setItemType(deliveryItems.getSpecificationAndModel());//规格明细
 			stockGoods.setTradeType("GN");
-            //商品 规格 供应商 仓库
+			//商品 规格 供应商 仓库
 		}
 		//出口
-		else if(tradeType.equals(OrderTypeEnum.EXPORT.getType()))
-		{
+		else if (tradeType.equals(OrderTypeEnum.EXPORT.getType())) {
 			stockGoods.setTradeType("CK");
 			stockGoods.setItemType(deliveryItems.getSpecificationAndModel());//规格明细
 		}
 		//经销商
-		else if(tradeType.equals(OrderTypeEnum.DEALER.getType()))
-		{
+		else if (tradeType.equals(OrderTypeEnum.DEALER.getType())) {
 			stockGoods.setTradeType("JXS");
 			stockGoods.setStorageId(storageId);
 		}
@@ -656,9 +717,17 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		stockGoods.setCreateUser(SecureUtil.getUserId());
 		stockGoods.setTenantId(SecureUtil.getTenantId());
 		stockGoods.setCreateTime(new Date());
+		//库存金额
+		stockGoods.setBalanceAmount(deliveryItems.getDeliveryAmount());
+		if (!new BigDecimal("0.00").equals(stockGoods.getBalanceAmount()) &&
+			!new BigDecimal("0.00").equals(stockGoods.getBalanceQuantity())){
+			stockGoods.setStockPrice(stockGoods.getBalanceAmount().divide(stockGoods.getBalanceQuantity(), MathContext.DECIMAL32));
+		}else{
+			stockGoods.setStockPrice(new BigDecimal("0.00"));
+		}
+
 		R saveStock = stockGoodsClient.saveStock(stockGoods);
-		if(!saveStock.isSuccess())
-		{
+		if (!saveStock.isSuccess()) {
 			throw new SecurityException("插入库存失败");
 		}
 		return stockGoods;
@@ -725,6 +794,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		}
 
 	}
+
 	@Override
 	public void updateByPid(Long id) {
 		baseMapper.updateByPid(id);
@@ -732,31 +802,32 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 
 	@Override
 	public List<ShipmentsVo> dailyShipmentStatistics(DeliveryVO delivery) {
-		return baseMapper.dailyShipmentStatistics(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId());
+		return baseMapper.dailyShipmentStatistics(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId());
 	}
 
 	/**
 	 * 修改客户积分信息
-	 * @param delivery 发货主表信息
-	 * @param list 赠送积分明细
+	 *
+	 * @param delivery  发货主表信息
+	 * @param list      赠送积分明细
 	 * @param itemsList 消费积分明细
 	 * @return
 	 */
-	public R updatePoints(Delivery delivery,List<DeliveryItems> list,List<DeliveryItems> itemsList){
+	public R updatePoints(Delivery delivery, List<DeliveryItems> list, List<DeliveryItems> itemsList) {
 		String type = null;
-		if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())){//收货赠送积分
+		if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())) {//收货赠送积分
 			type = OverpaymentEnum.ADD.getType();
-		}else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())){//撤销收货撤销赠送积分
+		} else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())) {//撤销收货撤销赠送积分
 			type = OverpaymentEnum.REPEALADD.getType();
-		}else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())){//确认发货消费积分
+		} else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())) {//确认发货消费积分
 			type = OverpaymentEnum.REDUCE.getType();
-		}else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())){//撤销发货撤销消费积分
+		} else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())) {//撤销发货撤销消费积分
 			type = OverpaymentEnum.REPEALREDUCE.getType();
 		}
 		//赠送积分明细
 		List<BusinessPointsItem> businessPointsItemList = new ArrayList<>();
-		if (CollectionUtils.isNotEmpty(list) && (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType()))){
-			list.stream().forEach(item ->{
+		if (CollectionUtils.isNotEmpty(list) && (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType()))) {
+			list.stream().forEach(item -> {
 				BusinessPointsItem businessPointsItem = new BusinessPointsItem();
 				businessPointsItem.setBillNo(delivery.getSysNo());
 				businessPointsItem.setOrderNo(item.getContractNumber());
@@ -768,8 +839,8 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		}
 		//消费积分明细
 		List<BusinessPointsItem> pointsItemList = new ArrayList<>();
-		if (CollectionUtils.isNotEmpty(itemsList) && (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType()))){
-			itemsList.stream().forEach(item ->{
+		if (CollectionUtils.isNotEmpty(itemsList) && (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType()) || delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType()))) {
+			itemsList.stream().forEach(item -> {
 				BusinessPointsItem businessPointsItem = new BusinessPointsItem();
 				businessPointsItem.setBillNo(delivery.getSysNo());
 				businessPointsItem.setOrderNo(item.getContractNumber());
@@ -779,7 +850,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 				pointsItemList.add(businessPointsItem);
 			});
 		}
-		if (CollectionUtils.isNotEmpty(businessPointsItemList) || CollectionUtils.isNotEmpty(pointsItemList)){
+		if (CollectionUtils.isNotEmpty(businessPointsItemList) || CollectionUtils.isNotEmpty(pointsItemList)) {
 			Points points = new Points();
 			points.setCorpId(delivery.getCorpId());
 			points.setConvertIntegral(delivery.getConvertIntegral());
@@ -791,25 +862,28 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		}
 		return R.success("操作成功");
 	}
-	public R updateOverpayment(Delivery delivery,List<DeliveryItems> list){
+
+	public R updateOverpayment(Delivery delivery, List<DeliveryItems> list) {
 		String type = null;
-		if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())){//收货加溢付款
+		if (delivery.getOverpayment().equals(OverpaymentEnum.REDUCE.getType())) {//收货加溢付款
 			type = OverpaymentEnum.ADD.getType();
-		}else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())){//撤销收货撤销增加溢付款
+		} else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALREDUCE.getType())) {//撤销收货撤销增加溢付款
 			type = OverpaymentEnum.REPEALADD.getType();
-		}else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())){//
+		} else if (delivery.getOverpayment().equals(OverpaymentEnum.ADD.getType())) {//
 			type = OverpaymentEnum.REDUCE.getType();
-		}else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())){
+		} else if (delivery.getOverpayment().equals(OverpaymentEnum.REPEALADD.getType())) {
 			type = OverpaymentEnum.REPEALREDUCE.getType();
 		}
 		BigDecimal amount = new BigDecimal(BigInteger.ZERO);
 		//对发货明细数据进行筛选 发货数量减去到货数量大于0 的
 		List<DeliveryItems> collect = list.stream().filter(e -> (e.getActualQuantity().subtract(e.getArrivalQuantity())).compareTo(BigDecimal.ZERO) > 0).collect(Collectors.toList());
-		if (CollectionUtils.isNotEmpty(collect)){
+		if (CollectionUtils.isNotEmpty(collect)) {
 			//获取溢付款金额 溢付款金额等于发货数量-到货数量的值 乘以单价 等于溢付款
-			amount = collect.stream().filter(e -> e.getPrice() != null).reduce(BigDecimal.ZERO,(x,y) ->{ return x.add((y.getActualQuantity().subtract(y.getArrivalQuantity())).multiply(y.getPrice())); },BigDecimal::add);
+			amount = collect.stream().filter(e -> e.getPrice() != null).reduce(BigDecimal.ZERO, (x, y) -> {
+				return x.add((y.getActualQuantity().subtract(y.getArrivalQuantity())).multiply(y.getPrice()));
+			}, BigDecimal::add);
 			List<BusinessOverpaymentItem> businessOverpaymentItemList = new ArrayList<>();
-			collect.stream().forEach(item ->{
+			collect.stream().forEach(item -> {
 				BusinessOverpaymentItem overpaymentItem = new BusinessOverpaymentItem();
 				overpaymentItem.setBillNo(delivery.getSrcOrderNo());
 				overpaymentItem.setSrcOrderNo(delivery.getSysNo());
@@ -832,86 +906,87 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 
 	/**
 	 * 经销商调拨
-	 * @param storageId 原仓库
+	 *
+	 * @param storageId      原仓库
 	 * @param allotStorageId 调拨仓库
-	 * @param list 调拨明细
-	 * @param tradeType 贸易类型
-	 * @param operate 操作 1 确认调拨 2 撤销调拨
+	 * @param list           调拨明细
+	 * @param tradeType      贸易类型
+	 * @param operate        操作 1 确认调拨 2 撤销调拨
 	 * @return
 	 */
-	public R affirmAllot(Long storageId,Long allotStorageId,List<DeliveryItems> list,int operate,String tradeType){
+	public R affirmAllot(Long storageId, Long allotStorageId, List<DeliveryItems> list, int operate, String tradeType) {
 		//查询库存 判断原仓库是否有足够的库存调拨
-		if (operate == 1){
+		if (operate == 1) {
 			for (DeliveryItems deliveryItems : list) {
 				StockGoodsVO stock = this.getStock(tradeType, null, storageId, deliveryItems);
-				if (stock == null){
+				if (stock == null) {
 					throw new SecurityException("商品未找库存");
 				}
-				if (stock.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) <0){
+				if (stock.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
 					throw new SecurityException("商品库存不足");
 				}
 				//原仓库减去库存
-				stock.setOutQuantity(stock.getOutQuantity().add( deliveryItems.getActualQuantity()));//出库数量 加
+				stock.setOutQuantity(stock.getOutQuantity().add(deliveryItems.getActualQuantity()));//出库数量 加
 				stock.setSurplusRouteQuantity(stock.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
 				stock.setBalanceQuantity(stock.getInQuantity().subtract(stock.getOutQuantity()));//结余数量 减
 				//出库金额加
 				stock.setOutAmount(stock.getOutAmount().add((stock.getInAmount().divide(stock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity())));
 				boolean updateStock = stockGoodsClient.updateStock(stock);
-				if (!updateStock){
+				if (!updateStock) {
 					throw new RuntimeException("更新库存总账失败");
 				}
 				//新仓库添加库存
 				//入库金额等于原仓库的入库金额除以入库数量
 				deliveryItems.setDeliveryAmount((stock.getInAmount().divide(stock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity()));
 				StockGoodsVO serviceStock = this.getStock(tradeType, null, allotStorageId, deliveryItems);
-				if (serviceStock == null){
-					this.saveStock(tradeType,null,allotStorageId,deliveryItems,null);
-				}else {
-					serviceStock.setInQuantity(serviceStock.getInQuantity().add( deliveryItems.getActualQuantity()));//入库数量 加
+				if (serviceStock == null) {
+					this.saveStock(tradeType, null, allotStorageId, deliveryItems, null);
+				} else {
+					serviceStock.setInQuantity(serviceStock.getInQuantity().add(deliveryItems.getActualQuantity()));//入库数量 加
 					serviceStock.setSurplusRouteQuantity(serviceStock.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//可用数量 加
 					serviceStock.setBalanceQuantity(serviceStock.getInQuantity().add(serviceStock.getOutQuantity()));//结余数量 加
 					//入库金额加
 					serviceStock.setInAmount(serviceStock.getInAmount().add((stock.getInAmount().divide(stock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity())));
 					boolean stockMessage = stockGoodsClient.updateStock(serviceStock);
-					if (!stockMessage){
+					if (!stockMessage) {
 						throw new RuntimeException("更新库存总账失败");
 					}
 				}
 			}
-		}else if (operate == 2){
+		} else if (operate == 2) {
 			for (DeliveryItems deliveryItems : list) {
 				StockGoodsVO stock = this.getStock(tradeType, null, allotStorageId, deliveryItems);
-				if (stock == null){
+				if (stock == null) {
 					throw new SecurityException("商品未找库存");
 				}
-				if (stock.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) <0){
+				if (stock.getSurplusRouteQuantity().compareTo(deliveryItems.getActualQuantity()) < 0) {
 					throw new SecurityException("商品库存不足");
 				}
 				//原仓库添加库存
 				StockGoodsVO serviceStock = this.getStock(tradeType, null, storageId, deliveryItems);
-				if (serviceStock == null){
+				if (serviceStock == null) {
 					throw new SecurityException("未找到原仓库库存信息");
-				}else {
-					serviceStock.setOutQuantity(serviceStock.getOutQuantity().subtract( deliveryItems.getActualQuantity()));//出库数量 减
+				} else {
+					serviceStock.setOutQuantity(serviceStock.getOutQuantity().subtract(deliveryItems.getActualQuantity()));//出库数量 减
 					serviceStock.setSurplusRouteQuantity(serviceStock.getSurplusRouteQuantity().add(deliveryItems.getActualQuantity()));//可用数量 加
 					serviceStock.setBalanceQuantity(serviceStock.getInQuantity().add(serviceStock.getOutQuantity()));//结余数量 加
 					//出库金额减
 					serviceStock.setOutAmount(serviceStock.getOutAmount().subtract((serviceStock.getInAmount().divide(serviceStock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity())));
 
 					boolean stockMessage = stockGoodsClient.updateStock(serviceStock);
-					if (!stockMessage){
+					if (!stockMessage) {
 						throw new RuntimeException("更新库存总账失败");
 					}
 				}
 				//新仓库减去库存
-				stock.setInQuantity(stock.getInQuantity().subtract( deliveryItems.getActualQuantity()));//入库数量 减
+				stock.setInQuantity(stock.getInQuantity().subtract(deliveryItems.getActualQuantity()));//入库数量 减
 				stock.setSurplusRouteQuantity(stock.getSurplusRouteQuantity().subtract(deliveryItems.getActualQuantity()));//可用数量 减
 				stock.setBalanceQuantity(stock.getInQuantity().subtract(stock.getOutQuantity()));//结余数量 减
 				//入库金额减
 				stock.setInAmount(stock.getInAmount().subtract((serviceStock.getInAmount().divide(serviceStock.getInQuantity(), 5, RoundingMode.HALF_UP)).setScale(2, RoundingMode.HALF_UP).multiply(deliveryItems.getActualQuantity())));
 
 				boolean updateStock = stockGoodsClient.updateStock(stock);
-				if (!updateStock){
+				if (!updateStock) {
 					throw new RuntimeException("更新库存总账失败");
 				}
 			}
@@ -923,11 +998,11 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	public DailyNumberVO dailyNumber(DeliveryVO delivery) {
 		DailyNumberVO dailyNumberVo = new DailyNumberVO();
 		//获取今日发货数量
-		dailyNumberVo.setShipmentsNumber(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),null,0,DeliveryStatusEnum.REVOCATION.getType()));
+		dailyNumberVo.setShipmentsNumber(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), null, 0, DeliveryStatusEnum.REVOCATION.getType()));
 		//获取总发货量(月)
-		dailyNumberVo.setTotalShipments(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),null,1,DeliveryStatusEnum.REVOCATION.getType()));
+		dailyNumberVo.setTotalShipments(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), null, 1, DeliveryStatusEnum.REVOCATION.getType()));
 		//获取待发货数量
-		dailyNumberVo.setWaitDeliver(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),null,null,DeliveryStatusEnum.REPEAL.getType()));
+		dailyNumberVo.setWaitDeliver(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), null, null, DeliveryStatusEnum.REPEAL.getType()));
 		return dailyNumberVo;
 	}
 
@@ -936,16 +1011,16 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 		List<CorpNumberVO> list = new ArrayList<>();
 		//获取所属公司
 		List<CorpsDesc> corpsType = corpsDescClient.getCorpsType("GS");
-		if (CollectionUtils.isNotEmpty(corpsType)){
-			corpsType.stream().forEach(e ->{
+		if (CollectionUtils.isNotEmpty(corpsType)) {
+			corpsType.stream().forEach(e -> {
 				CorpNumberVO corpNumberVO = new CorpNumberVO();
 				corpNumberVO.setBelongToCorpName(e.getGoodtypes());
 				//获取今日发货数量
-				corpNumberVO.setShipmentsNumber(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),e.getId(),0,DeliveryStatusEnum.REVOCATION.getType()));
+				corpNumberVO.setShipmentsNumber(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), e.getId(), 0, DeliveryStatusEnum.REVOCATION.getType()));
 				//获取发货量(月)
-				corpNumberVO.setDelivered(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),e.getId(),1,DeliveryStatusEnum.REVOCATION.getType()));
+				corpNumberVO.setDelivered(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), e.getId(), 1, DeliveryStatusEnum.REVOCATION.getType()));
 				//获取待发货数量
-				corpNumberVO.setWaitDeliver(baseMapper.dailyNumber(delivery.getTradeType(),delivery.getBillType(),delivery.getTenantId(),e.getId(),null,DeliveryStatusEnum.REPEAL.getType()));
+				corpNumberVO.setWaitDeliver(baseMapper.dailyNumber(delivery.getTradeType(), delivery.getBillType(), delivery.getTenantId(), e.getId(), null, DeliveryStatusEnum.REPEAL.getType()));
 				list.add(corpNumberVO);
 			});
 		}
@@ -955,7 +1030,7 @@ public class DeliveryItemsServiceImpl extends ServiceImpl<DeliveryItemsMapper, D
 	@Override
 	public boolean submitPay(Long id) {
 		Integer integer = baseMapper.submitPay(id);
-		if (integer != null && integer >0){
+		if (integer != null && integer > 0) {
 			return true;
 		}
 		return false;

+ 439 - 82
blade-service/blade-deliver-goods/src/main/java/org/springblade/deliver/goods/service/impl/DeliveryServiceImpl.java

@@ -25,6 +25,11 @@ import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.smecloud.apigw.client.ApigwClient;
+import com.smecloud.apigw.constant.HttpMethod;
+import com.smecloud.apigw.model.ApiRequest;
+import com.smecloud.apigw.model.ApiResult;
+import com.smecloud.apigw.model.ApigwConfig;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
@@ -35,6 +40,7 @@ import org.springblade.client.entity.Message;
 import org.springblade.client.entity.StorageDesc;
 import org.springblade.client.feign.*;
 import org.springblade.client.vo.GoodsDescVO;
+import org.springblade.common.dto.token2DTO;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
@@ -53,20 +59,22 @@ import org.springblade.mocha.entity.BusinessOverpaymentItem;
 import org.springblade.mocha.entity.Overpayment;
 import org.springblade.mocha.feign.IBusinessOverpaymentClient;
 import org.springblade.purchase.sales.entity.Order;
-import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springblade.purchase.sales.feign.IOrderItemsClient;
 import org.springblade.stock.entity.StockGoods;
 import org.springblade.stock.feign.IStockGoodsClient;
+import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springblade.common.config.MD5Util;
 
 import javax.net.ssl.*;
 import java.io.*;
 import java.math.BigDecimal;
+import java.math.MathContext;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLEncoder;
@@ -134,6 +142,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	private final IRedisClient redisClient;//redis缓存处理
 
 	private final IMessageClient messageClient;//消息
+	private final ISysClient sysClient;//消息
 
 	//private final GoodsDescServiceImpl goodsDescService;
 
@@ -157,6 +166,13 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			if (ObjectUtil.isEmpty(delivery.getSalesCompany())) {
 				throw new SecurityException("单据所属公司不能为空");
 			}
+		} else {
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))) {
+				if (ObjectUtil.isEmpty(delivery.getSalesCompany())) {
+					throw new SecurityException("单据所属公司不能为空");
+				}
+			}
 		}
 		if (StringUtils.isBlank(delivery.getDeliveryStatus())) {
 			status = DeliveryStatusEnum.REPEAL.getType();
@@ -282,9 +298,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			selectById.setPackageRemarks(listR.getPackageRemarks());
 		}
 		//获取创建人中文名
-		if (selectById.getCreateUser() != null){
+		if (selectById.getCreateUser() != null) {
 			User user = userList.stream().filter(e -> e.getId().equals(selectById.getCreateUser())).findFirst().orElse(null);
-			if (ObjectUtil.isNotEmpty(user)){
+			if (ObjectUtil.isNotEmpty(user)) {
 				selectById.setCreateUserName(user.getName());
 			}
 		}
@@ -383,10 +399,19 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				billStatus = DeliveryStatusEnum.REPEAL.getType();
 			}
 		} else {
-			if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
-				billStatus = DeliveryStatusEnum.REVOCATION.getType();
-			} else if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
-				billStatus = DeliveryStatusEnum.REPEAL.getType();
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))) {
+				if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
+					billStatus = DeliveryStatusEnum.DELIVER.getType();
+				} else if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
+					billStatus = DeliveryStatusEnum.REPEAL.getType();
+				}
+			} else {
+				if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType())) {
+					billStatus = DeliveryStatusEnum.REVOCATION.getType();
+				} else if (delivery.getDeliveryType() != null && delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType())) {
+					billStatus = DeliveryStatusEnum.REPEAL.getType();
+				}
 			}
 		}
 		if (delivery.getId() == null) {
@@ -412,13 +437,25 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 					throw new RuntimeException("已撤销收货请勿重复撤销收货");
 				}
 			} else {
-				if (delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType()) && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.REVOCATION.getType())) {
-					//发货
-					throw new RuntimeException("已收货请勿重复收货");
-				} else if (delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType()) && !delivery.getDeliveryStatus().equals(DeliveryStatusEnum.REVOCATION.getType())) {
-					//撤销发货
-					throw new RuntimeException("已撤销收货请勿重复撤销收货");
+				if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+					&& "1".equals(sysClient.getParamService("synchronous"))) {
+					if (delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType()) && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())) {
+						//发货
+						throw new RuntimeException("已收货请勿重复收货");
+					} else if (delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType()) && !delivery.getDeliveryStatus().equals(DeliveryStatusEnum.DELIVER.getType())) {
+						//撤销发货
+						throw new RuntimeException("已撤销收货请勿重复撤销收货");
+					}
+				} else {
+					if (delivery.getDeliveryType().equals(DeliveryEnum.DELIVER.getType()) && delivery.getDeliveryStatus().equals(DeliveryStatusEnum.REVOCATION.getType())) {
+						//发货
+						throw new RuntimeException("已收货请勿重复收货");
+					} else if (delivery.getDeliveryType().equals(DeliveryEnum.REPEAL.getType()) && !delivery.getDeliveryStatus().equals(DeliveryStatusEnum.REVOCATION.getType())) {
+						//撤销发货
+						throw new RuntimeException("已撤销收货请勿重复撤销收货");
+					}
 				}
+
 			}
 
 			delivery.setDeliveryStatus(billStatus);
@@ -435,7 +472,12 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				if ("681169".equals(AuthUtil.getTenantId())) {
 					orderTemp.setReceivingStatus("已收货");
 				} else {
-					orderTemp.setOrderStatus("已完成");
+					if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+						&& "1".equals(sysClient.getParamService("synchronous"))) {
+						orderTemp.setReceivingStatus("已收货");
+					} else {
+						orderTemp.setOrderStatus("已完成");
+					}
 				}
 				orderTemp.setDeliverQuantity(delivery.getTotalQuantity());
 				orderTemp.setDeliverTime(date);
@@ -443,7 +485,12 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				if ("681169".equals(AuthUtil.getTenantId())) {
 					orderTemp.setReceivingStatus("已收货");
 				} else {
-					orderTemp.setOrderStatus("待发货");
+					if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+						&& "1".equals(sysClient.getParamService("synchronous"))) {
+						orderTemp.setReceivingStatus("已收货");
+					} else {
+						orderTemp.setOrderStatus("待发货");
+					}
 				}
 				orderTemp.setDeliverQuantity(BigDecimal.ZERO);
 			}
@@ -533,10 +580,15 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			} else if (DeliveryEnum.REVOCATION.getType().equals(delivery.getDeliveryType())) {
 				Order order = new Order();
 				order.setId(delivery.getOrgId());
-				if ("681169".equals(AuthUtil.getTenantId())){
+				if ("681169".equals(AuthUtil.getTenantId())) {
 					order.setOrderStatus("未完成");
-				}else {
-					order.setOrderStatus("待发货");
+				} else {
+					if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+						&& "1".equals(sysClient.getParamService("synchronous"))) {
+						order.setOrderStatus("未完成");
+					} else {
+						order.setOrderStatus("待发货");
+					}
 				}
 				order.setArrivalTime(null);
 				orderDescClient.updateOrder(order);
@@ -655,6 +707,28 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			if (ObjectUtil.isEmpty(select.getCreateTime())) {
 				throw new SecurityException("入库时间必填");
 			}
+		} else {
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))) {
+				if (ObjectUtil.isEmpty(select.getCorpId())) {
+					throw new SecurityException("供应商必填");
+				}
+				if (ObjectUtil.isEmpty(select.getPurchaseMode())) {
+					throw new SecurityException("采购方式必填");
+				}
+				if (ObjectUtil.isEmpty(select.getSalesCompany())) {
+					throw new SecurityException("所属公司必填");
+				}
+				if (ObjectUtil.isEmpty(select.getWarehouseType())) {
+					throw new SecurityException("仓库类型必填");
+				}
+				if (ObjectUtil.isEmpty(select.getStorageId())) {
+					throw new SecurityException("仓库名称必填");
+				}
+				if (ObjectUtil.isEmpty(select.getCreateTime())) {
+					throw new SecurityException("入库时间必填");
+				}
+			}
 		}
 		Long corpId = select.getCorpId();
 		redisClient.basicData("all");
@@ -681,14 +755,14 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		String brand = null;
 		//客户信息
 		List<CorpsDesc> corpsDescList = castToList(redisTemplate.opsForValue().get("corps"), CorpsDesc.class);
-		CorpsDesc corpsDesc = corpsDescList.stream().filter( c -> c.getId().equals(corpId)).findFirst().orElse(null);
+		CorpsDesc corpsDesc = corpsDescList.stream().filter(c -> c.getId().equals(corpId)).findFirst().orElse(null);
 		if (corpsDesc != null) {
 			corpName = corpsDesc.getCname();
 			corpNumber = corpsDesc.getCode();
 		}
 		//仓库信息
 		List<StorageDesc> storageDescList = castToList(redisTemplate.opsForValue().get("storageDesc"), StorageDesc.class);
-		StorageDesc storageDesc = storageDescList.stream().filter( c -> c.getId().equals(select.getStorageId())).findFirst().orElse(null);
+		StorageDesc storageDesc = storageDescList.stream().filter(c -> c.getId().equals(select.getStorageId())).findFirst().orElse(null);
 		//StorageDesc storageDesc = iStorageClient.findById(select.getStorageId());
 		if (storageDesc != null) {
 			wareHouse = storageDesc.getCname();
@@ -714,8 +788,13 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		List<DeliveryItems> deliveryItemsList = select.getDeliveryItemsList();
 		//从缓存中获得库存
 		List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
+		if (stockGoodsList.size() == 0) {
+			stockGoodsList = stockGoodsClient.selectStockGoodsAll();
+		}
+
 		if (CollectionUtils.isNotEmpty(deliveryItemsList)) {
 			List<BusinessOverpaymentItem> list = new ArrayList<>();
+			List<StockGoods> finalStockGoodsList = stockGoodsList;
 			deliveryItemsList.forEach(e -> {
 				if ("681169".equals(AuthUtil.getTenantId())) {
 					// ===================增加益付款逻辑=========================
@@ -735,6 +814,27 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 						list.add(overpaymentItem);
 					}
 					// ===================增加益付款逻辑=========================
+				} else {
+					if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+						&& "1".equals(sysClient.getParamService("synchronous"))) {
+						// ===================增加益付款逻辑=========================
+						if (e.getPurchaseQuantity().compareTo(e.getActualQuantity()) > 0) {
+							BigDecimal number = e.getPurchaseQuantity().subtract(e.getActualQuantity());
+							BigDecimal price = e.getPurchaseAmount();
+							//需要处理的益付款=(差额数量 * 单价)
+							BigDecimal total = number.multiply(price);
+							//益付款明细
+							BusinessOverpaymentItem overpaymentItem = new BusinessOverpaymentItem();
+							overpaymentItem.setBillNo(select.getSrcOrderNo());
+							overpaymentItem.setSrcOrderNo(select.getSysNo());
+							overpaymentItem.setOrderNo(e.getContractNumber());
+							overpaymentItem.setSrcPid(select.getId());
+							overpaymentItem.setSrcId(e.getId());
+							overpaymentItem.setOverpayment(total);
+							list.add(overpaymentItem);
+						}
+						// ===================增加益付款逻辑=========================
+					}
 				}
 
 				//传入库存
@@ -746,7 +846,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				model.setGoodsId(e.getItemId());
 				//不同的出口对应不同的查询条件
 				if ("JK".equals(select.getTradeType())) {
-					model = stockGoodsList.stream().filter(s ->
+					model = finalStockGoodsList.stream().filter(s ->
 						s.getGoodsId().equals(e.getItemId())
 							&& s.getTradeType().equals("JK")
 							&& s.getCntrNo().equals(e.getCntrNo())//箱号
@@ -755,18 +855,18 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 							&& s.getContractNumber().equals(e.getContractNumber())//采购订单号
 					).findFirst().orElse(null);
 				} else if ("CK".equals(select.getTradeType())) {
-					model = stockGoodsList.stream().filter(s ->
+					model = finalStockGoodsList.stream().filter(s ->
 						s.getGoodsId().equals(e.getItemId())
 							&& s.getTradeType().equals("CK")
 							&& s.getItemType().equals(e.getSpecificationAndModel())
 					).findFirst().orElse(null);
 				} else if ("GN".equals(select.getTradeType())) {
-					model = stockGoodsList.stream().filter(s ->
+					model = finalStockGoodsList.stream().filter(s ->
 						s.getGoodsId().equals(e.getItemId())
-						&& s.getTradeType().equals("GN")
-						&& s.getCorpId().equals(select.getCorpId())
-						&& s.getStorageId().equals(select.getStorageId())
-						&& s.getItemType().equals(e.getSpecificationAndModel())
+							&& s.getTradeType().equals("GN")
+							&& s.getCorpId().equals(select.getCorpId())
+							&& s.getStorageId().equals(select.getStorageId())
+							&& s.getItemType().equals(e.getSpecificationAndModel())
 					).findFirst().orElse(null);
 				} else {
 					throw new SecurityException("贸易类型未指定");
@@ -793,10 +893,27 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 						e.setInWeight(receiving.getInWeight());
 					}
 				} else {
-					if (stock == null) {
-						throw new SecurityException("更新库存失败,未找到库存");
+					if (ObjectUtils.isNotNull(sysClient.getParamService("inventory")) && "1".equals(sysClient.getParamService("inventory"))) {
+						//新增库存单
+						if (stock == null) {
+							StockGoods stockGoods = iDeliveryItemsService.saveStock(select.getTradeType(), select.getCorpId(), select.getStorageId(), e, select.getOrderType());
+							//更新收货单明细库存
+							e.setInventoryNumber(stockGoods.getSurplusRouteQuantity());
+							e.setInWeight(stockGoods.getInWeight());
+						}
+						//修改库存单
+						else {
+							StockGoods receiving = iDeliveryItemsService.receiving(select.getTradeType(), stock.getId(), e);
+							//更新收货单明细库存
+							e.setInventoryNumber(receiving.getSurplusRouteQuantity());
+							e.setInWeight(receiving.getInWeight());
+						}
 					} else {
-						iDeliveryItemsService.receiving(select.getTradeType(), stock.getId(), e);
+						if (stock == null) {
+							throw new SecurityException("更新库存失败,未找到库存");
+						} else {
+							iDeliveryItemsService.receiving(select.getTradeType(), stock.getId(), e);
+						}
 					}
 				}
 
@@ -834,6 +951,26 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 					}
 				}
 				// ===================增加益付款逻辑=========================
+			} else {
+				if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+					&& "1".equals(sysClient.getParamService("synchronous"))) {
+					// ===================增加益付款逻辑=========================
+					if (CollectionUtils.isNotEmpty(list)) {
+						BigDecimal itemTotal = list.stream().map(BusinessOverpaymentItem::getOverpayment).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+						//益付款
+						Overpayment overpayment = new Overpayment();
+						overpayment.setCorpId(select.getSalesCompany());
+						overpayment.setType("add");
+						overpayment.setSrcPid(deliveryId);
+						overpayment.setAmount(itemTotal);
+						overpayment.setList(list);
+						R updateOverpayment = iBusinessOverpaymentClient.updateOverpayment(overpayment);
+						if (!updateOverpayment.isSuccess()) {
+							throw new SecurityException("收货失败:增加客户益付款报错");
+						}
+					}
+					// ===================增加益付款逻辑=========================
+				}
 			}
 		}
 
@@ -877,35 +1014,75 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			orderDescClient.updateOrder(orderTemp);
 
 		} else {
-			delivery.setDeliveryStatus("已收货");
-			delivery.setFreightQuantity(select.getTotalQuantity());
-			delivery.setFreightTime(date);
-			delivery.setFreightUser(AuthUtil.getUserName());
-			baseMapper.updateById(delivery);
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))) {
+				delivery.setDeliveryStatus("已发货");
+				delivery.setFreightQuantity(select.getTotalQuantity());
+				delivery.setFreightTime(date);
+				delivery.setFreightUser(AuthUtil.getUserName());
+				baseMapper.updateById(delivery);
 
-			Order temp = new Order();
-			temp.setId(select.getOrgId());//采购主表id
-			temp.setOrderStatus("待发货");
-			temp.setActualDeliveryDate(select.getBusinessDate());
-			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
-				temp.setDeliverQuantity(select.getTotalQuantity());
+				Order temp = new Order();
+				temp.setId(select.getSrcId());//销售主表id
+				if (ObjectUtil.isNotEmpty(orderStatus.getReceivingStatus()) && "已收货".equals(orderStatus.getReceivingStatus())) {
+					temp.setOrderStatus("已完成");
+				}
+				temp.setPurchaseStatus("已发货");
+				temp.setCreateDeliver(1);
+				temp.setCreateDeliverUser(AuthUtil.getUserId().toString());
+				temp.setCreateDeliverTime(date);
+				temp.setActualDeliveryDate(select.getBusinessDate());
+				if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
+					temp.setDeliverQuantity(select.getTotalQuantity());
+				} else {
+					temp.setDeliverQuantity(BigDecimal.ZERO);
+				}
+				temp.setDeliverTime(date);
+				orderDescClient.updateOrder(temp);
+
+				Order orderTemp = new Order();
+				orderTemp.setId(select.getOrgId());//采购主表id
+				orderTemp.setOrderStatus("待收货");
+				orderTemp.setActualDeliveryDate(select.getBusinessDate());
+				if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
+					orderTemp.setDeliverQuantity(select.getTotalQuantity());
+				} else {
+					orderTemp.setDeliverQuantity(BigDecimal.ZERO);
+				}
+				orderTemp.setDeliverTime(date);
+				orderDescClient.updateOrder(orderTemp);
 			} else {
-				temp.setDeliverQuantity(BigDecimal.ZERO);
-			}
-			temp.setDeliverTime(date);
-			orderDescClient.updateOrder(temp);
+				delivery.setDeliveryStatus("已收货");
+				delivery.setFreightQuantity(select.getTotalQuantity());
+				delivery.setFreightTime(date);
+				delivery.setFreightUser(AuthUtil.getUserName());
+				baseMapper.updateById(delivery);
 
-			Order orderTemp = new Order();
-			orderTemp.setId(select.getSrcId());//销售主表id
-			orderTemp.setOrderStatus("已发货");
-			orderTemp.setActualDeliveryDate(select.getBusinessDate());
-			if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
-				orderTemp.setDeliverQuantity(select.getTotalQuantity());
-			} else {
-				orderTemp.setDeliverQuantity(BigDecimal.ZERO);
+				Order temp = new Order();
+				temp.setId(select.getOrgId());//采购主表id
+				temp.setOrderStatus("待发货");
+				temp.setActualDeliveryDate(select.getBusinessDate());
+				if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
+					temp.setDeliverQuantity(select.getTotalQuantity());
+				} else {
+					temp.setDeliverQuantity(BigDecimal.ZERO);
+				}
+				temp.setDeliverTime(date);
+				orderDescClient.updateOrder(temp);
+
+				Order orderTemp = new Order();
+				orderTemp.setId(select.getSrcId());//销售主表id
+				orderTemp.setOrderStatus("已发货");
+				orderTemp.setActualDeliveryDate(select.getBusinessDate());
+				if (select.getTotalQuantity().compareTo(BigDecimal.ZERO) == 0) {
+					orderTemp.setDeliverQuantity(select.getTotalQuantity());
+				} else {
+					orderTemp.setDeliverQuantity(BigDecimal.ZERO);
+				}
+				orderTemp.setDeliverTime(date);
+				orderDescClient.updateOrder(orderTemp);
 			}
-			orderTemp.setDeliverTime(date);
-			orderDescClient.updateOrder(orderTemp);
+
 		}
 
 		//工厂发货凭证
@@ -943,8 +1120,15 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				throw new SecurityException("此单据已撤回或者不存在,禁止重复操作");
 			}
 		} else {
-			if (select.getDeliveryStatus() == null || !DeliveryStatusEnum.DELIVER.getType().equals(select.getDeliveryStatus())) {
-				throw new SecurityException("此单据已撤回或者不存在,禁止重复操作");
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))) {
+				if (select.getDeliveryStatus() == null || !DeliveryStatusEnum.REVOCATION.getType().equals(select.getDeliveryStatus())) {
+					throw new SecurityException("此单据已撤回或者不存在,禁止重复操作");
+				}
+			} else {
+				if (select.getDeliveryStatus() == null || !DeliveryStatusEnum.DELIVER.getType().equals(select.getDeliveryStatus())) {
+					throw new SecurityException("此单据已撤回或者不存在,禁止重复操作");
+				}
 			}
 		}
 
@@ -977,6 +1161,27 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 						list.add(overpaymentItem);
 					}
 					// ===================撤回益付款逻辑=========================
+				} else {
+					if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+						&& "1".equals(sysClient.getParamService("synchronous"))) {
+						// ===================撤回益付款逻辑=========================
+						if (e.getPurchaseQuantity().compareTo(e.getActualQuantity()) > 0) {
+							BigDecimal number = e.getPurchaseQuantity().subtract(e.getActualQuantity());
+							BigDecimal price = e.getPrice();
+							//需要处理的益付款=(差额数量 * 单价)
+							BigDecimal total = number.multiply(price);
+							//益付款明细
+							BusinessOverpaymentItem overpaymentItem = new BusinessOverpaymentItem();
+							overpaymentItem.setBillNo(select.getSrcOrderNo());
+							overpaymentItem.setSrcOrderNo(select.getSysNo());
+							overpaymentItem.setOrderNo(e.getContractNumber());
+							overpaymentItem.setSrcPid(select.getId());
+							overpaymentItem.setSrcId(e.getId());
+							overpaymentItem.setOverpayment(total);
+							list.add(overpaymentItem);
+						}
+						// ===================撤回益付款逻辑=========================
+					}
 				}
 
 
@@ -1001,9 +1206,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 				if ("JK".equals(delivery.getTradeType())) {
 					model = stockGoodsList.stream().filter(s ->
 						s.getCntrNo().equals(e.getCntrNo())//箱号
-						&& s.getBillNo().equals(e.getBillNo())//提单号
-						&& s.getStorageId().equals(select.getStorageId())//仓库
-						&& s.getContractNumber().equals(e.getContractNumber())//采购订单号
+							&& s.getBillNo().equals(e.getBillNo())//提单号
+							&& s.getStorageId().equals(select.getStorageId())//仓库
+							&& s.getContractNumber().equals(e.getContractNumber())//采购订单号
 					).findFirst().orElse(null);
 				} else if ("CK".equals(delivery.getTradeType())) {
 					model = stockGoodsList.stream().filter(s ->
@@ -1049,6 +1254,27 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 					}
 				}
 				// ===================撤回添加益付款逻辑=========================
+			} else {
+				if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+					&& "1".equals(sysClient.getParamService("synchronous"))) {
+					Long corpId = select.getCorpId();
+					// ===================撤回添加益付款逻辑=========================
+					if (CollectionUtils.isNotEmpty(list)) {
+						BigDecimal itemTotal = list.stream().map(BusinessOverpaymentItem::getOverpayment).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+						//益付款
+						Overpayment overpayment = new Overpayment();
+						overpayment.setCorpId(corpId);
+						overpayment.setType("repealAdd");
+						overpayment.setSrcPid(deliveryId);
+						overpayment.setAmount(itemTotal);
+						overpayment.setList(list);
+						R updateOverpayment = iBusinessOverpaymentClient.updateOverpayment(overpayment);
+						if (!updateOverpayment.isSuccess()) {
+							throw new SecurityException("收货失败:增加客户益付款报错");
+						}
+					}
+					// ===================撤回添加益付款逻辑=========================
+				}
 			}
 		}
 		//更新收货单状态为:录入
@@ -1056,10 +1282,15 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 		Order temp = new Order();//销售订单
 		temp.setId(select.getOrgId());
-		if("681169".equals(AuthUtil.getTenantId())){
+		if ("681169".equals(AuthUtil.getTenantId())) {
 			temp.setOrderStatus("未完成");
-		}else {
-			temp.setOrderStatus("待发货");
+		} else {
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))) {
+				temp.setOrderStatus("未完成");
+			} else {
+				temp.setOrderStatus("待发货");
+			}
 		}
 		temp.setDeliverQuantity(BigDecimal.ZERO);
 		orderDescClient.updateOrder(temp);
@@ -1196,7 +1427,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			sendMessage.setPageStatus(selectOrder.getPageStatus());
 			sendMessage.setToUserId(selectOrder.getCreateUser());
 			sendMessage.setToUserName(selectOrder.getCreateUserName());
-			if (1 == delivery.getDocumentaryStatusType()){
+			if (1 == delivery.getDocumentaryStatusType()) {
 				sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已报关,请查看");
 				selectOrder.setDocumentaryStatus("已报关");
 				selectOrder.setOrderStatus("已报关");
@@ -1228,6 +1459,103 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		return R.data(detail);
 	}
 
+	@Override
+	public R takeDeliveryBatch(String ids) {
+		if (ObjectUtils.isNull(ids)) {
+			throw new RuntimeException("缺少必要参数");
+		}
+		String corpName = null;
+		String corpNumber = null;
+		StringBuilder saleOrderNo = new StringBuilder();
+		//采购订单号
+		StringBuilder purchaseOrderNo = new StringBuilder();
+		BigDecimal deliveryAmount = new BigDecimal("0.00");
+		BigDecimal purchaseTotalAmount = new BigDecimal("0.00");
+		String[] deliveryIds = ids.split(",");
+		List<Delivery> deliveryList = baseMapper.selectBatchIds(Arrays.asList(deliveryIds));
+		List<Long> corpIds = deliveryList.stream().map(Delivery::getCorpId).distinct().collect(Collectors.toList());
+		if (corpIds.size() > 1) {
+			throw new RuntimeException("操作失败,已选数据存在多个客户");
+		}
+		if (corpIds.size() > 0) {
+			//客户信息
+			R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(corpIds.get(0));
+			if (corpMessage.isSuccess() && corpMessage.getData() != null) {
+				corpName = corpMessage.getData().getCname();
+				corpNumber = corpMessage.getData().getCode();
+			}
+		}
+		List<String> belongCompany = deliveryList.stream().map(Delivery::getBelongCompany).distinct().collect(Collectors.toList());
+		if (belongCompany.size() > 1) {
+			throw new RuntimeException("操作失败,已选数据存在多个公司");
+		}
+		for (Delivery delivery : deliveryList) {
+			saleOrderNo.append(delivery.getOrderNo()).append(",");
+			//根据销售订单号,查询采购订单号
+			Order order = new Order();
+			order.setBillType("XS");
+			order.setOrgOrderNo(delivery.getOrderNo());
+			order.setTenantId(AuthUtil.getTenantId());
+			R<List<Order>> listR = orderDescClient.getByCgList(order);
+			if (listR.isSuccess() && CollectionUtils.isNotEmpty(listR.getData())) {
+				purchaseOrderNo.append(listR.getData().get(0).getOrderNo()).append(",");
+				deliveryAmount = deliveryAmount.add(listR.getData().get(0).getDebitAmount());
+			}
+			//计算明细的入库金额(明细的总采购价 和 总销售价)
+			LambdaQueryWrapper<DeliveryItems> deliveryItemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			deliveryItemsLambdaQueryWrapper
+				.eq(DeliveryItems::getPid, delivery.getId())
+				.eq(DeliveryItems::getIsDeleted, 0);
+			List<DeliveryItems> deliveryItems = deliveryItemsMapper.selectList(deliveryItemsLambdaQueryWrapper);
+			BigDecimal pricetotal1 = deliveryItems.stream().map(DeliveryItems::getPurchaseTotalAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+			//明细总采购价
+			purchaseTotalAmount = purchaseTotalAmount.add(CollectionUtils.isEmpty(deliveryItems) ? new BigDecimal("0.00") : pricetotal1);
+		}
+
+		//=============生成凭证所需信息==============
+		String accountName = "暂无";
+		if (belongCompany.size() > 0) {
+			accountName = belongCompany.get(0);
+		}
+		if ("A青岛达沃特轮胎有限公司".equals(accountName)) {
+			accountName = "青岛达沃特轮胎有限公司";
+		}
+		JdTenant jdTenant = getJdTenant(accountName);
+		if (jdTenant != null) {
+			try {
+				int index = saleOrderNo.indexOf(",");
+				String saleOrderNoNew = "";
+				if (index > 0) {
+					saleOrderNoNew = saleOrderNo.substring(0, index);
+					if (deliveryList.size() > 0) {
+						saleOrderNoNew = saleOrderNoNew + "...";
+					}
+				}
+				int index1 = purchaseOrderNo.indexOf(",");
+				String purchaseOrderNoNew = "";
+				if (index1 > 0) {
+					purchaseOrderNoNew = saleOrderNo.substring(0, index1);
+					if (deliveryList.size() > 0) {
+						purchaseOrderNoNew = purchaseOrderNoNew + "...";
+					}
+				}
+				//测试账套-收货生成凭证
+				Delivery delivery = this.testDeliverGoodsSaveVoucher(null, null, accountName, corpName, corpNumber, null, purchaseTotalAmount.toString(),
+					deliveryAmount.toString(), saleOrderNoNew, purchaseOrderNoNew);
+				if (null != delivery) {
+					for (Delivery delivery1 : deliveryList) {
+						delivery1.setVoucherId(delivery.getVoucherId());
+						delivery1.setVoucherNo(delivery.getVoucherNo());
+					}
+					this.updateBatchById(deliveryList);
+				}
+			} catch (Exception exception) {
+				throw new SecurityException(exception.getMessage());
+			}
+		}
+		return R.data("操作成功!");
+	}
+
 
 	public void createProfit(Order order, BigDecimal createProfit) {
 		//检查是否使用返利,如果使用返利
@@ -1277,7 +1605,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 	}
 
 	//发货生成凭证
-	public void testDeliverGoodsSaveVoucher(String brand, Delivery delivery, String accountName, String copsName, String corpNumber, String warehouse, String purchaseTotalAmount, String deliveryAmount, String saleOrderNo, String purchaseOrder) throws Exception {
+	public Delivery testDeliverGoodsSaveVoucher(String brand, Delivery delivery, String accountName, String copsName, String corpNumber, String warehouse, String purchaseTotalAmount, String deliveryAmount, String saleOrderNo, String purchaseOrder) throws Exception {
 		// TODO 临时屏蔽
 //		if (!"test".equals(AuthUtil.getTenantId())) {
 //			return;
@@ -1285,7 +1613,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 		//非达沃特用户直接返回
 		if (!"681169".equals(AuthUtil.getTenantId())) {
-			return;
+			return null;
 		}
 		//获取token
 		String token = this.getAccountGroupRequest();
@@ -1319,16 +1647,20 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		JdTenant jdTenant = jdTenantMapper.selectOne(jdTenantLambdaQueryWrapper);
 		if (jdTenant == null) {
 
-			return;
+			return null;
 		}
 
 		//2.收货,组装model,保存凭证
-		JdyTool.voucher voucher = toDeliverJinDie(brand, delivery.getBusinessDate(), saleOrderNo, purchaseOrder, purchaseTotalAmount, deliveryAmount, copsName, corpNumber, warehouse, jdTenant.getAccountId(), group.getGroupName(), jdTenant);
+		if (null == delivery) {
+			delivery = new Delivery();
+		}
+		JdyTool.voucher voucher = toDeliverJinDie(brand, ObjectUtils.isNotNull(delivery.getBusinessDate()) ? delivery.getBusinessDate() : new Date(), saleOrderNo, purchaseOrder, purchaseTotalAmount, deliveryAmount, copsName, corpNumber, warehouse, jdTenant.getAccountId(), group.getGroupName(), jdTenant);
 		if (voucher == null) {
 			throw new SecurityException("获取凭证信息失败");
 		}
 		delivery.setVoucherId(voucher.getId());
 		delivery.setVoucherId(voucher.getVoucherno());
+		return delivery;
 	}
 
 	//收货生成凭证
@@ -1383,6 +1715,10 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 	public JdyTool.voucher toDeliverJinDie(String brand, Date date, String saleOrderNo, String purchaseOrder, String purchaseTotalAmount, String deliveryAmount, String copsName, String corpNumber, String warehouse, String accountId, String groupName, JdTenant jdTenant) {
 
+
+		BigDecimal amount = new BigDecimal(deliveryAmount);
+		BigDecimal costAmount = amount.divide(new BigDecimal("1.13"), MathContext.DECIMAL32).multiply(new BigDecimal("0.13"));
+		BigDecimal amount2 = amount.subtract(costAmount);
 		List<JDYitems> jdYitems = new ArrayList<>();
 		//凭证1
 		JDYitems item1 = new JDYitems();
@@ -1390,7 +1726,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		item1.setDate(new SimpleDateFormat("yyyy-MM-dd").format(date));
 		item2.setDate(new SimpleDateFormat("yyyy-MM-dd").format(date));
 		List<JDYentries> entriesList1 = new ArrayList<>();
-		List<JDYentries> entriesList2 = new ArrayList<>();
+//		List<JDYentries> entriesList2 = new ArrayList<>();
 		List<JDYentries> entriesList3 = new ArrayList<>();
 
 
@@ -1460,17 +1796,38 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 		c.setExplanation(saleOrderNo + "-" + cModule.getAbstractStatic());
 		c.setAccount_number(cModule.getProjectCode());
-		c.setCreditamount(deliveryAmount);
+//		c.setCreditamount(deliveryAmount);
+		c.setCreditamount(amount2.toString());
 		entriesList1.add(c);
 		item1.setEntries(entriesList1);
 
+		//财务贷方凭证3
+		JDYentries e = new JDYentries();
+		e.setDc("-1");
+
+		LambdaQueryWrapper<JdModule> eLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		eLambdaQueryWrapper
+			.eq(JdModule::getAccountId, accountId)
+			.eq(JdModule::getModule, "主发货")
+			.eq(JdModule::getDc, "-2")
+			.last("limit 1")
+			.eq(JdModule::getTenantId, AuthUtil.getTenantId());
+		JdModule eModule = moduleMapper.selectOne(eLambdaQueryWrapper);
+		if (eModule == null) {
+			throw new SecurityException("获取销售订单科目号失败");
+		}
 
+		e.setExplanation(saleOrderNo + "-" + eModule.getAbstractStatic());
+		e.setAccount_number(eModule.getProjectCode());
+		e.setCreditamount(costAmount.toString());
+		entriesList1.add(e);
+		item1.setEntries(entriesList1);
 		// ======================第一个凭证====================
 
 
 		// ======================第二个凭证====================
 		//财务借方凭证2
-		JDYentries d2 = new JDYentries();
+		/*JDYentries d2 = new JDYentries();
 		d2.setDc("1");
 
 		LambdaQueryWrapper<JdModule> dLambdaQueryWrapper2 = new LambdaQueryWrapper<>();
@@ -1533,9 +1890,9 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 
 		cList2.add(jdYassist2);
 		c2.setAssist(cList2);
-		entriesList2.add(c2);
+		entriesList2.add(c2);*/
 		entriesList3.addAll(entriesList1);
-		entriesList3.addAll(entriesList2);
+//		entriesList3.addAll(entriesList2);
 		item1.setEntries(entriesList3);
 		// ===========辅助核算=================
 		/*jdYitems.add(item2);*/
@@ -1686,7 +2043,7 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 			throw new SecurityException("当前租户未配置凭证信息");
 		}
 
-		/*ApigwConfig config = new ApigwConfig();
+		ApigwConfig config = new ApigwConfig();
 		//设置client_id  245905
 		String client_id = "245905";
 		config.setClientID(client_id);
@@ -1711,21 +2068,20 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		//获得token
 		ApiRequest request = new ApiRequest(HttpMethod.GET, "api.kingdee.com", "/jdyconnector/app_management/kingdee_auth_token");
 
-		String key = token2DTO.getData().get(0).appKey;
-		String secret = token2DTO.getData().get(0).appSecret;
+		String key = token2DTO.getData().get(0).getAppKey();
+		String secret = token2DTO.getData().get(0).getAppSecret();
 
 		String s = MD5Util.hashMAC(key, secret);
 		Map<String, String> querys = new LinkedHashMap<>();
 		querys.put("app_key", key);
-		querys.put("app_signature",s);
+		querys.put("app_signature", s);
 		request.setQuerys(querys);
 		ApiResult results = ApigwClient.getInstance().send(request);
-     	System.out.println("金蝶返回数据======》"+results.getBody());
+		System.out.println("金蝶返回数据======》" + results.getBody());
 		JSONObject jsonObject = JSONObject.parseObject(results.getBody());
-		System.out.println("app-token======>"+jsonObject.getJSONObject("data").getString("app-token"));*/
-
+		System.out.println("app-token======>" + jsonObject.getJSONObject("data").getString("app-token"));
 
-		//获取测试账套token的url
+		/*//获取测试账套token的url
 		String getTokenUrl = "https://api.kingdee.com/auth/user/access_token?client_id=" + jdTenant.getClientId() +
 			"&client_secret=" + jdTenant.getClientSecret() +
 			"&username=" + jdTenant.getUsername() +
@@ -1737,7 +2093,8 @@ public class DeliveryServiceImpl extends ServiceImpl<DeliveryMapper, Delivery> i
 		if (tokenDTO.errcode == 1006) {
 			throw new SecurityException("当前密码错误次数超过限定值,请稍后再试");
 		}
-		return tokenDTO.getData().getAccess_token();
+		return tokenDTO.getData().getAccess_token();*/
+		return jsonObject.getJSONObject("data").getString("app-token");
 	}
 
 	public String doGet(String url, Map<String, String> urlParams)

+ 1 - 1
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java

@@ -514,11 +514,11 @@ public class PaymentServiceImpl implements IPaymentService {
 
 												r.getData().setInQuantity(r.getData().getInQuantity().add(orderItems.getStorageInQuantity()));
 												r.getData().setInAmount(r.getData().getInAmount().add(orderItems.getAmount()));
+												r.getData().setStockPrice(stockPrice);
 											}
 											r.getData().setSurplusRouteQuantity(surplusRouteQuantity);
 											r.getData().setBalanceQuantity(balanceQuantity);
 											r.getData().setBalanceAmount(balanceAmount);
-											r.getData().setStockPrice(stockPrice);
 											r.getData().setTenantId(order.getTenantId());
 											list.add(r.getData());
 											/*boolean a = stockGoodsClient.updateStockYCP(r.getData());

+ 31 - 6
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java

@@ -32,6 +32,7 @@ import org.springblade.purchase.sales.vo.OrderStatisticsVo;
 import org.springblade.stock.feign.IStockGoodsClient;
 import org.springblade.stock.vo.StockGoodsVO;
 import org.springblade.system.feign.IDictBizClient;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.web.bind.annotation.*;
 import springfox.documentation.annotations.ApiIgnore;
 
@@ -64,6 +65,8 @@ public class OrderDescClient implements IOrderDescClient {
 
 	private final ITongLianPaymentClient tongLianPaymentClient;//支付
 
+	private final ISysClient sysClient;
+
 	@Override
 	@PostMapping(UPDATE_ORDER)
 	public R updateOrder(Order order) {
@@ -90,16 +93,38 @@ public class OrderDescClient implements IOrderDescClient {
 			}
 			iOrderService.updateById(order);
 		} else {
-			if (ObjectUtil.isNotEmpty(order.getStatus())) {
-				R<String> dictKey = dictBizClient.getOneByValue("to_examine", "是否启用", AuthUtil.getTenantId());
-				if ((dictKey.isSuccess() && "1".equals(dictKey.getData())) || 6 == order.getStatus()) {
-					iOrderService.collectHairGoods(order);
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))){
+				if (ObjectUtil.isNotEmpty(order.getDeliverQuantity())) {
+					if (order.getDeliverQuantity().compareTo(BigDecimal.ZERO) == 0) {
+						iOrderService.update(null, new LambdaUpdateWrapper<Order>()
+							.set(Order::getDeliverTime, null)
+							.eq(Order::getId, order.getId())
+						);
+					}
+				}
+				if (ObjectUtil.isNotEmpty(order.getReceiveQuantity())) {
+					if (order.getReceiveQuantity().compareTo(BigDecimal.ZERO) == 0) {
+						iOrderService.update(null, new LambdaUpdateWrapper<Order>()
+							.set(Order::getReceiveTime, null)
+							.eq(Order::getId, order.getId())
+						);
+					}
+				}
+				iOrderService.updateById(order);
+			}else{
+				if (ObjectUtil.isNotEmpty(order.getStatus())) {
+					R<String> dictKey = dictBizClient.getOneByValue("to_examine", "是否启用", AuthUtil.getTenantId());
+					if ((dictKey.isSuccess() && "1".equals(dictKey.getData())) || 6 == order.getStatus()) {
+						iOrderService.collectHairGoods(order);
+					} else {
+						iOrderService.updateById(order);
+					}
 				} else {
 					iOrderService.updateById(order);
 				}
-			} else {
-				iOrderService.updateById(order);
 			}
+
 		}
 		return R.success("操作成功");
 	}

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

@@ -21,6 +21,7 @@
         <result column="objective_harbor_fee" property="objectiveHarborFee"/>
         <result column="status" property="status"/>
         <result column="remark" property="remark"/>
+        <result column="ranking" property="ranking"/>
     </resultMap>
 
 
@@ -31,6 +32,6 @@
     <select id="selectPcList" resultMap="bidingItemsResultMap">
         select * from business_biding_items where is_deleted = 0 and pid = #{biding.id}
         and distinguish = #{biding.distinguish}
-        order by corps_attn_id desc
+        order by ranking desc
     </select>
 </mapper>

+ 85 - 57
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/BidingItemsServiceImpl.java

@@ -1,6 +1,7 @@
 package org.springblade.purchase.sales.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.seata.common.util.CollectionUtils;
 import lombok.AllArgsConstructor;
@@ -26,9 +27,10 @@ import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
-import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 标书明细表 服务实现类
@@ -51,100 +53,124 @@ public class BidingItemsServiceImpl extends ServiceImpl<BidingItemsMapper, Bidin
 	/**
 	 * 保存订单明细信息
 	 *
-	 * @param list 订单明细
-	 * @param pid  订单主表id
+	 * @param list        订单明细
+	 * @param pid         订单主表id
 	 * @param distinguish 区分标识
 	 * @return
 	 */
 	@Override
-	public List<BidingItems> saveBidingItemsMessage(List<BidingItems> list, Long pid, Integer distinguish){
+	public List<BidingItems> saveBidingItemsMessage(List<BidingItems> list, Long pid, Integer distinguish) {
 		//获得当前用户信息
 		CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
-		if (ObjectUtil.isNotEmpty(corpsAttn)){
-			if (ObjectUtil.isEmpty(corpsAttn) || ObjectUtil.isEmpty(corpsAttn.getPid())){
+		if (ObjectUtil.isNotEmpty(corpsAttn)) {
+			if (ObjectUtil.isEmpty(corpsAttn) || ObjectUtil.isEmpty(corpsAttn.getPid())) {
 				throw new SecurityException("用户信息异常");
 			}
 
 			//获得代理信息
 			LambdaQueryWrapper<BidingAgent> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 			lambdaQueryWrapper.eq(BidingAgent::getTenantId, AuthUtil.getTenantId());
-			lambdaQueryWrapper.eq(BidingAgent::getIsDeleted,0);
+			lambdaQueryWrapper.eq(BidingAgent::getIsDeleted, 0);
 			lambdaQueryWrapper.eq(BidingAgent::getPid, pid);
 			lambdaQueryWrapper.in(BidingAgent::getAgentId, corpsAttn.getPid());
 			BidingAgent bidingAgent = bidingAgentMapper.selectOne(lambdaQueryWrapper);
 
-			if (ObjectUtil.isNotEmpty(bidingAgent)){
-				if (bidingAgent.getNonEditable() == null){//为空代表第一次添加标书对比
+			if (ObjectUtil.isNotEmpty(bidingAgent)) {
+				//为空代表第一次添加标书对比
+				if (bidingAgent.getNonEditable() == null) {
 					bidingAgent.setNonEditable(0);
-				} else if (bidingAgent.getNonEditable() == 0){//为零代表已经添加标书 此次为修改
+				} else if (bidingAgent.getNonEditable() == 0) {
+					//为零代表已经添加标书 此次为修改
 					bidingAgent.setNonEditable(1);
-				} else if (bidingAgent.getNonEditable() == 1){//为一代表已经修改过一次 不允许再修改
+				} else if (bidingAgent.getNonEditable() == 1) {
+					//为一代表已经修改过一次 不允许再修改
 					throw new SecurityException("投标信息只允许修改一次");
 				}
 			}
 
-			if (ObjectUtil.isNotEmpty(bidingAgent)){
+			if (ObjectUtil.isNotEmpty(bidingAgent)) {
 				//更新代理明细信息
 				bidingAgent.setStatus(5);
 				bidingAgentMapper.updateById(bidingAgent);
 			}
 		}
-
-		list.forEach(item -> {
-			if (item.getId() == null){//id为空 新增
-				item.setTenantId(SecureUtil.getTenantId());
-				item.setCreateUser(SecureUtil.getUserId());
-				item.setCreateTime(new Date());
-				item.setDistinguish(distinguish);
-				if (distinguish == 1){
-					item.setStatus(5);
-					if (ObjectUtil.isNotEmpty(corpsAttn)){
-						item.setCorpsAttnId(corpsAttn.getPid());
+		if (ObjectUtils.isNull(list) || list.size() == 0) {
+			return list;
+		}
+		List<BidingItems> sortedList = list.stream()
+			.sorted(Comparator.comparing(BidingItems::getSeaFreight).reversed())
+			.collect(Collectors.toList());
+		int sort = 1;
+		List<BidingItems> list1 = new ArrayList<>();
+		for (int i = 0; i < sortedList.size(); i++) {
+			if (i > 0) {
+				if (sortedList.get(i).getSeaFreight().equals(sortedList.get(i - 1).getSeaFreight())) {
+					sortedList.get(i).setRanking(sort);
+				} else {
+					sort++;
+					sortedList.get(i).setRanking(sort);
+				}
+			} else {
+				sortedList.get(i).setRanking(sort);
+				sort++;
+			}
+			//id为空 新增
+			if (sortedList.get(i).getId() == null) {
+				sortedList.get(i).setTenantId(SecureUtil.getTenantId());
+				sortedList.get(i).setCreateUser(SecureUtil.getUserId());
+				sortedList.get(i).setCreateTime(new Date());
+				sortedList.get(i).setDistinguish(distinguish);
+				if (distinguish == 1) {
+					sortedList.get(i).setStatus(5);
+					if (ObjectUtil.isNotEmpty(corpsAttn)) {
+						sortedList.get(i).setCorpsAttnId(corpsAttn.getPid());
 					}
 				}
-				item.setPid(pid);
-				baseMapper.insert(item);
-			}else {//不为空 修改
-				item.setTenantId(SecureUtil.getTenantId());
-				item.setUpdateUser(SecureUtil.getUserId());
-				item.setUpdateTime(new Date());
-				item.setDistinguish(distinguish);
-				item.setPid(pid);
-				baseMapper.updateById(item);
+				sortedList.get(i).setPid(pid);
+			} else {
+				//不为空 修改
+				sortedList.get(i).setTenantId(SecureUtil.getTenantId());
+				sortedList.get(i).setUpdateUser(SecureUtil.getUserId());
+				sortedList.get(i).setUpdateTime(new Date());
+				sortedList.get(i).setDistinguish(distinguish);
+				sortedList.get(i).setPid(pid);
 			}
-		});
-
-		return list;
+			list1.add(sortedList.get(i));
+		}
+		this.saveOrUpdateBatch(list1);
+		return list1;
 	}
 
 	/**
 	 * 获得订单明细信息
+	 *
 	 * @param biding
 	 * @param distinguish 区分标识
 	 * @return
 	 */
 	@Override
-	public List<BidingItems> getBidingItems(Biding biding, Integer distinguish, String appOrPc){
+	public List<BidingItems> getBidingItems(Biding biding, Integer distinguish, String appOrPc) {
 
 		List<BidingItems> list = new ArrayList<>();
 
-		if ("app".equals(appOrPc)){
+		if ("app".equals(appOrPc)) {
 			list = baseMapper.selectList(new LambdaQueryWrapper<BidingItems>()
 				.eq(BidingItems::getPid, biding.getId())
 				.eq(BidingItems::getDistinguish, distinguish)
 				.eq(BidingItems::getIsDeleted, 0)
-				.eq(BidingItems::getTenantId, AuthUtil.getTenantId()));
-		}else if ("pc".equals(appOrPc)){
+				.eq(BidingItems::getTenantId, AuthUtil.getTenantId())
+				.orderByDesc(BidingItems::getRanking));
+		} else if ("pc".equals(appOrPc)) {
 			biding.setDistinguish(distinguish);
 			list = baseMapper.selectPcList(biding);
 		}
 
-		if (distinguish.equals(1)){
-			if (ObjectUtil.isNotEmpty(list)){
+		if (distinguish.equals(1)) {
+			if (ObjectUtil.isNotEmpty(list)) {
 				list.forEach(e -> {
-					if (ObjectUtil.isNotEmpty(e.getCorpsAttnId())){
+					if (ObjectUtil.isNotEmpty(e.getCorpsAttnId())) {
 						R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(e.getCorpsAttnId());
-						if (corpMessage.isSuccess() && corpMessage.getData() != null){
+						if (corpMessage.isSuccess() && corpMessage.getData() != null) {
 							e.setContrastName(corpMessage.getData().getCname());
 						}
 					}
@@ -157,13 +183,14 @@ public class BidingItemsServiceImpl extends ServiceImpl<BidingItemsMapper, Bidin
 
 	/**
 	 * 删除订单明细
+	 *
 	 * @param bidingItems
 	 */
 	@Override
-	public void updateItems(BidingItems bidingItems){
+	public void updateItems(BidingItems bidingItems) {
 		BidingItems items = baseMapper.selectById(bidingItems.getId());
 		//明细不存在
-		if (items == null){
+		if (items == null) {
 			throw new SecurityException("数据异常");
 		}
 
@@ -180,14 +207,14 @@ public class BidingItemsServiceImpl extends ServiceImpl<BidingItemsMapper, Bidin
 		StringBuilder boxTypeQuantity = new StringBuilder();
 		Biding biding = new Biding();
 		biding.setId(items.getId());
-		if (CollectionUtils.isNotEmpty(list)){
+		if (CollectionUtils.isNotEmpty(list)) {
 			list.forEach(e -> {
-				if (StringUtil.isNotBlank(e.getBoxType())){
+				if (StringUtil.isNotBlank(e.getBoxType())) {
 					boxTypeQuantity.append(e.getBoxType()).append("*").append(e.getBoxAmount()).append(",");
 				}
 			});
 			biding.setBoxTypeQuantity(boxTypeQuantity.toString().substring(0, boxTypeQuantity.toString().length() - 1));
-		}else {
+		} else {
 			biding.setBoxTypeQuantity("");
 		}
 
@@ -204,9 +231,9 @@ public class BidingItemsServiceImpl extends ServiceImpl<BidingItemsMapper, Bidin
 	 * 确认中标
 	 */
 	@Override
-	public void winningTheBid(BidingItems bidingItems){
+	public void winningTheBid(BidingItems bidingItems) {
 		BidingItems items = baseMapper.selectById(bidingItems.getId());
-		if (items == null){
+		if (items == null) {
 			throw new SecurityException("数据异常");
 		}
 
@@ -215,10 +242,11 @@ public class BidingItemsServiceImpl extends ServiceImpl<BidingItemsMapper, Bidin
 		bidingLambdaQueryWrapper.eq(Biding::getIsDeleted, 0);
 		Biding biding = bidingMapper.selectOne(bidingLambdaQueryWrapper);
 
-		if(ObjectUtil.isEmpty(biding)){
+		if (ObjectUtil.isEmpty(biding)) {
 			throw new SecurityException("单据数据异常");
 		}
-
+		biding.setStatus(8);
+		bidingMapper.updateById(biding);
 		//起运港
 		String departureHarbor = biding.getDepartureHarbor();
 		//目的港
@@ -231,12 +259,12 @@ public class BidingItemsServiceImpl extends ServiceImpl<BidingItemsMapper, Bidin
 		//获得代理信息
 		LambdaQueryWrapper<BidingAgent> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(BidingAgent::getTenantId, AuthUtil.getTenantId());
-		lambdaQueryWrapper.eq(BidingAgent::getIsDeleted,0);
+		lambdaQueryWrapper.eq(BidingAgent::getIsDeleted, 0);
 		lambdaQueryWrapper.eq(BidingAgent::getPid, items.getPid());
 		lambdaQueryWrapper.in(BidingAgent::getAgentId, items.getCorpsAttnId());
 		BidingAgent bidingAgent = bidingAgentMapper.selectOne(lambdaQueryWrapper);
 
-		if (ObjectUtil.isNotEmpty(bidingAgent)){
+		if (ObjectUtil.isNotEmpty(bidingAgent)) {
 			//根据代理客户的客户联系人进行消息推送
 			//获得所有代理客户
 			CorpsDesc corpsDesc = corpsDescClient.getCorpId(items.getCorpsAttnId());
@@ -245,9 +273,9 @@ public class BidingItemsServiceImpl extends ServiceImpl<BidingItemsMapper, Bidin
 			attnList.forEach(corpsAttn -> {
 				//获得用户信息
 				R<User> user = userClient.userInfoById(corpsAttn.getUserId());
-				if (ObjectUtil.isNotEmpty(user.getData())){
-					if (ObjectUtil.isNotEmpty(user.getData().getOaOpenId())){
-						wechatClient.bidWinningPush(user.getData().getOaOpenId(),biding.getContractNo(), departureHarbor, objectiveHarbor, boxTypeQuantity, offer);
+				if (ObjectUtil.isNotEmpty(user.getData())) {
+					if (ObjectUtil.isNotEmpty(user.getData().getOaOpenId())) {
+						wechatClient.bidWinningPush(user.getData().getOaOpenId(), biding.getContractNo(), departureHarbor, objectiveHarbor, boxTypeQuantity, offer);
 					}
 				}
 			});

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

@@ -519,7 +519,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 				BigDecimal grossProfitRate = new BigDecimal(BigInteger.ZERO);
 				if (amount.compareTo(BigDecimal.ZERO) > 0) {
-					grossProfitRate = (grossProfit.divide(amount, RoundingMode.CEILING));
+					grossProfitRate = (grossProfit.divide(amount, RoundingMode.CEILING)).multiply(new BigDecimal(100));
 				}
 				//产生返利
 				orderMessage.setCreateProfit(order.getCreateProfit());
@@ -3108,7 +3108,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					order.setConfirmStatus(1);
 					order.setDebitAmount(order.getOrderAmount());
 					order.setBalanceAmount(order.getOrderAmount());
-					order.setPurchaseAmount(order.getOrderAmount());
+//					order.setPurchaseAmount(order.getOrderAmount());
 					order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
 					baseMapper.updateById(order);
 					// 保存订单文件信息
@@ -3337,7 +3337,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					this.paymentApply(order, order.getBillType(), order.getTradeType());
 					order.setDebitAmount(order.getOrderAmount());
 					order.setBalanceAmount(order.getOrderAmount());
-					order.setPurchaseAmount(order.getOrderAmount());
+//					order.setPurchaseAmount(order.getOrderAmount());
 
 					order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
 					baseMapper.updateById(order);
@@ -3546,7 +3546,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				this.paymentApply(order, order.getBillType(), order.getTradeType());
 				order.setDebitAmount(order.getOrderAmount());
 				order.setBalanceAmount(order.getOrderAmount());
-				order.setPurchaseAmount(order.getOrderAmount());
+//				order.setPurchaseAmount(order.getOrderAmount());
 
 				order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
 				baseMapper.updateById(order);
@@ -3764,7 +3764,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					order.setConfirmStatus(1);
 					order.setDebitAmount(order.getOrderAmount());
 					order.setBalanceAmount(order.getOrderAmount());
-					order.setPurchaseAmount(order.getOrderAmount());
+//					order.setPurchaseAmount(order.getOrderAmount());
 
 					order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
 					baseMapper.updateById(order);
@@ -3997,7 +3997,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					this.paymentApply(order, order.getBillType(), order.getTradeType());
 					order.setDebitAmount(order.getOrderAmount());
 					order.setBalanceAmount(order.getOrderAmount());
-					order.setPurchaseAmount(order.getOrderAmount());
+//					order.setPurchaseAmount(order.getOrderAmount());
 
 					order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
 					baseMapper.updateById(order);
@@ -4168,7 +4168,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					this.paymentApply(order, order.getBillType(), order.getTradeType());
 					order.setDebitAmount(order.getOrderAmount());
 					order.setBalanceAmount(order.getOrderAmount());
-					order.setPurchaseAmount(order.getOrderAmount());
+//					order.setPurchaseAmount(order.getOrderAmount());
 					order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
 					baseMapper.updateById(order);
 					if ("234557".equals(AuthUtil.getTenantId())) {
@@ -4390,7 +4390,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					this.paymentApply(order, order.getBillType(), order.getTradeType());
 					order.setDebitAmount(order.getOrderAmount());
 					order.setBalanceAmount(order.getOrderAmount());
-					order.setPurchaseAmount(order.getOrderAmount());
+//					order.setPurchaseAmount(order.getOrderAmount());
 					order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
 					baseMapper.updateById(order);
 
@@ -6564,7 +6564,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		this.paymentApply(order, order.getBillType(), order.getTradeType());
 		order.setDebitAmount(order.getOrderAmount());
 		order.setBalanceAmount(order.getOrderAmount());
-		order.setPurchaseAmount(order.getOrderAmount());
+//		order.setPurchaseAmount(order.getOrderAmount());
 
 		order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
 		baseMapper.updateById(order);
@@ -6799,7 +6799,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		this.paymentApply(order, order.getBillType(), order.getTradeType());
 		order.setDebitAmount(order.getOrderAmount());
 		order.setBalanceAmount(order.getOrderAmount());
-		order.setPurchaseAmount(order.getOrderAmount());
+//		order.setPurchaseAmount(order.getOrderAmount());
 		baseMapper.updateById(order);
 		return order;
 	}

+ 10 - 1
blade-service/blade-stock/src/main/java/org/springblade/stock/feign/StockGoodsClient.java

@@ -3,6 +3,7 @@ package org.springblade.stock.feign;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -23,6 +24,7 @@ import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.stock.entity.StockGoods;
 import org.springblade.stock.service.IStockGoodsService;
 import org.springblade.stock.vo.StockGoodsVO;
+import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.transaction.annotation.Transactional;
@@ -54,6 +56,8 @@ public class StockGoodsClient implements IStockGoodsClient {
 	//redis缓存处理
 	private final IRedisClient redisClient;
 
+	private final ISysClient sysClient;
+
 	@Override
 	@GetMapping("stockgoods/stocklist")
 	public List<StockGoods> list(String code, String cname, String brandItem, String placeProduction, String typeno, String typenoOne, String typenoTwo, String stockName,
@@ -339,7 +343,12 @@ public class StockGoodsClient implements IStockGoodsClient {
 			if(ObjectUtil.isNotEmpty(stockGoods.getTenantId()) && stockGoods.getTenantId().equals("681169")){
 				stockGoodsLambdaQueryWrapper.eq(StockGoods::getTenantId, stockGoods.getTenantId());
 			}else {
-				stockGoodsLambdaQueryWrapper.eq(StockGoods::getTenantId, AuthUtil.getTenantId());
+				if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+					&& "1".equals(sysClient.getParamService("synchronous"))) {
+					stockGoodsLambdaQueryWrapper.eq(StockGoods::getTenantId, stockGoods.getTenantId());
+				}else{
+					stockGoodsLambdaQueryWrapper.eq(StockGoods::getTenantId, AuthUtil.getTenantId());
+				}
 			}
 
 		List<StockGoods> goodsList = stockGoodsService.list(stockGoodsLambdaQueryWrapper);

+ 15 - 1
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/AccController.java

@@ -52,6 +52,7 @@ import org.springblade.finance.vojo.ExportAccDWTOut;
 import org.springblade.finance.vojo.ExportAccOut;
 import org.springblade.purchase.sales.vo.SalesDetailsVo;
 import org.springblade.system.entity.Tenant;
+import org.springblade.system.feign.ISysClient;
 import org.springblade.system.feign.ITenantClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
@@ -92,6 +93,8 @@ public class AccController extends BladeController {
 	//租户
 	private final ITenantClient iTenantClient;
 
+	private final ISysClient sysClient;
+
 	/**
 	 * 财务账单添加
 	 */
@@ -827,6 +830,12 @@ public class AccController extends BladeController {
 				if ("申请".equals(e.getBillType())) {
 					e.setBillType("付费");
 				}
+			} else {
+				if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+					&& "1".equals(sysClient.getParamService("synchronous"))
+					&& "申请".equals(e.getBillType())) {
+					e.setBillType("付费");
+				}
 			}
 			//录入人
 			e.setCreateUserName(iUserClient.userInfoById(e.getCreateUser()).getData().getRealName());
@@ -860,7 +869,12 @@ public class AccController extends BladeController {
 		if ("681169".equals(AuthUtil.getTenantId())) {
 			ExcelUtil.export(response, "导出账单信息", "导出数据表", BeanUtil.copy(accList, ExportAccDWTOut.class), ExportAccDWTOut.class);
 		} else {
-			ExcelUtil.export(response, "导出账单信息", "导出数据表", BeanUtil.copy(accList, ExportAccOut.class), ExportAccOut.class);
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))){
+				ExcelUtil.export(response, "导出账单信息", "导出数据表", BeanUtil.copy(accList, ExportAccDWTOut.class), ExportAccDWTOut.class);
+			}else{
+				ExcelUtil.export(response, "导出账单信息", "导出数据表", BeanUtil.copy(accList, ExportAccOut.class), ExportAccOut.class);
+			}
 		}
 
 	}

+ 92 - 8
blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

@@ -24,6 +24,11 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.smecloud.apigw.client.ApigwClient;
+import com.smecloud.apigw.constant.HttpMethod;
+import com.smecloud.apigw.model.ApiRequest;
+import com.smecloud.apigw.model.ApiResult;
+import com.smecloud.apigw.model.ApigwConfig;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
@@ -49,9 +54,13 @@ import org.springblade.client.entity.Message;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IMessageClient;
 import org.springblade.client.feign.ISerialClient;
+import org.springblade.common.config.MD5Util;
+import org.springblade.common.dto.token2DTO;
+import org.springblade.core.excel.util.ExcelUtil;
 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.BeanUtil;
 import org.springblade.core.tool.utils.CollectionUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.deliver.goods.entity.DeliveryFees;
@@ -189,6 +198,11 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		}
 		if ("结算完成".equals(settlement.getFinanceStatus()) && "681169".equals(AuthUtil.getTenantId())) {
 			throw new SecurityException("此结算单已生成凭证,禁止撤销");
+		}else{
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))){
+				throw new SecurityException("此结算单已生成凭证,禁止撤销");
+			}
 		}
 
 		//国内财务需要判断溢付款
@@ -220,6 +234,37 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 					throw new SecurityException(overpayment.getMsg());
 				}
 			}
+		}else{
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))){
+				//收费明细的核销金额
+				BigDecimal reduce = new BigDecimal(BigInteger.ZERO);
+				if (CollectionUtils.isNotEmpty(itemsList)) {
+					reduce = itemsList.stream().map(Items::getThisAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				}
+				//如果人民币金额大于核销金额明细 撤销生成的溢付款  撤销使用的溢付款
+				if (settlement.getAmount().compareTo(reduce) > 0) {
+					if (settlement.getCaseOverPayment() != null && settlement.getCaseOverPayment().compareTo(BigDecimal.ZERO) > 0) {
+						throw new SecurityException("此结算单人民币金额足够,不能使用溢付款");
+					}
+					R overpayment = this.updateOverpayment(settlement, SettlementEnum.REPEALADD.getStatus(), settlement.getAmount().subtract(reduce));
+					if (!overpayment.isSuccess()) {
+						throw new SecurityException(overpayment.getMsg());
+					}
+				} else if (settlement.getAmount().compareTo(reduce) == 0) {
+					if (settlement.getCaseOverPayment() != null && settlement.getCaseOverPayment().compareTo(BigDecimal.ZERO) > 0) {
+						throw new SecurityException("此结算单人民币金额足够,不能使用溢付款");
+					}
+				} else {
+					if ((settlement.getAmount().add(settlement.getCaseOverPayment())).compareTo(reduce) != 0) {
+						throw new SecurityException("此结算单人民币金额加溢付款金额不能超过或少于结算单核销金额和");
+					}
+					R overpayment = this.updateOverpayment(settlement, SettlementEnum.REPEALREDUCE.getStatus(), settlement.getCaseOverPayment());
+					if (!overpayment.isSuccess()) {
+						throw new SecurityException(overpayment.getMsg());
+					}
+				}
+			}
 		}
 		Settlement model = new Settlement();
 		BeanUtils.copyProperties(settlementDTO, model);
@@ -327,6 +372,41 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 					throw new SecurityException(overpayment.getMsg());
 				}
 			}
+		}else{
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))){
+				//收费明细的核销金额
+				BigDecimal reduce = new BigDecimal(BigInteger.ZERO);
+				if (CollectionUtils.isNotEmpty(itemsList)) {
+					reduce = itemsList.stream().map(Items::getThisAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
+				}
+
+				if (ObjectUtil.isEmpty(settlement.getAmount())) {
+					settlement.setAmount(BigDecimal.ZERO);
+				}
+				//如果人民币金额大于核销金额明细生成溢付款  小于使用溢付款
+				if (settlement.getAmount().compareTo(reduce) > 0) {
+					if (settlement.getCaseOverPayment() != null && settlement.getCaseOverPayment().compareTo(BigDecimal.ZERO) > 0) {
+						throw new SecurityException("此结算单人民币金额足够,不能使用溢付款");
+					}
+					R overpayment = this.updateOverpayment(settlement, SettlementEnum.ADD.getStatus(), settlement.getAmount().subtract(reduce));
+					if (!overpayment.isSuccess()) {
+						throw new SecurityException(overpayment.getMsg());
+					}
+				} else if (settlement.getAmount().compareTo(reduce) == 0) {
+					if (settlement.getCaseOverPayment() != null && settlement.getCaseOverPayment().compareTo(BigDecimal.ZERO) > 0) {
+						throw new SecurityException("此结算单人民币金额足够,不能使用溢付款");
+					}
+				} else {
+					if ((settlement.getAmount().add(settlement.getCaseOverPayment())).compareTo(reduce) != 0) {
+						throw new SecurityException("此结算单人民币金额加溢付款金额不能超过或少于结算单核销金额和");
+					}
+					R overpayment = this.updateOverpayment(settlement, SettlementEnum.REDUCE.getStatus(), settlement.getCaseOverPayment());
+					if (!overpayment.isSuccess()) {
+						throw new SecurityException(overpayment.getMsg());
+					}
+				}
+			}
 		}
 		if (id == null) {
 
@@ -1449,8 +1529,11 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		model.setForeignAmount(foreignTotal);
 		// todo 暂定用租户判断 国内贸易 收费 人民币金额 可以手输
 		if (!"681169".equals(SecureUtil.getTenantId())) {
-			if (!"234557".equals(SecureUtil.getTenantId())) {
-				model.setAmount(total);
+			if (!ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& !"1".equals(sysClient.getParamService("synchronous"))){
+				if (!"234557".equals(SecureUtil.getTenantId())) {
+					model.setAmount(total);
+				}
 			}
 		}
 		if ("673511".equals(SecureUtil.getTenantId()) || "628326".equals(AuthUtil.getTenantId()) && itemsList.size() > 0) {
@@ -2426,7 +2509,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 			throw new SecurityException("当前租户未配置凭证信息");
 		}
 
-		/*ApigwConfig config = new ApigwConfig();
+		ApigwConfig config = new ApigwConfig();
 		//设置client_id  245905
 		String client_id = "245905";
 		config.setClientID(client_id);
@@ -2451,8 +2534,8 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		//获得token
 		ApiRequest request = new ApiRequest(HttpMethod.GET, "api.kingdee.com", "/jdyconnector/app_management/kingdee_auth_token");
 
-		String key = token2DTO.getData().get(0).appKey;
-		String secret = token2DTO.getData().get(0).appSecret;
+		String key = token2DTO.getData().get(0).getAppKey();
+		String secret = token2DTO.getData().get(0).getAppSecret();
 
 		String s = MD5Util.hashMAC(key, secret);
 		Map<String, String> querys = new LinkedHashMap<>();
@@ -2462,9 +2545,9 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		ApiResult results = ApigwClient.getInstance().send(request);
      	System.out.println("金蝶返回数据======》"+results.getBody());
 		JSONObject jsonObject = JSONObject.parseObject(results.getBody());
-		System.out.println("app-token======>"+jsonObject.getJSONObject("data").getString("app-token"));*/
+		System.out.println("app-token======>"+jsonObject.getJSONObject("data").getString("app-token"));
 
-		//获取测试账套token的url
+		/*//获取测试账套token的url
 		String getTokenUrl = "https://api.kingdee.com/auth/user/access_token?client_id=" + jdTenant.getClientId() +
 			"&client_secret=" + jdTenant.getClientSecret() +
 			"&username=" + jdTenant.getUsername() +
@@ -2476,7 +2559,8 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 		if (tokenDTO.errcode == 1006) {
 			throw new SecurityException("当前密码错误次数超过限定值");
 		}
-		return tokenDTO.getData().getAccess_token();
+		return tokenDTO.getData().getAccess_token();*/
+		return jsonObject.getJSONObject("data").getString("app-token");
 	}
 
 /*	//测试获取套账

+ 6 - 5
blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/service/impl/ClaimServiceImpl.java

@@ -28,7 +28,6 @@ import com.smecloud.apigw.model.ApiRequest;
 import com.smecloud.apigw.model.ApiResult;
 import com.smecloud.apigw.model.ApigwConfig;
 import com.smecloud.apigw.util.SHAUtil;
-import com.trade.purchase.config.MD5Util;
 import com.trade.purchase.extra.entity.Claim;
 import com.trade.purchase.extra.entity.ClaimItem;
 import com.trade.purchase.extra.entity.JdTenant;
@@ -55,6 +54,7 @@ import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ICommonFileClient;
 import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.ISerialClient;
+import org.springblade.common.config.MD5Util;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -546,7 +546,7 @@ public class ClaimServiceImpl extends ServiceImpl<ClaimMapper, Claim> implements
 		if (jdTenant == null) {
 			throw new SecurityException("当前租户未配置凭证信息");
 		}
-		/*ApigwConfig config = new ApigwConfig();
+		ApigwConfig config = new ApigwConfig();
 		//设置client_id  245905
 		String client_id = "245905";
 		config.setClientID(client_id);
@@ -582,9 +582,9 @@ public class ClaimServiceImpl extends ServiceImpl<ClaimMapper, Claim> implements
 		ApiResult results = ApigwClient.getInstance().send(request);
      	System.out.println("金蝶返回数据======》"+results.getBody());
 		JSONObject jsonObject = JSONObject.parseObject(results.getBody());
-		System.out.println("app-token======>"+jsonObject.getJSONObject("data").getString("app-token"));*/
+		System.out.println("app-token======>"+jsonObject.getJSONObject("data").getString("app-token"));
 
-		//获取测试账套token的url
+	/*	//获取测试账套token的url
 		String getTokenUrl = "https://api.kingdee.com/auth/user/access_token?client_id=" + jdTenant.getClientId() +
 			"&client_secret=" + jdTenant.getClientSecret() +
 			"&username=" + jdTenant.getUsername() +
@@ -596,7 +596,8 @@ public class ClaimServiceImpl extends ServiceImpl<ClaimMapper, Claim> implements
 		if (tokenDTO.errcode == 1006) {
 			throw new SecurityException("当前密码错误次数超过限定值");
 		}
-		return tokenDTO.getData().getAccess_token();
+		return tokenDTO.getData().getAccess_token();*/
+		return jsonObject.getJSONObject("data").getString("app-token");
 	}
 
 	public String doGet(String url, Map<String, String> urlParams)

+ 11 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/extra/service/impl/LeadsServiceImpl.java

@@ -42,6 +42,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
@@ -73,6 +74,8 @@ public class LeadsServiceImpl extends ServiceImpl<LeadsMapper, Leads> implements
 
 	private final ICommonFileClient commonFileClient;
 
+	private final ISysClient sysClient;
+
 	@Override
 	public IPage<LeadsVO> selectLeadsPage(IPage<LeadsVO> page, LeadsVO leads) {
 		return page.setRecords(baseMapper.selectLeadsPage(page, leads));
@@ -125,6 +128,14 @@ public class LeadsServiceImpl extends ServiceImpl<LeadsMapper, Leads> implements
 			if (!userRole.contains("抄送人")) {
 				leadsQueryWrapper.eq(Leads::getCreateUser, AuthUtil.getUserId());
 			}
+		}else{
+			if (ObjectUtils.isNotNull(sysClient.getParamService("synchronous"))
+				&& "1".equals(sysClient.getParamService("synchronous"))){
+				String userRole = AuthUtil.getUserRole();
+				if (!userRole.contains("抄送人")) {
+					leadsQueryWrapper.eq(Leads::getCreateUser, AuthUtil.getUserId());
+				}
+			}
 		}
 		leadsQueryWrapper.orderByDesc(Leads::getCreateTime);
 		IPage<Leads> pages = baseMapper.selectPage(Condition.getPage(query), leadsQueryWrapper);