Browse Source

2023年7月6日18:12:51

纪新园 2 years ago
parent
commit
d6d0c80f79
21 changed files with 472 additions and 80 deletions
  1. 6 0
      blade-service-api/blade-payment-api/src/main/java/org/springblade/pay/tonglianPayment/fegin/IPaymentClient.java
  2. 6 0
      blade-service-api/blade-sales-part-api/pom.xml
  3. 8 2
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjCorpsDesc.java
  4. 8 1
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrder.java
  5. 97 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/PjShipStockDetails.java
  6. 4 4
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  7. 44 15
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java
  8. 16 2
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/feign/PaymentClient.java
  9. 10 7
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/accountManagement/service/impl/AccountManagementServiceImpl.java
  10. 5 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/config/MyBatisPulsConfig.java
  11. 5 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsStatisticsController.java
  12. 6 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/controller/OrderController.java
  13. 89 22
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  14. 7 15
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/controller/SettlementController.java
  15. 31 7
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/service/impl/SettlementServiceImpl.java
  16. 15 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipController.java
  17. 4 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/mapper/ShipMapper.java
  18. 64 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/mapper/ShipMapper.xml
  19. 3 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/IShipService.java
  20. 36 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java
  21. 8 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

+ 6 - 0
blade-service-api/blade-payment-api/src/main/java/org/springblade/pay/tonglianPayment/fegin/IPaymentClient.java

@@ -4,6 +4,7 @@ package org.springblade.pay.tonglianPayment.fegin;
 import org.springblade.core.tool.api.R;
 import org.springblade.pay.tonglianPayment.dto.PaymentDTO;
 import org.springblade.pay.tonglianPayment.entity.Parameters;
+import org.springblade.pay.tonglianPayment.entity.WechatMark;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -11,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springblade.purchase.sales.entity.Order;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.List;
 import java.util.Map;
 
 @FeignClient(
@@ -23,6 +25,7 @@ public interface IPaymentClient {
 	String PAY_PREPAY = APP_PREFIX + "/payPrepay";
 	String REFUND = APP_PREFIX + "/refund";
 	String GET_BY_APP_ID = APP_PREFIX + "/getByAppId";
+	String GET_WECHAT_MARK_DETAIL = APP_PREFIX + "/getWechatMarkDetail";
 
 	@PostMapping(GET_BY_ID)
 	R getWeChatPayment(@RequestBody Order order);
@@ -36,5 +39,8 @@ public interface IPaymentClient {
 	@GetMapping(GET_BY_APP_ID)
 	R<Parameters> getByAppId(@RequestParam("appId") String appId);
 
+	@GetMapping(GET_WECHAT_MARK_DETAIL)
+	R<List<WechatMark>> getWechatMarkDetail(@RequestParam("srcBillNo") String srcBillNo,@RequestParam("billNo") String billNo);
+
 
 }

+ 6 - 0
blade-service-api/blade-sales-part-api/pom.xml

@@ -20,6 +20,12 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-payment-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <properties>

+ 8 - 2
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjCorpsDesc.java

@@ -242,9 +242,15 @@ public class PjCorpsDesc implements Serializable {
 
 
 	/**
-	 * 账期
+	 * 数量
 	 */
 	@TableField(exist = false)
-	private BigDecimal accountPeriodAmount;
+	private BigDecimal number;
+
+	/**
+	 * 信用额度余额
+	 */
+	@TableField(exist = false)
+	private BigDecimal creditLimitBalance;
 
 }

+ 8 - 1
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjOrder.java

@@ -29,6 +29,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.springblade.pay.tonglianPayment.entity.WechatMark;
 import org.springframework.format.annotation.DateTimeFormat;
 
 /**
@@ -312,7 +313,7 @@ public class PjOrder implements Serializable {
 	 * 支付记录集合
 	 */
 	@TableField(exist = false)
-	private List<PjPayment> paymentRecordsList;
+	private List<WechatMark> paymentRecordsList;
 
 	/**
 	 * 出入库集合
@@ -405,4 +406,10 @@ public class PjOrder implements Serializable {
 	 */
 	@TableField(exist = false)
 	private String item;
+
+	/**
+	 * 实际支付状态
+	 */
+	@TableField(exist = false)
+	private Integer actualPaymentType;
 }

+ 97 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/PjShipStockDetails.java

@@ -0,0 +1,97 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.salesPart.excel;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 配件收发货表实体类
+ *
+ * @author BladeX
+ * @since 2023-04-21
+ */
+@Data
+public class PjShipStockDetails implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 业务编号
+	 */
+	@ApiModelProperty(value = "业务编号")
+	private String billno;
+
+	/**
+	 * 名称
+	 */
+	@ApiModelProperty(value = "名称")
+	private String corpName;
+
+	/**
+	 * 状态
+	 */
+	@ApiModelProperty(value = "状态")
+	private String statusName;
+
+	/**
+	 * 类型
+	 */
+	@ApiModelProperty(value = "类型")
+	private String bizTypeName;
+	/**
+	 * 增加
+	 */
+	@ApiModelProperty(value = "增加")
+	private BigDecimal addSendTotalNum;
+
+	/**
+	 * 减少
+	 */
+	@ApiModelProperty(value = "减少")
+	private BigDecimal SubSendTotalNum;
+
+	/**
+	 * 业务日期
+	 */
+	@ApiModelProperty(value = "业务日期")
+	private Date updateTime;
+
+	/**
+	 * 业务日期
+	 */
+	@ApiModelProperty(value = "业务日期")
+	private List<String> createTimeList;
+
+
+	/**
+	 * 商品id
+	 */
+	private Long goodsId;
+
+
+	/**
+	 * 仓库id
+	 */
+	private Long storageId;
+
+}

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

@@ -2648,7 +2648,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				message.setMessageType(1);
 				message.setTenantId(AuthUtil.getTenantId());
 
-				message.setMessageBody("您有退款审核,订单单号:" + "" + proecessTemp.getBillNo() + ","
+				message.setMessageBody("您有新的审核,订单单号:" + "" + proecessTemp.getBillNo() + ","
 					+ "订单日期:" + orderDate + ",请审核。"
 					+ "提交人:" + proecessTemp.getSendName() + "  " + "提交时间" + simpleDateFormat.format(proecessTemp.getSendTime())
 				);
@@ -2669,7 +2669,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改订单数据失败");
 				}
 
-				sendMessage.setMessageBody("您的退款审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				sendMessage.setMessageBody("您的审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -2688,7 +2688,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 					throw new SecurityException("修改订单数据失败");
 				}
 
-				sendMessage.setMessageBody("您的退款审核已通过" + ",订单号:" + proecessTemp.getBillNo() + ",请继续操作");
+				sendMessage.setMessageBody("您的审核已通过" + ",订单号:" + proecessTemp.getBillNo() + ",请继续操作");
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");
@@ -2702,7 +2702,7 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				if (!r.isSuccess()) {
 					throw new SecurityException("修改订单数据失败");
 				}
-				sendMessage.setMessageBody("您的退款审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
+				sendMessage.setMessageBody("您的审核未通过" + ",订单号:" + proecessTemp.getBillNo() + ",驳回原因:" + auditProecess.getAuditMsg());
 				R save = messageClient.save(sendMessage);
 				if (!save.isSuccess()) {
 					throw new SecurityException("发送消息失败");

+ 44 - 15
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java

@@ -134,16 +134,21 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 			corpsDesc.setInitials(initials.substring(0, 1));
 		}
 		//保存客户信息
+		String[] deptIds = SecureUtil.getDeptId().split(",");
 		if (corpsDesc.getId() == null) {
 			corpsDesc.setTenantId(SecureUtil.getTenantId());
-			corpsDesc.setCreateDept(Long.valueOf(SecureUtil.getDeptId()));
+			if (deptIds.length>0){
+				corpsDesc.setCreateDept(Long.valueOf(deptIds[0]));
+			}
 			corpsDesc.setCreateTime(date);
 			corpsDesc.setCreateUser(userId);
 			baseMapper.insert(corpsDesc);
 		} else {
 			corpsDesc.setTenantId(SecureUtil.getTenantId());
 			corpsDesc.setUpdateTime(date);
-			corpsDesc.setCreateDept(Long.valueOf(SecureUtil.getDeptId()));
+			if (deptIds.length>0){
+				corpsDesc.setCreateDept(Long.valueOf(deptIds[0]));
+			}
 			corpsDesc.setUpdateUser(userId);
 			baseMapper.updateById(corpsDesc);
 		}
@@ -327,7 +332,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 				throw new SecurityException("导入数据不能为空");
 			}
 			List<Boolean> countList = new ArrayList<>();
-
+			String[] deptIds = SecureUtil.getDeptId().split(",");
 			data.forEach(e -> {
 				String type = e.getType();
 				CorpsType corpsType = corpsTypeMapper.selectCorpsTypeCname(type, AuthUtil.getTenantId());
@@ -379,14 +384,18 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 					if (selectOne == null) {
 						corpsDesc.setCreateTime(new Date());
 						corpsDesc.setCreateUser(AuthUtil.getUserId());
-						corpsDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+						if (deptIds.length>0){
+							corpsDesc.setCreateDept(Long.valueOf(deptIds[0]));
+						}
 						baseMapper.insert(corpsDesc);
 						CorpsTypeDesc middle = new CorpsTypeDesc();
 						middle.setCorpId(corpsDesc.getId());
 						middle.setCorpTypeId(corpsType.getId());
 						middle.setCreateTime(new Date());
 						middle.setCreateUser(AuthUtil.getUserId());
-						middle.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+						if (deptIds.length>0){
+							middle.setCreateDept(Long.valueOf(deptIds[0]));
+						}
 						middleMapper.insert(middle);
 						//绑定收货地址
 						if (ObjectUtil.isNotEmpty(e.getAddressList())) {
@@ -436,7 +445,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 				throw new SecurityException("导入数据不能为空");
 			}
 			List<Boolean> countList = new ArrayList<>();
-
+			String[] deptIds = SecureUtil.getDeptId().split(",");
 			data.forEach(e -> {
 				String type = e.getType();
 				CorpsType corpsType = corpsTypeMapper.selectCorpsTypeCname(type, AuthUtil.getTenantId());
@@ -462,7 +471,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 						corpsDesc.setCorpType("GS");
 						corpsDesc.setCreateTime(new Date());
 						corpsDesc.setCreateUser(AuthUtil.getUserId());
-						corpsDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+						if (deptIds.length>0){
+							corpsDesc.setCreateDept(Long.valueOf(deptIds[0]));
+						}
 						baseMapper.insert(corpsDesc);
 
 						CorpsTypeDesc middle = new CorpsTypeDesc();
@@ -470,7 +481,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 						middle.setCorpTypeId(corpsType.getId());
 						middle.setCreateTime(new Date());
 						middle.setCreateUser(AuthUtil.getUserId());
-						middle.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+						if (deptIds.length>0){
+							middle.setCreateDept(Long.valueOf(deptIds[0]));
+						}
 						middleMapper.insert(middle);
 					} else {
 						corpsDesc.setCorpType("GS");
@@ -505,7 +518,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 				throw new SecurityException("导入数据不能为空");
 			}
 			List<Boolean> countList = new ArrayList<>();
-
+			String[] deptIds = SecureUtil.getDeptId().split(",");
 			data.forEach(e -> {
 				String type = e.getType();
 				CorpsType corpsType = corpsTypeMapper.selectCorpsTypeCname(type, AuthUtil.getTenantId());
@@ -539,7 +552,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 						corpsDesc.setCorpType("GYS");
 						corpsDesc.setCreateTime(new Date());
 						corpsDesc.setCreateUser(AuthUtil.getUserId());
-						corpsDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+						if (deptIds.length>0){
+							corpsDesc.setCreateDept(Long.valueOf(deptIds[0]));
+						}
 						baseMapper.insert(corpsDesc);
 
 						CorpsTypeDesc middle = new CorpsTypeDesc();
@@ -547,7 +562,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 						middle.setCorpTypeId(corpsType.getId());
 						middle.setCreateTime(new Date());
 						middle.setCreateUser(AuthUtil.getUserId());
-						middle.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+						if (deptIds.length>0){
+							middle.setCreateDept(Long.valueOf(deptIds[0]));
+						}
 						middleMapper.insert(middle);
 					} else {
 						corpsDesc.setCorpType("GYS");
@@ -611,6 +628,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 
 	@Override
 	public R importFleetData(List<FleetExcel> data, Boolean isCovered) {
+		String[] deptIds = SecureUtil.getDeptId().split(",");
 		for (int i = 0; i < data.size(); i++) {
 			FleetExcel excel = data.get(i);
 
@@ -646,7 +664,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 				fleet.setCorpType("CD");
 				fleet.setCreateTime(new Date());
 				fleet.setCreateUser(AuthUtil.getUserId());
-				fleet.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+				if (deptIds.length>0){
+					fleet.setCreateDept(Long.valueOf(deptIds[0]));
+				}
 				baseMapper.insert(fleet);
 			}
 		}
@@ -655,6 +675,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 
 	@Override
 	public R importFactoryData(List<FactoryExcel> data, Boolean isCovered) {
+		String[] deptIds = SecureUtil.getDeptId().split(",");
 		for (int i = 0; i < data.size(); i++) {
 			FactoryExcel excel = data.get(i);
 
@@ -690,7 +711,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 				factory.setCorpType("GC");
 				factory.setCreateTime(new Date());
 				factory.setCreateUser(AuthUtil.getUserId());
-				factory.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+				if (deptIds.length>0){
+					factory.setCreateDept(Long.valueOf(deptIds[0]));
+				}
 				baseMapper.insert(factory);
 			}
 		}
@@ -832,8 +855,11 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 			}
 		} else {
 			if (null == corpsDesc.getId()) {
+				String[] deptIds = SecureUtil.getDeptId().split(",");
 				corpsDesc.setTenantId(SecureUtil.getTenantId());
-				corpsDesc.setCreateDept(Long.valueOf(SecureUtil.getDeptId()));
+				if (deptIds.length>0){
+					corpsDesc.setCreateDept(Long.valueOf(deptIds[0]));
+				}
 				corpsDesc.setCreateTime(date);
 				corpsDesc.setCreateUser(userId);
 				corpsDesc.setShoppingMall("零售价");
@@ -919,6 +945,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 	@Override
 	public R importCorpsNew(List<CorpsYCPExcel> excelList) {
 		Date date = new Date();
+		String[] deptIds = SecureUtil.getDeptId().split(",");
 		for (CorpsYCPExcel corpsYCPExcel : excelList) {
 			CorpsDesc corpsDesc = new CorpsDesc();
 			//获得名称首字母
@@ -935,7 +962,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 			corpsDesc.setDetails(corpsYCPExcel.getAddress());
 			corpsDesc.setAttn(corpsYCPExcel.getUserName());
 			corpsDesc.setTenantId(SecureUtil.getTenantId());
-			corpsDesc.setCreateDept(Long.valueOf(SecureUtil.getDeptId()));
+			if (deptIds.length>0){
+				corpsDesc.setCreateDept(Long.valueOf(deptIds[0]));
+			}
 			corpsDesc.setCreateTime(date);
 			corpsDesc.setCreateUser(AuthUtil.getUserId());
 			baseMapper.insert(corpsDesc);

+ 16 - 2
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/feign/PaymentClient.java

@@ -2,7 +2,10 @@ package org.springblade.pay.tonglianPayment.feign;
 
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springblade.pay.tonglianPayment.dto.PaymentDTO;
@@ -15,13 +18,13 @@ import org.springblade.pay.tonglianPayment.service.IWechatMarkService;
 import org.springblade.pay.tonglianPayment.utils.AnalysisMapUtils;
 import org.springblade.pay.tonglianPayment.utils.SybPayService;
 import org.springblade.purchase.sales.entity.Order;
-import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
 import java.math.BigDecimal;
 import java.math.MathContext;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
@@ -32,7 +35,6 @@ import java.util.TreeMap;
 public class PaymentClient implements IPaymentClient {
 	private final IPaymentService paymentService;//支付
 	private final IWechatMarkService wechatMarkService;//支付
-	private final IOrderDescClient orderDescClient;
 	private final IParametersService parametersService;
 
 	@Override
@@ -147,6 +149,18 @@ public class PaymentClient implements IPaymentClient {
 		return parametersService.selectByOne(appId);
 	}
 
+	@Override
+	public R<List<WechatMark>> getWechatMarkDetail(String srcBillNo, String billNo) {
+		LambdaQueryWrapper<WechatMark> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(WechatMark::getIsDeleted, 0)
+			.eq(WechatMark::getTenantId, AuthUtil.getTenantId());
+		lambdaQueryWrapper.and(ObjectUtils.isNotNull(srcBillNo) && ObjectUtils.isNotNull(billNo),i -> i.apply( "find_in_set(src_bill_no,'" + srcBillNo + "," + billNo + "')")
+		.or().apply( "find_in_set(bill_no,'" + srcBillNo + "," + billNo + "')"));
+		lambdaQueryWrapper.orderByDesc(WechatMark::getCreateTime);
+		List<WechatMark> pages = wechatMarkService.list(lambdaQueryWrapper);
+		return R.data(pages);
+	}
+
 	public static void print(Map<String, String> map) {
 		System.out.println("返回数据如下:");
 		if (map != null) {

+ 10 - 7
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/accountManagement/service/impl/AccountManagementServiceImpl.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.salesPart.accountManagement.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -70,13 +71,15 @@ public class AccountManagementServiceImpl extends ServiceImpl<AccountManagementM
 	@Override
 	public PjAccountManagement saveMessage(PjAccountManagement accountManagement) {
 		if (accountManagement.getId() == null){
-			//获得所属公司
-			R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
-			if (ObjectUtil.isNotEmpty(dept)) {
-				accountManagement.setSalesCompanyId(dept.getData().getId());
-				accountManagement.setSalesCompanyName(dept.getData().getFullName());
-			} else {
-				throw new SecurityException("数据异常请联系管理员");
+			if (ObjectUtils.isNull(accountManagement.getSalesCompanyId())){
+				//获得所属公司
+				R<Dept> dept = sysClient.getDept(Long.valueOf(AuthUtil.getDeptId()));
+				if (ObjectUtil.isNotEmpty(dept)) {
+					accountManagement.setSalesCompanyId(dept.getData().getId());
+					accountManagement.setSalesCompanyName(dept.getData().getFullName());
+				} else {
+					throw new SecurityException("数据异常请联系管理员");
+				}
 			}
 			accountManagement.setCreateUser(AuthUtil.getUserId());
 			accountManagement.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));

+ 5 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/config/MyBatisPulsConfig.java

@@ -1,7 +1,9 @@
 package org.springblade.salesPart.config;
 
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
@@ -15,7 +17,9 @@ public class MyBatisPulsConfig {
 	@Bean
 	public MybatisPlusInterceptor mybatisPlusInterceptor() {
 		MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
-		mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
+		mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());//乐观锁插件
+		mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());//自动分页插件
+		mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor());//防止全表更新或删除
 		return mybatisPlusInterceptor;
 	}
 }

+ 5 - 2
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/controller/CorpsStatisticsController.java

@@ -46,7 +46,6 @@ public class CorpsStatisticsController {
 	@ApiOperation(value = "分页", notes = "传入corpsDesc")
 	public R<IPage<PjCorpsDesc>> page(PjCorpsDesc corpsDescDto, Query query) {
 		corpsDescDto.setIsDeleted(0);//默认查有效的
-		corpsDescDto.setEnableOrNot(0);//默认查有效的
 		corpsDescDto.setTenantId(SecureUtil.getTenantId());
 		IPage<PjCorpsDesc> pages = corpsDescService.selectPartsCorpsDescPage(Condition.getPage(query), corpsDescDto);
 		for (PjCorpsDesc corpsDescDto1 : pages.getRecords()) {
@@ -57,6 +56,9 @@ public class CorpsStatisticsController {
 			} else {
 				lambdaQueryWrapper.eq(PjOrder::getBsType, "CG");
 			}
+			if (ObjectUtils.isNotNull(corpsDescDto1.getCreditLimit()) && ObjectUtils.isNotNull(corpsDescDto1.getUseCreditLimit())) {
+				corpsDescDto1.setCreditLimitBalance(corpsDescDto1.getCreditLimit().subtract(corpsDescDto1.getUseCreditLimit()));
+			}
 			List<PjOrder> orderList = orderService.list(lambdaQueryWrapper);
 			if (ObjectUtils.isNotNull(orderList)) {
 				BigDecimal totalAmount = orderList.stream().map(PjOrder::getTotalMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
@@ -65,12 +67,14 @@ public class CorpsStatisticsController {
 				//未付
 				corpsDescDto1.setUnpaidAmount(totalAmount.subtract(corpsDescDto1.getPaidAmount()));
 				corpsDescDto1.setTotalAmount(totalAmount);
+				corpsDescDto1.setNumber(orderList.stream().map(PjOrder::getGoodsTotalShipNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 			} else {
 				//已付
 				corpsDescDto1.setPaidAmount(new BigDecimal("0.00"));
 				//未付
 				corpsDescDto1.setUnpaidAmount(new BigDecimal("0.00"));
 				corpsDescDto1.setTotalAmount(new BigDecimal("0.00"));
+				corpsDescDto1.setNumber(new BigDecimal("0.00"));
 			}
 		}
 		return R.data(pages);
@@ -84,7 +88,6 @@ public class CorpsStatisticsController {
 	@ApiOperation(value = "分页", notes = "传入corpsDesc")
 	public R<Map<String, Object>> pageStatistics(PjCorpsDesc corpsDescDto) {
 		corpsDescDto.setIsDeleted(0);//默认查有效的
-		corpsDescDto.setEnableOrNot(0);//默认查有效的
 		corpsDescDto.setTenantId(SecureUtil.getTenantId());
 		List<PjCorpsDesc> corpsDescDtoList = corpsDescService.selectPartsCorpsStatistics(corpsDescDto);
 		Map<String, Object> map = new HashMap<>();

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

@@ -102,9 +102,13 @@ public class OrderController extends BladeController {
 			.like(ObjectUtils.isNotEmpty(order.getCustomerName()), PjOrder::getCustomerName, order.getCustomerName())
 			.like(ObjectUtils.isNotEmpty(order.getSrcOrdNo()), PjOrder::getSrcOrdNo, order.getSrcOrdNo())//来源单号
 			.like(ObjectUtils.isNotEmpty(order.getOrdNo()), PjOrder::getOrdNo, order.getOrdNo())//来源单号
-			.ne(ObjectUtils.isNotEmpty(order.getActualPaymentStatus()), PjOrder::getActualPaymentStatus, order.getActualPaymentStatus())//来源单号
 			.like(ObjectUtils.isNotEmpty(order.getBusinessSource()), PjOrder::getBusinessSource, order.getBusinessSource())//来源
 			.apply(ObjectUtils.isNotEmpty(order.getStatus()),"find_in_set(status,'"+order.getStatus()+"')");
+		if (ObjectUtils.isNotNull(order.getActualPaymentType())) {
+			lambdaQueryWrapper.eq(PjOrder::getActualPaymentStatus, order.getActualPaymentType());
+		}else{
+			lambdaQueryWrapper.ne(ObjectUtils.isNotEmpty(order.getActualPaymentStatus()), PjOrder::getActualPaymentStatus, order.getActualPaymentStatus());//来源单号
+		}
 		if (order.getDueDateList() != null && order.getDueDateList().size() > 1) {//创建日期
 			lambdaQueryWrapper.ge(PjOrder::getDueDate, order.getDueDateList().get(0));
 			lambdaQueryWrapper.le(PjOrder::getDueDate, order.getDueDateList().get(1));
@@ -113,7 +117,7 @@ public class OrderController extends BladeController {
 			lambdaQueryWrapper.ge(PjOrder::getCreateTime, order.getCreateTimeList().get(0));
 			lambdaQueryWrapper.le(PjOrder::getCreateTime, order.getCreateTimeList().get(1));
 		}
-		lambdaQueryWrapper.apply("(( business_source = '外部销售' AND actual_payment_status = 2 ) OR (business_source = '内部销售' AND FIND_IN_SET( actual_payment_status, '0,1,2' )))");
+		lambdaQueryWrapper.apply("(( business_source = '外部销售' AND actual_payment_status = 2 ) OR (business_source = '内部销售' AND FIND_IN_SET( actual_payment_status, '0,1,2,3' )))");
 		lambdaQueryWrapper.orderByDesc(PjOrder::getCreateTime);
 
 		IPage<PjOrder> pages = orderService.page(Condition.getPage(query), lambdaQueryWrapper);

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

@@ -28,12 +28,13 @@ import org.springblade.check.dto.AuditProecessDTO;
 import org.springblade.check.entity.AuditPathsActs;
 import org.springblade.check.entity.AuditPathsLevels;
 import org.springblade.check.feign.ICheckClient;
-import org.springblade.client.entity.CorpsDesc;
 import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.pay.tonglianPayment.entity.WechatMark;
+import org.springblade.pay.tonglianPayment.fegin.IPaymentClient;
 import org.springblade.salesPart.corps.mapper.CorpsDescMapper;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.OrderTypeEnum;
@@ -45,6 +46,9 @@ import org.springblade.salesPart.order.service.IOrderService;
 import org.springblade.salesPart.payMethod.PayService;
 import org.springblade.salesPart.payment.mapper.PaymentMapper;
 import org.springblade.salesPart.productLaunch.mapper.ProductLaunchMapper;
+import org.springblade.salesPart.settlement.mapper.SettlementMapper;
+import org.springblade.salesPart.settlement.service.ISettlementItemsService;
+import org.springblade.salesPart.settlement.service.ISettlementService;
 import org.springblade.salesPart.ship.mapper.ShipItemsMapper;
 import org.springblade.salesPart.ship.mapper.ShipMapper;
 import org.springblade.salesPart.stock.mapper.StockDescMapper;
@@ -54,17 +58,13 @@ import org.springblade.salesPart.vo.OrderVO;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.math.MathContext;
-import java.math.RoundingMode;
-import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.Objects;
 
 import static org.springblade.core.secure.utils.AuthUtil.getUser;
 
@@ -89,13 +89,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	private final ShipItemsMapper shipItemsMapper;
 	private final CorpsDescMapper corpsDescMapper;
 	private final StorageDescMapper storageDescMapper;
-	private final PaymentMapper paymentMapper;
 	private final StockDescMapper stockDescMapper;
 	private final ProductLaunchMapper productLaunchMapper;
 	private final GoodsDescMapper goodsDescMapper;
 	private final ISysClient sysClient;
 	private final HistoryMapper historyMapper;
 	private final PayService payService;
+	private final ISettlementItemsService settlementItemsService;
+	private final SettlementMapper settlementMapper;
+	private final IPaymentClient paymentClient;
 
 	/**
 	 * 获取销售订单详情
@@ -115,11 +117,40 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		detail.setOrderItemsList(orderItemsMapper.selectList(itemsLambdaQueryWrapper));
 
 		//获得支付记录
-		LambdaQueryWrapper<PjPayment> paymentLambdaQueryWrapper = new LambdaQueryWrapper<>();
-		paymentLambdaQueryWrapper.eq(PjPayment::getTenantId, AuthUtil.getTenantId())
-			.eq(PjPayment::getIsDeleted, 0)
-			.in(PjPayment::getOrderId, detail.getId());
-		detail.setPaymentRecordsList(paymentMapper.selectList(paymentLambdaQueryWrapper));
+		List<WechatMark> wechatMarkList = new ArrayList<>();
+		if ("内部销售".equals(detail.getBusinessSource())) {
+			R<List<WechatMark>> res = paymentClient.getWechatMarkDetail(detail.getOrdNo(), detail.getOrdNo());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				wechatMarkList.addAll(res.getData());
+			}
+		} else {
+			R<List<WechatMark>> res = paymentClient.getWechatMarkDetail(detail.getOrdNo(), detail.getSrcOrdNo());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				wechatMarkList.addAll(res.getData());
+			}
+		}
+		LambdaQueryWrapper<PjSettlementItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjSettlementItems::getSrcParentId, detail.getId())
+			.eq(PjSettlementItems::getIsDeleted, 0)
+			.ne(PjSettlementItems::getSettlmentAmount, 0.00)
+			.eq(PjSettlementItems::getTenantId, AuthUtil.getTenantId());
+		List<PjSettlementItems> pjSettlementList = settlementItemsService.list(lambdaQueryWrapper);
+		String sysNo = "";
+		if (pjSettlementList.size() > 0) {
+			PjSettlement pjSettlement = settlementMapper.selectById(pjSettlementList.get(0).getPid());
+			if (ObjectUtils.isNotNull(pjSettlement)) {
+				sysNo = pjSettlement.getSysNo();
+			}
+		}
+		for (PjSettlementItems item : pjSettlementList) {
+			WechatMark wechatMark = new WechatMark();
+			wechatMark.setSerialNumber(sysNo);
+			wechatMark.setAmount(item.getSettlmentAmount());
+			wechatMark.setType("支付");
+			wechatMark.setCreateTime(item.getUpdateTime());
+			wechatMarkList.add(wechatMark);
+		}
+		detail.setPaymentRecordsList(wechatMarkList);
 
 		//获得出入库记录
 		LambdaQueryWrapper<PjShip> shipLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -141,7 +172,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	public IPage<OrderVO> selectOrderPage(IPage<OrderVO> page, OrderVO order) {
 		return page.setRecords(baseMapper.selectOrderPage(page, order));
 	}
-/**
+
+	/**
 	 * 自定义分页
 	 *
 	 * @param page
@@ -288,9 +320,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 							.eq(PjProductLaunch::getSalesCompanyId, order.getSalesCompanyId())
 							.eq(PjProductLaunch::getSourceCompanyId, order.getSharedCompanyId());
 						PjProductLaunch productLaunch = productLaunchMapper.selectOne(lambdaQueryWrapper);
-						if (ObjectUtils.isNotNull(productLaunch)){
+						if (ObjectUtils.isNotNull(productLaunch)) {
 							item.setCostprie(item.getGoodsNum().multiply(productLaunch.getShareCost()));
-						}else{
+						} else {
 							throw new RuntimeException("请维护共享商品成本价格");
 						}
 					}
@@ -333,7 +365,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 			}
 		} else if (order.getBsType().equals(OrderTypeEnum.PURCHASE.getType())) {//采购
 			//仓库名称
-			order.setStorageName(storageDescMapper.selectById(order.getStorageId()).getCname());
+			if (ObjectUtils.isNotNull(order.getStorageId())) {
+				order.setStorageName(storageDescMapper.selectById(order.getStorageId()).getCname());
+			}
 			if (order.getId() == null) {
 				order.setOrdNo((String) billNo.getData());
 				order.setCreateTime(new Date());
@@ -438,8 +472,23 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		//修改销售状态为待发货
 		pjOrder.setStatus(OrderTypeEnum.XSDFH.getType());
 		pjOrder.setGenerateTask(OrderTypeEnum.SCRW.getType());
+		pjOrder.setActualPaymentStatus(1);
 		baseMapper.updateById(pjOrder);
-
+		if ("挂账".equals(pjOrder.getReceivableType())) {
+			PjCorpsDesc pjCorpsDesc = corpsDescMapper.selectById(pjOrder.getCustomerId());
+			if (ObjectUtils.isNotNull(pjCorpsDesc)) {
+				if (ObjectUtils.isNotNull(pjCorpsDesc.getUseCreditLimit())) {
+					if (pjCorpsDesc.getCreditLimit().compareTo(pjCorpsDesc.getUseCreditLimit().add(pjOrder.getTotalMoney())) < 0) {
+						throw new RuntimeException("信用额度余额不足");
+					} else {
+						pjCorpsDesc.setUseCreditLimit(pjCorpsDesc.getUseCreditLimit().add(pjOrder.getTotalMoney()));
+					}
+				} else {
+					pjCorpsDesc.setUseCreditLimit(pjOrder.getTotalMoney());
+				}
+			}
+			corpsDescMapper.updateById(pjCorpsDesc);
+		}
 		//内部销售修改上架管理的库存
 		if (pjOrder.getBusinessSource().equals(OrderTypeEnum.WEB.getType())) {
 			LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -472,6 +521,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R revokeGenerateShipTask(PjOrder order) {
+		if (settlementItemsService.count(new LambdaQueryWrapper<PjSettlementItems>()
+			.eq(PjSettlementItems::getIsDeleted, 0)
+			.eq(PjSettlementItems::getTenantId, AuthUtil.getTenantId())
+			.eq(PjSettlementItems::getSrcParentId, order.getId())) > 0) {
+			throw new RuntimeException("已有收费记录,撤销失败");
+		}
 		PjOrder pjOrder = baseMapper.selectById(order.getId());
 		PjShip pjShip = shipMapper.selectOne(new LambdaQueryWrapper<PjShip>().eq(PjShip::getIsDeleted, 0)
 			.eq(PjShip::getOrdId, order.getId())
@@ -487,6 +542,18 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		pjOrder.setGenerateTask(OrderTypeEnum.NSCRW.getType());
 		baseMapper.updateById(pjOrder);
 
+		if ("挂账".equals(pjOrder.getReceivableType())) {
+			PjCorpsDesc pjCorpsDesc = corpsDescMapper.selectById(pjOrder.getCustomerId());
+			if (ObjectUtils.isNotNull(pjCorpsDesc)) {
+				if (ObjectUtils.isNotNull(pjCorpsDesc.getUseCreditLimit())) {
+						pjCorpsDesc.setUseCreditLimit(pjCorpsDesc.getUseCreditLimit().subtract(pjOrder.getTotalMoney()));
+				} else {
+					pjCorpsDesc.setUseCreditLimit(new BigDecimal("0.00"));
+				}
+			}
+			corpsDescMapper.updateById(pjCorpsDesc);
+		}
+
 		//内部销售修改上架管理的库存
 		if (pjOrder.getBusinessSource().equals(OrderTypeEnum.WEB.getType())) {
 			LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -653,7 +720,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		if (order == null) {
 			throw new SecurityException("审批通过失败");
 		}
-		if ("XS".equals(order.getBsType())){
+		if ("XS".equals(order.getBsType())) {
 			if (OrderTypeEnum.SHIPED.getType().equals(order.getOriginalStatus()) || OrderTypeEnum.RECEIVEDGOODS.getType().equals(order.getOriginalStatus())) {//已发货
 				if ("退款中".equals(order.getStatus())) {
 					throw new SecurityException("订单已审批通过请勿重复审批");
@@ -832,7 +899,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 					}
 				}
 			}
-		}else{
+		} else {
 			order.setStatus("待确认");
 		}
 
@@ -870,10 +937,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		if (order == null) {
 			throw new SecurityException("审批驳回失败");
 		}
-		if ("XS".equals(order.getBsType())){
+		if ("XS".equals(order.getBsType())) {
 			order.setStatus(order.getOriginalStatus());
 			order.setCheckStatus("审批驳回");
-		}else{
+		} else {
 			order.setStatus("录入");
 		}
 		baseMapper.updateById(order);
@@ -948,9 +1015,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 		if (!financeProcess.isSuccess()) {
 			throw new SecurityException("操作失败,请联系管理员");
 		}
-		if ("XS".equals(declare.getBsType())){
+		if ("XS".equals(declare.getBsType())) {
 			declare.setStatus(declare.getOriginalStatus());
-		}else{
+		} else {
 			declare.setStatus("录入");
 		}
 		declare.setCheckStatus("审核撤销");

+ 7 - 15
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/controller/SettlementController.java

@@ -18,7 +18,6 @@ package org.springblade.salesPart.settlement.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.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
@@ -29,21 +28,14 @@ import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
-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.Func;
-import org.springblade.salesPart.entity.PjCorpsType;
-import org.springblade.salesPart.entity.PjCorpsTypeDesc;
 import org.springblade.salesPart.entity.PjSettlement;
 import org.springblade.salesPart.entity.PjSettlementItems;
-import org.springblade.salesPart.excel.CorpsDescExportExcel;
 import org.springblade.salesPart.excel.PjSettlementExcel;
 import org.springblade.salesPart.settlement.service.ISettlementItemsService;
 import org.springblade.salesPart.settlement.service.ISettlementService;
-import org.springblade.salesPart.vo.CorpsDescVO;
 import org.springblade.salesPart.vo.SettlementVO;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
@@ -52,7 +44,6 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * 配件批发收付款结算表 控制器
@@ -81,7 +72,7 @@ public class SettlementController extends BladeController {
 	public R<PjSettlement> detail(PjSettlement settlement) {
 		PjSettlement detail = settlementService.getOne(Condition.getQueryWrapper(settlement));
 		detail.setSettlementItemsList(settlementItemsService.list(new LambdaQueryWrapper<PjSettlementItems>()
-		.eq(PjSettlementItems::getPid,detail.getId())));
+			.eq(PjSettlementItems::getPid, detail.getId())));
 		return R.data(detail);
 	}
 
@@ -101,9 +92,9 @@ public class SettlementController extends BladeController {
 		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getSettlementDate()), PjSettlement::getSettlementDate, settlement.getSettlementDate());
 		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getSalesCompanyId()), PjSettlement::getSalesCompanyId, settlement.getSalesCompanyId());
 		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getDc()), PjSettlement::getDc, settlement.getDc());
-		if (ObjectUtils.isNotNull(settlement.getSettlementDateList()) && settlement.getSettlementDateList().size()>0){
-			lambdaQueryWrapper.le(PjSettlement::getDueDate,settlement.getSettlementDateList().get(0));
-			lambdaQueryWrapper.ge(PjSettlement::getDueDate,settlement.getSettlementDateList().get(1));
+		if (ObjectUtils.isNotNull(settlement.getSettlementDateList()) && settlement.getSettlementDateList().size() > 0) {
+			lambdaQueryWrapper.ge(PjSettlement::getSettlementDate, settlement.getSettlementDateList().get(0));
+			lambdaQueryWrapper.le(PjSettlement::getSettlementDate, settlement.getSettlementDateList().get(1));
 		}
 		IPage<PjSettlement> pages = settlementService.page(Condition.getPage(query), lambdaQueryWrapper);
 		for (PjSettlement item : pages.getRecords()) {
@@ -172,6 +163,7 @@ public class SettlementController extends BladeController {
 		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getSettlementDate()), PjSettlement::getSettlementDate, settlement.getSettlementDate());
 		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getSalesCompanyId()), PjSettlement::getSalesCompanyId, settlement.getSalesCompanyId());
 		lambdaQueryWrapper.eq(ObjectUtils.isNotNull(settlement.getDc()), PjSettlement::getDc, settlement.getDc());
+		lambdaQueryWrapper.orderByDesc(PjSettlement::getCreateTime);
 		List<PjSettlement> list = settlementService.list(lambdaQueryWrapper);
 		for (PjSettlement item : list) {
 			R<Dept> res = sysClient.getDept(item.getSalesCompanyId());
@@ -179,9 +171,9 @@ public class SettlementController extends BladeController {
 				item.setSalesCompanyName(res.getData().getFullName());
 			}
 		}
-		if ("d".equals(settlement.getDc())){
+		if ("d".equals(settlement.getDc())) {
 			ExcelUtil.export(response, "收款信息", "收款信息", BeanUtil.copy(list, PjSettlementExcel.class), PjSettlementExcel.class);
-		}else{
+		} else {
 			ExcelUtil.export(response, "付款信息", "付款信息", BeanUtil.copy(list, PjSettlementExcel.class), PjSettlementExcel.class);
 		}
 	}

+ 31 - 7
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/settlement/service/impl/SettlementServiceImpl.java

@@ -25,10 +25,8 @@ import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.salesPart.accountManagement.service.IAccountManagementService;
-import org.springblade.salesPart.entity.PjAccountManagement;
-import org.springblade.salesPart.entity.PjOrder;
-import org.springblade.salesPart.entity.PjSettlement;
-import org.springblade.salesPart.entity.PjSettlementItems;
+import org.springblade.salesPart.corps.service.ICorpsDescService;
+import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.OrderTypeEnum;
 import org.springblade.salesPart.order.service.IOrderService;
 import org.springblade.salesPart.settlement.mapper.SettlementMapper;
@@ -60,6 +58,8 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, PjSettl
 
 	private final IAccountManagementService accountManagementService;
 
+	private final ICorpsDescService corpsDescService;
+
 	/**
 	 * 生成系统编号
 	 */
@@ -85,7 +85,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, PjSettl
 			settlement.setSalesCompanyId(Long.parseLong(AuthUtil.getDeptId()));
 			if ("d".equals(settlement.getDc())) {
 				settlement.setFinanceStatus(OrderTypeEnum.WAITPAYMENTD.getType());
-			}else{
+			} else {
 				settlement.setFinanceStatus(OrderTypeEnum.WAITPAYMENTC.getType());
 			}
 		} else {
@@ -131,10 +131,22 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, PjSettl
 			for (PjSettlementItems item : settlement.getSettlementItemsList()) {
 				item.setUpdateTime(new Date());
 				item.setUpdateUser(AuthUtil.getUserId());
+				item.setSettlmentAmount(item.getThisAmount());
 				PjOrder pjOrder = pjOrderList.stream().findFirst().orElse(null);
 				if (pjOrder == null) {
 					continue;
 				}
+				if ("挂账".equals(pjOrder.getReceivableType())) {
+					PjCorpsDesc pjCorpsDesc = corpsDescService.getById(pjOrder.getCustomerId());
+					if (ObjectUtils.isNotNull(pjCorpsDesc)) {
+						if (ObjectUtils.isNotNull(pjCorpsDesc.getUseCreditLimit())) {
+							pjCorpsDesc.setUseCreditLimit(pjCorpsDesc.getUseCreditLimit().subtract(pjOrder.getTotalMoney()));
+						} else {
+							pjCorpsDesc.setUseCreditLimit(new BigDecimal("0.00"));
+						}
+					}
+					corpsDescService.updateById(pjCorpsDesc);
+				}
 				if (ObjectUtils.isNotNull(pjOrder.getPaymentAmountTl())) {
 					pjOrder.setPaymentAmountTl(pjOrder.getPaymentAmountTl().add(item.getThisAmount()));
 				} else {
@@ -175,7 +187,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, PjSettl
 		}
 		if ("d".equals(settlement.getDc())) {
 			settlement.setFinanceStatus(OrderTypeEnum.PAIDD.getType());
-		}else{
+		} else {
 			settlement.setFinanceStatus(OrderTypeEnum.PAIDC.getType());
 		}
 		baseMapper.updateById(settlement);
@@ -198,10 +210,22 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, PjSettl
 			for (PjSettlementItems item : settlement.getSettlementItemsList()) {
 				item.setUpdateTime(new Date());
 				item.setUpdateUser(AuthUtil.getUserId());
+				item.setSettlmentAmount(new BigDecimal("0.00"));
 				PjOrder pjOrder = pjOrderList.stream().findFirst().orElse(null);
 				if (pjOrder == null) {
 					continue;
 				}
+				if ("挂账".equals(pjOrder.getReceivableType())) {
+					PjCorpsDesc pjCorpsDesc = corpsDescService.getById(pjOrder.getCustomerId());
+					if (ObjectUtils.isNotNull(pjCorpsDesc)) {
+						if (ObjectUtils.isNotNull(pjCorpsDesc.getUseCreditLimit())) {
+							pjCorpsDesc.setUseCreditLimit(pjCorpsDesc.getUseCreditLimit().add(pjOrder.getTotalMoney()));
+						} else {
+							pjCorpsDesc.setUseCreditLimit(pjOrder.getTotalMoney());
+						}
+					}
+					corpsDescService.updateById(pjCorpsDesc);
+				}
 				if (ObjectUtils.isNotNull(pjOrder.getPaymentAmountTl())) {
 					pjOrder.setPaymentAmountTl(pjOrder.getPaymentAmountTl().subtract(item.getThisAmount()));
 				} else {
@@ -238,7 +262,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, PjSettl
 		}
 		if ("d".equals(settlement.getDc())) {
 			settlement.setFinanceStatus(OrderTypeEnum.WAITPAYMENTD.getType());
-		}else{
+		} else {
 			settlement.setFinanceStatus(OrderTypeEnum.WAITPAYMENTC.getType());
 		}
 		baseMapper.updateById(settlement);

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

@@ -33,12 +33,15 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.entity.PjShip;
 import org.springblade.salesPart.entity.PjShipItems;
 import org.springblade.salesPart.enums.OrderTypeEnum;
+import org.springblade.salesPart.excel.PjShipStockDetails;
 import org.springblade.salesPart.excel.ShipItemImportExcel;
 import org.springblade.salesPart.ship.service.IShipItemsService;
 import org.springblade.salesPart.ship.service.IShipService;
+import org.springblade.salesPart.vo.OrderVO;
 import org.springblade.salesPart.vo.ShipVO;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
@@ -340,4 +343,16 @@ public class ShipController extends BladeController {
 		return shipService.returnWarehouse(ship);
 	}
 
+
+	/**
+	 * 库存账明细
+	 */
+	@GetMapping("/stockDataDetails")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入order")
+	public R<List<PjShipStockDetails>> stockDataDetails(PjShipStockDetails pjShipStockDetails) {
+		List<PjShipStockDetails> pages = shipService.stockDataDetails(pjShipStockDetails);
+		return R.data(pages);
+	}
+
 }

+ 4 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/mapper/ShipMapper.java

@@ -16,7 +16,9 @@
  */
 package org.springblade.salesPart.ship.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.salesPart.entity.PjShip;
+import org.springblade.salesPart.excel.PjShipStockDetails;
 import org.springblade.salesPart.vo.ShipVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -40,4 +42,6 @@ public interface ShipMapper extends BaseMapper<PjShip> {
 	List<ShipVO> selectShipPage(IPage page, ShipVO ship);
 
     void deleteByTaskId(Long taskId);
+
+    List<PjShipStockDetails> stockDataDetails(@Param("order") PjShipStockDetails pjShipStockDetails);
 }

+ 64 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/mapper/ShipMapper.xml

@@ -39,5 +39,69 @@
     <select id="selectShipPage" resultMap="shipResultMap">
         select * from pjpf_ship where is_deleted = 0
     </select>
+    <select id="stockDataDetails" resultType="org.springblade.salesPart.excel.PjShipStockDetails">
+        SELECT
+            ps.billno AS billno,
+            ps.customer_name AS corpName,
+            ps.status_name,
+            ps.update_time AS updateTime,
+            CASE
+                ps.biz_type_name
+                WHEN 'FHGD' THEN
+                    '出库'
+                WHEN 'SHGD' THEN
+                    '入库'
+                WHEN 'TKSHGD' THEN
+                    '入库'
+                END AS bizTypeName,
+            CASE
+                ps.biz_type_name
+                WHEN 'FHGD' THEN
+                    IF
+                        ( SUM( psi.send_num ), SUM( psi.send_num ), 0 ) ELSE 0
+                END AS SubSendTotalNum,
+            CASE
+                ps.biz_type_name
+                WHEN 'SHGD' THEN
+                    IF
+                        ( SUM( psi.send_num ), SUM( psi.send_num ), 0 )
+                WHEN 'TKSHGD' THEN
+                    IF
+                        ( SUM( psi.send_num ), SUM( psi.send_num ), 0 ) ELSE 0
+                END AS addSendTotalNum
+        FROM
+            `pjpf_ship` ps
+                LEFT JOIN pjpf_ship_items psi ON ps.id = psi.pid
+        WHERE
+            ps.tenant_id = '883868'
+          AND ps.is_deleted = '0'
+          AND FIND_IN_SET( ps.biz_type_name, 'FHGD,SHGD,TKSHGD' )
+        <if test="order.storageId!=null">
+            and ps.storage_id = #{order.storageId}
+        </if>
+        <if test="order.goodsId!=null">
+            and psi.goods_id = #{order.goodsId}
+        </if>
+        <if test="order.corpName!=null and order.corpName!=''">
+            and ps.customer_name = #{order.corpName}
+        </if>
+        <if test="order.bizTypeName!=null and order.bizTypeName!=''">
+            and ps.biz_type_name = #{order.bizTypeName}
+        </if>
+        <if test="order.billno!=null and order.billno!=''">
+            and ps.bill_no = like CONCAT(CONCAT('%', #{order.billno}), '%')
+        </if>
+        <if test="order.statusName!=null and order.statusName!=''">
+            and ps.status_name = #{order.statusName}
+        </if>
+        <if test="order.createTimeList != null and order.createTimeList[0] != null and order.createTimeList[0]!= ''">
+            and po.update_time &gt;= #{order.createTimeList[0]}
+        </if>
+        <if test="order.createTimeList != null and order.createTimeList[1] != null and order.createTimeList[1]!= ''">
+            and po.update_time &lt;= #{order.createTimeList[1]}
+        </if>
+        GROUP BY
+            ps.billno
+    </select>
 
 </mapper>

+ 3 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/IShipService.java

@@ -20,6 +20,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.salesPart.entity.PjOrder;
 import org.springblade.salesPart.entity.PjShip;
 import org.springblade.salesPart.entity.PjShipItems;
+import org.springblade.salesPart.excel.PjShipStockDetails;
 import org.springblade.salesPart.excel.ShipItemImportExcel;
 import org.springblade.salesPart.vo.ShipVO;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -118,4 +119,6 @@ public interface IShipService extends IService<PjShip> {
 	 * 撤销入库
 	 */
 	R revokeWarehousing(PjShip ship);
+
+    List<PjShipStockDetails> stockDataDetails(PjShipStockDetails pjShipStockDetails);
 }

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

@@ -32,6 +32,7 @@ import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.OrderTypeEnum;
+import org.springblade.salesPart.excel.PjShipStockDetails;
 import org.springblade.salesPart.excel.ShipItemImportExcel;
 import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
 import org.springblade.salesPart.goods.mapper.GoodsTypeMapper;
@@ -732,6 +733,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 					stockDesc.setInventoryAmount(stockDesc.getInventoryAmount().add(stockOne.getInventoryAmount()));
 					stockDesc.setInventoryCostPrice(stockDesc.getInventoryAmount().divide(stockDesc.getBalanceQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
 					stockDesc.setVersion(stockOne.getVersion());
+
 				}
 				boolean count = iStockDescService.saveOrUpdate(stockDesc);
 				if (!count){
@@ -802,6 +804,27 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			rwShip.setUpdateTime(new Date());
 			baseMapper.updateById(rwShip);
 		}
+		//获得销售订单明细
+		LambdaQueryWrapper<PjOrderItems> itemsLambdaQueryWrapper = new LambdaQueryWrapper<>();
+		itemsLambdaQueryWrapper.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId())
+			.eq(PjOrderItems::getIsDeleted, 0)
+			.eq(PjOrderItems::getPid, ship.getOrdId());
+		List<PjOrderItems> itemsList = orderItemsService.list(itemsLambdaQueryWrapper);
+		//数量和
+		BigDecimal goodsNum = itemsList.stream().map(PjOrderItems::getGoodsNum).reduce(BigDecimal.ZERO, BigDecimal::add);
+		//发货数量和
+		BigDecimal sendNum = itemsList.stream().map(PjOrderItems::getSendNum).reduce(BigDecimal.ZERO, BigDecimal::add);
+		PjOrder order = orderMapper.selectById(ship.getOrdId());
+		if (ObjectUtil.isNotEmpty(order)) {
+			if (goodsNum.compareTo(sendNum) == 0) {//数量等于发货数量修改销售订单状态
+				order.setStatus(OrderTypeEnum.RECEIVEDGOODS.getType());
+				order.setXcxStatus(OrderTypeEnum.RECEIVEDGOODS.getType());
+				orderMapper.updateById(order);
+			} else {
+				order.setStorageId(ship.getStorageId());
+				orderMapper.updateById(order);
+			}
+		}
 
 		return R.data(ship);
 	}
@@ -1094,9 +1117,22 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 
 		ship.setStatusName(OrderTypeEnum.REVOKE.getType());
 		baseMapper.updateById(ship);
+		PjOrder order = orderMapper.selectById(ship.getOrdId());
+		if (ObjectUtil.isNotEmpty(order)) {
+			order.setStatus(OrderTypeEnum.GOODSRECEIVED.getType());
+			order.setXcxStatus(OrderTypeEnum.GOODSRECEIVED.getType());
+			orderMapper.updateById(order);
+		} else {
+			throw new RuntimeException("数据异常请联系管理员");
+		}
 		return R.data(ship);
 	}
 
+	@Override
+	public List<PjShipStockDetails> stockDataDetails(PjShipStockDetails pjShipStockDetails) {
+		return baseMapper.stockDataDetails(pjShipStockDetails);
+	}
+
 	/**
 	 * 生成工单历史记录
 	 */

+ 8 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -478,6 +478,14 @@ public class UserController {
 	}
 
 	/**
+	 * 轮胎配件用户列表(财务)
+	 */
+	@GetMapping("/financeList")
+	public R<List<User>> financeList() {
+		return userSearchClient.listByRole(SysCache.getRoleIds(AuthUtil.getTenantId(),"财务"));
+	}
+
+	/**
 	 * 轮胎配件用户列表(库管)
 	 */
 	@GetMapping("/getWarehouseKeeper")