Ver Fonte

2023年8月1日08:24:07

纪新园 há 2 anos atrás
pai
commit
83245c6eab
45 ficheiros alterados com 1883 adições e 410 exclusões
  1. 34 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/CorpsCechargeRecordDTO.java
  2. 26 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/CorpsDescDto.java
  3. 26 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/GoodsDescDto.java
  4. 139 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpsCechargeRecord.java
  5. 27 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpsDesc.java
  6. 23 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/GoodsDesc.java
  7. 6 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/StorageDesc.java
  8. 6 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/StorageType.java
  9. 9 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsDescClient.java
  10. 36 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/CorpsCechargeRecordVO.java
  11. 11 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/Order.java
  12. 8 1
      blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/vo/AppStockPartsVO.java
  13. 7 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java
  14. 6 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java
  15. 5 0
      blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java
  16. 8 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java
  17. 4 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  18. 8 0
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/dto/ApplyDTO.java
  19. 6 0
      blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Settlement.java
  20. 10 2
      blade-service/blade-check/src/main/java/org/springblade/check/service/impl/AuditProecessServiceImpl.java
  21. 136 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsCechargeRecordController.java
  22. 41 18
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescPartsController.java
  23. 105 16
      blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java
  24. 42 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/mapper/CorpsCechargeRecordMapper.java
  25. 32 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/mapper/CorpsCechargeRecordMapper.xml
  26. 16 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/mapper/CorpsDescMapper.xml
  27. 45 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsCechargeRecordService.java
  28. 85 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsCechargeRecordServiceImpl.java
  29. 4 2
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java
  30. 0 289
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/controller/TongLianPaymentController.java
  31. 2 0
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java
  32. 152 40
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java
  33. 70 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/OrderItemsExport.java
  34. 16 2
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java
  35. 5 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.java
  36. 41 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml
  37. 98 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/partsapp/AppPartsController.java
  38. 8 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java
  39. 526 37
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  40. 7 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/mapper/StockGoodsMapper.xml
  41. 25 0
      blade-service/blade-stock/src/main/java/org/springblade/stock/service/impl/StockGoodsServiceImpl.java
  42. 5 0
      blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java
  43. 5 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  44. 4 2
      blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java
  45. 8 0
      blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

+ 34 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/CorpsCechargeRecordDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      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.client.dto;
+
+import org.springblade.client.entity.CorpsCechargeRecord;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 会员充值记录表数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2023-07-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class CorpsCechargeRecordDTO extends CorpsCechargeRecord {
+	private static final long serialVersionUID = 1L;
+
+}

+ 26 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/CorpsDescDto.java

@@ -226,5 +226,31 @@ public class CorpsDescDto implements Serializable {
 	@TableField(exist = false)
 	private String adminProfilesName;
 
+	/**
+	 * 会员等级
+	 */
+	@ApiModelProperty("会员等级")
+	private String membershipLevel;
+	/**
+	 * 推荐人id
+	 */
+	@ApiModelProperty("推荐人id")
+	private Long referenceId;
+	/**
+	 * 推荐人
+	 */
+	@ApiModelProperty("推荐人")
+	private String referenceName;
+	/**
+	 * 积分余额
+	 */
+	@ApiModelProperty("积分余额")
+	private BigDecimal pointsBalance;
+	/**
+	 * 会员余额
+	 */
+	@ApiModelProperty("会员余额")
+	private BigDecimal balanceAmounts;
+
 
 }

+ 26 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/dto/GoodsDescDto.java

@@ -162,5 +162,31 @@ public class GoodsDescDto implements Serializable {
 	 */
 	private Integer salesVolumes;
 
+	/**
+	 * 门店积分
+	 */
+	@ApiModelProperty("门店积分")
+	private BigDecimal storeIntegral;
+
+	/**
+	 * 推荐人积分
+	 */
+	@ApiModelProperty("推荐人积分")
+	private BigDecimal referenceIntegral;
+
+	/**
+	 * 业务员积分
+	 */
+	@ApiModelProperty("业务员积分")
+	private BigDecimal salesmanIntegral;
+
+	/**
+	 * 是否为积分商品
+	 */
+	private String whetherIntegral;
+
+	@ApiModelProperty(value = "兑换积分")
+	private BigDecimal integral;
+
 
 }

+ 139 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpsCechargeRecord.java

@@ -0,0 +1,139 @@
+/*
+ *      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.client.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 会员充值记录表实体类
+ *
+ * @author BladeX
+ * @since 2023-07-26
+ */
+@Data
+@TableName("basic_corps_cecharge_record")
+@ApiModel(value = "CorpsCechargeRecord对象", description = "会员充值记录表")
+public class CorpsCechargeRecord implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * id
+	 */
+	@ApiModelProperty(value = "id")
+	private Long id;
+	/**
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	private Long corpId;
+	/**
+	 * 客户名称
+	 */
+	@ApiModelProperty(value = "客户名称")
+	private String corpName;
+	/**
+	 * 充值日期
+	 */
+	@ApiModelProperty(value = "充值日期")
+	private LocalDateTime time;
+	/**
+	 * 充值方式
+	 */
+	@ApiModelProperty(value = "充值方式")
+	private String type;
+	/**
+	 * 实际充值金额
+	 */
+	@ApiModelProperty(value = "实际充值金额")
+	private BigDecimal realityAmount;
+	/**
+	 * 赠送金额
+	 */
+	@ApiModelProperty(value = "赠送金额")
+	private BigDecimal giveAmount;
+	/**
+	 * 总计金额
+	 */
+	@ApiModelProperty(value = "总计金额")
+	private BigDecimal totalAmount;
+	/**
+	 * 操作人id
+	 */
+	@ApiModelProperty(value = "操作人id")
+	private Long operatorId;
+	/**
+	 * 操作人
+	 */
+	@ApiModelProperty(value = "操作人")
+	private String operatorName;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private LocalDateTime createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private LocalDateTime updateTime;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+
+	/**
+	 * 保存0提交1撤销2
+	 */
+	@ApiModelProperty(value = "是否提交")
+	private Integer synchronous;
+
+}

+ 27 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/CorpsDesc.java

@@ -483,4 +483,31 @@ public class CorpsDesc implements Serializable {
 	@ApiModelProperty("详情")
 	private String details;
 
+
+	/**
+	 * 会员等级
+	 */
+	@ApiModelProperty("会员等级")
+	private String membershipLevel;
+	/**
+	 * 推荐人id
+	 */
+	@ApiModelProperty("推荐人id")
+	private Long referenceId;
+	/**
+	 * 推荐人
+	 */
+	@ApiModelProperty("推荐人")
+	private String referenceName;
+	/**
+	 * 积分余额
+	 */
+	@ApiModelProperty("积分余额")
+	private BigDecimal pointsBalance;
+	/**
+	 * 会员余额
+	 */
+	@ApiModelProperty("会员余额")
+	private BigDecimal balanceAmount;
+
 }

+ 23 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/GoodsDesc.java

@@ -330,6 +330,11 @@ public class GoodsDesc implements Serializable {
 	private String upperFrame;
 
 	/**
+	 * 是否为积分商品
+	 */
+	private String whetherIntegral;
+
+	/**
 	 * 销售数量
 	 */
 	private Integer salesVolumes;
@@ -370,4 +375,22 @@ public class GoodsDesc implements Serializable {
 	@TableField(exist = false)
 	private BigDecimal stockGoodsNumber;
 
+	/**
+	 * 门店积分
+	 */
+	@ApiModelProperty("门店积分")
+	private BigDecimal storeIntegral;
+
+	/**
+	 * 推荐人积分
+	 */
+	@ApiModelProperty("推荐人积分")
+	private BigDecimal referenceIntegral;
+
+	/**
+	 * 业务员积分
+	 */
+	@ApiModelProperty("业务员积分")
+	private BigDecimal salesmanIntegral;
+
 }

+ 6 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/StorageDesc.java

@@ -148,5 +148,11 @@ public class StorageDesc implements Serializable {
 	@ApiModelProperty(value = "库管员")
 	private String warehouseKeeper;
 
+	/**
+	 * 部门
+	 */
+	@ApiModelProperty(value = "部门")
+	private String deptId;
+
 
 }

+ 6 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/entity/StorageType.java

@@ -158,5 +158,11 @@ public class StorageType implements Serializable {
 	@ApiModelProperty(value = "库管员")
 	private String warehouseKeeper;
 
+	/**
+	 * 部门
+	 */
+	@ApiModelProperty(value = "部门")
+	private String deptId;
+
 
 }

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

@@ -7,6 +7,8 @@ import org.springblade.client.vo.CorpsDescVO;
 import org.springblade.common.constant.LauncherConstant;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.tool.api.R;
+import org.springblade.purchase.sales.entity.Order;
+import org.springblade.purchase.sales.entity.OrderItems;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -47,6 +49,8 @@ public interface ICorpsDescClient {
 	String INSERT_CORP = API_PREFIX + "/insertCorp";
 	String CORP_BY_IDS = API_PREFIX + "/selectByCorpIds";
 	String GET_CODE_CORP = API_PREFIX + "/getCodeCorp";
+	String UPDATE_INTEGRAL = API_PREFIX + "/updateIntegral";
+	String UPDATE_CORPS = API_PREFIX + "/updateCorps";
 	@PostMapping(CORPS_UPDATE)
 	R corpsUpdate(@RequestBody CorpsDesc corpsDesc);
 
@@ -206,4 +210,9 @@ public interface ICorpsDescClient {
 	 */
 	@GetMapping(GET_CODE_CORP)
 	List<CorpsDesc> getCodeCorp(@RequestParam("code") String code);
+
+	@PostMapping(UPDATE_INTEGRAL)
+	R updateIntegral(@RequestBody Order order);
+	@PostMapping(UPDATE_CORPS)
+	void updateCorps(@RequestBody CorpsDesc corpsDesc);
 }

+ 36 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/CorpsCechargeRecordVO.java

@@ -0,0 +1,36 @@
+/*
+ *      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.client.vo;
+
+import org.springblade.client.entity.CorpsCechargeRecord;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 会员充值记录表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-07-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "CorpsCechargeRecordVO对象", description = "会员充值记录表")
+public class CorpsCechargeRecordVO extends CorpsCechargeRecord {
+	private static final long serialVersionUID = 1L;
+
+}

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

@@ -1414,6 +1414,17 @@ public class Order implements Serializable {
 	 */
 	@ApiModelProperty(value = "配件采购数量")
 	private BigDecimal purchaseQuantityPj;
+	/**
+	 * 会员结算余额
+	 */
+	@ApiModelProperty(value = "会员结算余额")
+	private BigDecimal memberBalance;
+
+	/**
+	 * 是否为积分单据
+	 */
+	@ApiModelProperty(value = "是否为积分单据")
+	private String whetherIntegral;
 
 	public String get$buyerId() {
 		return $buyerId;

+ 8 - 1
blade-service-api/blade-stock-api/src/main/java/org/springblade/stock/vo/AppStockPartsVO.java

@@ -224,6 +224,13 @@ public class AppStockPartsVO {
 	/**
 	 * 热卖标准
 	 */
-	private String  standard;
+	private String standard;
+
+	/**
+	 * 是否为积分商品
+	 */
+	private String whetherIntegral;
+
+	private BigDecimal integral;
 
 }

+ 7 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Dept.java

@@ -27,6 +27,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 /**
  * 实体类
@@ -104,5 +105,11 @@ public class Dept implements Serializable {
 	@ApiModelProperty(value = "是否已删除")
 	private Integer isDeleted;
 
+	/**
+	 * 积分余额
+	 */
+	@ApiModelProperty(value = "积分余额")
+	private BigDecimal pointsBalance;
+
 
 }

+ 6 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClient.java

@@ -21,6 +21,8 @@ import org.springblade.core.tool.api.R;
 import org.springblade.system.entity.*;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
@@ -67,6 +69,7 @@ public interface ISysClient {
 	String DEPT_BY_IDS = API_PREFIX + "/selectByDeptIds";
 	String TENANT_ID_BY_APP_ID = API_PREFIX + "/tenantIdByAppId";
 	String GET_PARAM_SERVICE = API_PREFIX + "/getParamService";
+	String UPDATE_BY_DEPT = API_PREFIX + "/updateByDept";
 
 
 	/**
@@ -340,4 +343,7 @@ public interface ISysClient {
 	 */
 	@GetMapping(DEPT_BY_NAME_LIST)
 	R<List<Dept>> getDeptListIByName(@RequestParam("tenantId") String tenantId, @RequestParam("deptName") String deptName);
+
+	@PostMapping(UPDATE_BY_DEPT)
+	R updateByDept(@RequestBody Dept data);
 }

+ 5 - 0
blade-service-api/blade-system-api/src/main/java/org/springblade/system/feign/ISysClientFallback.java

@@ -180,4 +180,9 @@ public class ISysClientFallback implements ISysClient {
 		return R.fail("获取数据失败");
 	}
 
+	@Override
+	public R updateByDept(Dept data) {
+		return R.fail("获取数据失败");
+	}
+
 }

+ 8 - 0
blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/entity/User.java

@@ -17,10 +17,12 @@
 package org.springblade.system.user.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.core.tenant.mp.TenantEntity;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -132,4 +134,10 @@ public class User extends TenantEntity {
 	 * 运行状态(0正常,1禁用)
 	 */
 	private String workingStatus;
+
+	/**
+	 * 积分余额
+	 */
+	@ApiModelProperty(value = "积分余额")
+	private BigDecimal pointsBalance;
 }

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

@@ -61,6 +61,7 @@ public interface IUserClient {
 	String UPDATE_OPEN_ID = API_PREFIX + "/updateOpenId";
 	String SELECT_USER_BY_NAMES = API_PREFIX + "/selectUserByNames";
 	String GET_USER_BY_ROLE = API_PREFIX + "/getUserByRole";
+	String UPDATE_USER_BY_ID = API_PREFIX + "/updateUserById";
 
 	@GetMapping(LIST_USER_BY_ROLE_ID)
 	R<List<User>> listUserByRoleId(@RequestParam("roleId") Long roleId,@RequestParam("tenantId") String tenantId,@RequestParam("salesCompanyId") Long salesCompanyId);
@@ -225,4 +226,7 @@ public interface IUserClient {
 
 	@GetMapping(SELECT_USER_BY_NAMES)
 	String selectUserByNames(@RequestParam(value = "adminProfilesName", required = false) String adminProfilesName);
+
+	@PostMapping(UPDATE_USER_BY_ID)
+	void updateUserById(@RequestBody User data);
 }

+ 8 - 0
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/dto/ApplyDTO.java

@@ -53,6 +53,8 @@ public class ApplyDTO extends Acc {
 	private String checkType;
 	private String belongCompany;
 
+	private Long storageId;
+
 	/**
 	 * 费用数据
 	 */
@@ -67,4 +69,10 @@ public class ApplyDTO extends Acc {
 	 */
 	@ApiModelProperty(value = "已收账款")
 	private BigDecimal receivedAmount;
+
+	/**
+	 * 会员结算余额
+	 */
+	@TableField(exist = false)
+	private BigDecimal memberBalance;
 }

+ 6 - 0
blade-service-api/trade-finance-api/src/main/java/org/springblade/finance/vojo/Settlement.java

@@ -333,4 +333,10 @@ public class Settlement implements Serializable {
 	@ApiModelProperty(value = "支付类型")
 	private String paymentType;
 
+	/**
+	 * 会员结算余额
+	 */
+	@ApiModelProperty(value = "会员结算余额")
+	private BigDecimal memberBalance;
+
 }

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

@@ -318,13 +318,21 @@ public class AuditProecessServiceImpl extends ServiceImpl<AuditProecessMapper, A
 				message.setUrl("/approveData/index");
 				sendMsgToGroup(message, e.getAuditUserId());
 				if (ObjectUtils.isNotNull(value) && value.equals("1")){
-					auditProecess.setAuditStatus("A");
+					if("销售审批".equals(auditProecess.getProcessType())){
+						auditProecess.setAuditStatus("A");
+					}else{
+						auditProecess.setAuditStatus("N");
+					}
 				}else{
 					auditProecess.setAuditStatus("S");
 				}
 			} else {
 				if (ObjectUtils.isNotNull(value) && value.equals("1")){
-					auditProecess.setAuditStatus("A");
+					if("销售审批".equals(auditProecess.getProcessType())){
+						auditProecess.setAuditStatus("A");
+					}else{
+						auditProecess.setAuditStatus("N");
+					}
 				}else{
 					auditProecess.setAuditStatus("N");
 				}

+ 136 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsCechargeRecordController.java

@@ -0,0 +1,136 @@
+/*
+ *      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.client.corps.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.client.entity.CorpsCechargeRecord;
+import org.springblade.client.vo.CorpsCechargeRecordVO;
+import org.springblade.client.corps.service.ICorpsCechargeRecordService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 会员充值记录表 控制器
+ *
+ * @author BladeX
+ * @since 2023-07-26
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/corpscechargerecord")
+@Api(value = "会员充值记录表", tags = "会员充值记录表接口")
+public class CorpsCechargeRecordController extends BladeController {
+
+	private final ICorpsCechargeRecordService corpsCechargeRecordService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入corpsCechargeRecord")
+	public R<CorpsCechargeRecord> detail(CorpsCechargeRecord corpsCechargeRecord) {
+		CorpsCechargeRecord detail = corpsCechargeRecordService.getOne(Condition.getQueryWrapper(corpsCechargeRecord));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 会员充值记录表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入corpsCechargeRecord")
+	public R<IPage<CorpsCechargeRecord>> list(CorpsCechargeRecord corpsCechargeRecord, Query query) {
+		IPage<CorpsCechargeRecord> pages = corpsCechargeRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(corpsCechargeRecord));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 会员充值记录表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入corpsCechargeRecord")
+	public R<IPage<CorpsCechargeRecordVO>> page(CorpsCechargeRecordVO corpsCechargeRecord, Query query) {
+		IPage<CorpsCechargeRecordVO> pages = corpsCechargeRecordService.selectCorpsCechargeRecordPage(Condition.getPage(query), corpsCechargeRecord);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 会员充值记录表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入corpsCechargeRecord")
+	public R save(@Valid @RequestBody CorpsCechargeRecord corpsCechargeRecord) {
+		return R.status(corpsCechargeRecordService.save(corpsCechargeRecord));
+	}
+
+	/**
+	 * 修改 会员充值记录表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入corpsCechargeRecord")
+	public R update(@Valid @RequestBody CorpsCechargeRecord corpsCechargeRecord) {
+		return R.status(corpsCechargeRecordService.updateById(corpsCechargeRecord));
+	}
+
+	/**
+	 * 新增或修改 会员充值记录表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入corpsCechargeRecord")
+	public R submit(@Valid @RequestBody CorpsCechargeRecord corpsCechargeRecord) {
+		return corpsCechargeRecordService.submit(corpsCechargeRecord);
+	}
+
+	/**
+	 * 提交或撤销
+	 */
+	@PostMapping("/synchronous")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入corpsCechargeRecord")
+	public R synchronous(@Valid @RequestBody CorpsCechargeRecord corpsCechargeRecord) {
+		return corpsCechargeRecordService.synchronous(corpsCechargeRecord);
+	}
+
+
+	/**
+	 * 删除 会员充值记录表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(corpsCechargeRecordService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}

+ 41 - 18
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescPartsController.java

@@ -17,9 +17,11 @@ import org.springblade.client.corps.service.ICorpsTypeService;
 import org.springblade.client.corps.service.impl.CorpsAddrServiceImpl;
 import org.springblade.client.dto.CorpsDescDto;
 import org.springblade.client.entity.*;
+import org.springblade.client.feign.ICorpsAttnClient;
 import org.springblade.client.goods.excel.GoodsExcels;
 import org.springblade.client.goods.excel.GoodsOutExcel;
 import org.springblade.client.vo.CorpsDescVO;
+import org.springblade.client.vo.GoodsDescVO;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.excel.util.ExcelUtil;
 import org.springblade.core.mp.support.Condition;
@@ -32,6 +34,7 @@ import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.feign.IOrderDescClient;
 import org.springblade.stock.entity.StockGoods;
+import org.springblade.stock.vo.AppStockPartsVO;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.beans.BeanUtils;
@@ -64,6 +67,8 @@ public class CorpsDescPartsController extends BladeController {
 	private final ICorpsTypeDescService corpsTypeDescService;
 	private CorpsAddrServiceImpl corpsAddrService;
 
+	private final ICorpsAttnClient corpsAttnClient;
+
 	/**
 	 * 详情
 	 */
@@ -106,10 +111,10 @@ public class CorpsDescPartsController extends BladeController {
 				corpsDescDto1.setSettlmentAmount(orderList.stream().map(Order::getSettlmentAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 				//预(收)付款
 				BigDecimal creditGrant;
-				if (ObjectUtils.isNotNull(corpsDescDto1.getCreditGrant())){
+				if (ObjectUtils.isNotNull(corpsDescDto1.getCreditGrant())) {
 					creditGrant = corpsDescDto1.getCreditGrant().subtract(orderList.stream().map(Order::getAdvancePayment).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
 					corpsDescDto1.setAdvancePayment(creditGrant);
-				}else{
+				} else {
 					//预(收)付款
 					corpsDescDto1.setAdvancePayment(new BigDecimal(0));
 				}
@@ -246,17 +251,17 @@ public class CorpsDescPartsController extends BladeController {
 			order.setTradeType("YPJ");
 			order.setCorpType("1");
 			int count = orderDescClient.corpAnalysis(order);
-			if (count == 0 ){
-				unsales ++;
+			if (count == 0) {
+				unsales++;
 			}
 			order.setCorpType("2");
 			int count1 = orderDescClient.corpAnalysis(order);
-			if (count1 > 0 ){
-				coreCorp ++;
+			if (count1 > 0) {
+				coreCorp++;
 			}
 		}
-		if (unsales > 0){
-			lossRate = lossRate.add(new BigDecimal(unsales).divide(new BigDecimal(corpsDescList.size()),MathContext.DECIMAL32));
+		if (unsales > 0) {
+			lossRate = lossRate.add(new BigDecimal(unsales).divide(new BigDecimal(corpsDescList.size()), MathContext.DECIMAL32));
 		}
 		/*Order order = new Order();
 		order.setBillType("XS");
@@ -285,8 +290,8 @@ public class CorpsDescPartsController extends BladeController {
 		IPage<CorpsDescVO> pages = corpsDescService.selectCorpsDescPage(Condition.getPage(query), corpsDesc);
 
 		String belongtocompany = "";//所属公司ids
-		for (CorpsDescVO descVO: pages.getRecords()){
-			if (ObjectUtil.isNotEmpty(descVO.getBelongtocompany())){
+		for (CorpsDescVO descVO : pages.getRecords()) {
+			if (ObjectUtil.isNotEmpty(descVO.getBelongtocompany())) {
 				belongtocompany = belongtocompany + descVO.getBelongtocompany() + ",";
 			}
 		}
@@ -306,7 +311,7 @@ public class CorpsDescPartsController extends BladeController {
 					}
 					item.setAdminProfilesName(stringBuffer.toString());
 				}
-				if (item.getBelongtocompany() != null){
+				if (item.getBelongtocompany() != null) {
 					if (ObjectUtil.isNotEmpty(corpsDescList)) {
 						item.setBelongCompany(corpsDescList.stream().filter(e -> e.getId().toString().equals(item.getBelongtocompany())).findFirst().get().getCname());
 					}
@@ -325,7 +330,7 @@ public class CorpsDescPartsController extends BladeController {
 				}
 				//获取客户地址
 				List<CorpsAddr> corpsAddrList = corpsAddrService.list(new QueryWrapper<CorpsAddr>().eq("pid", item.getId()).eq("is_deleted", 0).eq("status", 0).eq("type", 0));
-				if (corpsAddrList != null && corpsAddrList.size()>0) {
+				if (corpsAddrList != null && corpsAddrList.size() > 0) {
 					item.setAddr(corpsAddrList.get(0).getDetailedAddress());
 				}
 			});
@@ -446,17 +451,17 @@ public class CorpsDescPartsController extends BladeController {
 			order.setTradeType("GN");
 			order.setCorpType("1");
 			int count = orderDescClient.corpAnalysisDWT(order);
-			if (count == 0 ){
-				unsales ++;
+			if (count == 0) {
+				unsales++;
 			}
 			order.setCorpType("2");
 			int count1 = orderDescClient.corpAnalysisDWT(order);
-			if (count1 > 0 ){
-				coreCorp ++;
+			if (count1 > 0) {
+				coreCorp++;
 			}
 		}
-		if (unsales > 0){
-			lossRate = lossRate.add(new BigDecimal(unsales).divide(new BigDecimal(corpsDescList.size()),MathContext.DECIMAL32).multiply(new BigDecimal("100")));
+		if (unsales > 0) {
+			lossRate = lossRate.add(new BigDecimal(unsales).divide(new BigDecimal(corpsDescList.size()), MathContext.DECIMAL32).multiply(new BigDecimal("100")));
 		}
 
 		map.put("sumNumber", corpsDescList.size());
@@ -466,4 +471,22 @@ public class CorpsDescPartsController extends BladeController {
 		return R.data(map);
 	}
 
+	/**
+	 * 获取用户信息
+	 */
+	@GetMapping("/getCorpDesc")
+	public R<CorpsDesc> getCorpDesc() {
+		CorpsDesc corpsDesc = new CorpsDesc();
+		if (AuthUtil.getUserRole().equals("客户")) {
+			CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
+			if (ObjectUtils.isNull(corpsAttn)) {
+				throw new RuntimeException("未查到用户信息");
+			} else {
+				corpsDesc = corpsDescService.getCorpId(corpsAttn.getPid());
+
+			}
+		}
+		return R.data(corpsDesc);
+	}
+
 }

+ 105 - 16
blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java

@@ -3,6 +3,7 @@ package org.springblade.client.corps.feign;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import org.springblade.client.corps.assemble.mapstruct.CorpsDescMapstructMapper;
@@ -10,12 +11,12 @@ import org.springblade.client.corps.service.ICorpsAddrService;
 import org.springblade.client.corps.service.ICorpsAttnService;
 import org.springblade.client.corps.service.ICorpsBankService;
 import org.springblade.client.corps.service.ICorpsDescService;
-import org.springblade.client.entity.CorpsAddr;
-import org.springblade.client.entity.CorpsAttn;
-import org.springblade.client.entity.CorpsBank;
-import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.*;
 import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.client.goods.service.IGoodsDescService;
 import org.springblade.client.goods.service.IGoodsTypeService;
+import org.springblade.client.serial.service.IStorageDescService;
+import org.springblade.client.serial.service.IStorageTypeService;
 import org.springblade.client.vo.CorpsDescVO;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.mp.support.Condition;
@@ -25,11 +26,20 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tenant.annotation.TenantIgnore;
 import org.springblade.core.tool.api.R;
+import org.springblade.purchase.sales.entity.Order;
+import org.springblade.purchase.sales.entity.OrderItems;
+import org.springblade.purchase.sales.feign.IOrderItemsClient;
+import org.springblade.system.entity.Dept;
+import org.springblade.system.feign.ISysClient;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RestController;
 import springfox.documentation.annotations.ApiIgnore;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -52,6 +62,16 @@ public class CorpsDescClient implements ICorpsDescClient {
 
 	private final ICorpsAddrService corpsAddrService;
 
+	private final IGoodsDescService goodsDescService;
+
+	private final IStorageDescService storageDescService;
+
+	private final ISysClient sysClient;
+
+	private final IUserClient userClient;
+
+	private final IOrderItemsClient orderItemsClient;
+
 	@Override
 	@PostMapping(CORPS_UPDATE)
 	public R corpsUpdate(CorpsDesc corpsDesc) {
@@ -73,11 +93,12 @@ public class CorpsDescClient implements ICorpsDescClient {
 	public R<CorpsDesc> getCorpMessage(Long Id) {
 		return R.data(service.getById(Id));
 	}
+
 	@Override
 	@GetMapping(getMessageYCP)
 	@TenantIgnore
-	public R<CorpsDesc> getCorpMessageYCP(Long Id,String tenantId) {
-		return R.data(service.getOne(new LambdaQueryWrapper<CorpsDesc>().eq(CorpsDesc::getId,Id).eq(CorpsDesc::getTenantId,tenantId).eq(CorpsDesc::getIsDeleted,0)));
+	public R<CorpsDesc> getCorpMessageYCP(Long Id, String tenantId) {
+		return R.data(service.getOne(new LambdaQueryWrapper<CorpsDesc>().eq(CorpsDesc::getId, Id).eq(CorpsDesc::getTenantId, tenantId).eq(CorpsDesc::getIsDeleted, 0)));
 	}
 
 	@Override
@@ -176,15 +197,15 @@ public class CorpsDescClient implements ICorpsDescClient {
 	@Override
 	public List<CorpsDesc> getCorpsType(String corpType) {
 		LambdaQueryWrapper<CorpsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(CorpsDesc::getIsDeleted,0);
-		lambdaQueryWrapper.eq(CorpsDesc::getCorpType,corpType);
-		lambdaQueryWrapper.eq(CorpsDesc::getTenantId,SecureUtil.getTenantId());
+		lambdaQueryWrapper.eq(CorpsDesc::getIsDeleted, 0);
+		lambdaQueryWrapper.eq(CorpsDesc::getCorpType, corpType);
+		lambdaQueryWrapper.eq(CorpsDesc::getTenantId, SecureUtil.getTenantId());
 		return service.list(lambdaQueryWrapper);
 	}
 
 	@Override
-	public CorpsDesc getAgentCode(String code, String tenantId,String corpType) {
-		return service.selectCode(code,tenantId,corpType);
+	public CorpsDesc getAgentCode(String code, String tenantId, String corpType) {
+		return service.selectCode(code, tenantId, corpType);
 	}
 
 	@Override
@@ -194,24 +215,24 @@ public class CorpsDescClient implements ICorpsDescClient {
 
 	@Override
 	@GetMapping(CORP_BY_IDS)
-	public List<CorpsDesc> selectByCorpIds(String ids){
+	public List<CorpsDesc> selectByCorpIds(String ids) {
 		return service.selectByCorpIds(ids);
 	}
 
 	@Override
 	public List<CorpsAddr> getCorpsAddr(Long pid, String tenantId) {
-		return corpsAddrService.getCorpsAddr(pid,tenantId);
+		return corpsAddrService.getCorpsAddr(pid, tenantId);
 	}
 
 	@Override
 	public List<CorpsBank> getCorpsBank(Long pid, String tenantId) {
-		return bankService.getCorpsBank(pid,tenantId);
+		return bankService.getCorpsBank(pid, tenantId);
 	}
 
 	/**
 	 * 添加客户
 	 *
-	 * @param corpsDesc    客户信息
+	 * @param corpsDesc 客户信息
 	 * @return
 	 */
 	@Override
@@ -226,8 +247,76 @@ public class CorpsDescClient implements ICorpsDescClient {
 	}
 
 	@Override
-	public List<CorpsDesc> getCodeCorp(String code){
+	public List<CorpsDesc> getCodeCorp(String code) {
 		return service.getCodeCorp(code);
 	}
 
+	@Override
+	public R updateIntegral(Order order) {
+		List<OrderItems> orderItemsList = new ArrayList<>();
+		if (ObjectUtils.isNotNull(order.getOrderItemsList()) && order.getOrderItemsList().size() > 0) {
+			orderItemsList = order.getOrderItemsList();
+		} else {
+			R<List<OrderItems>> res = orderItemsClient.selectListYCP(order.getId(), AuthUtil.getTenantId());
+			if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+				orderItemsList = res.getData();
+			}
+		}
+		if (orderItemsList.size()>0){
+			if (ObjectUtils.isNotNull(order.getCorpId()) && ObjectUtils.isNotNull(order.getStorageId())) {
+				List<Long> goodsId = orderItemsList.stream().map(OrderItems::getItemId).distinct().collect(Collectors.toList());
+				CorpsDesc corpsDesc = service.getById(order.getCorpId());
+				StorageDesc storageDesc = storageDescService.getById(order.getStorageId());
+				if (ObjectUtils.isNull(storageDesc)) {
+					throw new RuntimeException("未找到仓库信息");
+				}
+				if (ObjectUtils.isNotNull(corpsDesc) && goodsId.size() > 0) {
+					List<GoodsDesc> goodsDescList = goodsDescService.list(new LambdaQueryWrapper<GoodsDesc>()
+						.eq(GoodsDesc::getTenantId, AuthUtil.getTenantId())
+						.eq(GoodsDesc::getIsDeleted, 0)
+						.in(GoodsDesc::getId, goodsId));
+					BigDecimal salesmanIntegral = new BigDecimal("0.00");
+					BigDecimal pointsBalance = corpsDesc.getPointsBalance();
+					BigDecimal storeIntegral = new BigDecimal("0.00");
+					BigDecimal referenceIntegral = new BigDecimal("0.00");
+					CorpsDesc corps = service.getById(corpsDesc.getReferenceId());
+					if (ObjectUtils.isNotNull(corps)) {
+						referenceIntegral = corps.getPointsBalance();
+					}
+					for (OrderItems item : orderItemsList) {
+						GoodsDesc goodsDesc = goodsDescList.stream().filter(e -> e.getId().equals(item.getItemId())).findFirst().orElse(new GoodsDesc());
+						if (ObjectUtils.isNotNull(goodsDesc)) {
+							pointsBalance = pointsBalance.add(item.getStorageInQuantity().multiply(goodsDesc.getIntegral()));
+							storeIntegral = storeIntegral.add(item.getStorageInQuantity().multiply(goodsDesc.getStoreIntegral()));
+							referenceIntegral = referenceIntegral.add(item.getStorageInQuantity().multiply(goodsDesc.getReferenceIntegral()));
+							salesmanIntegral = salesmanIntegral.add(item.getStorageInQuantity().multiply(goodsDesc.getSalesmanIntegral()));
+						}
+					}
+					corpsDesc.setPointsBalance(pointsBalance);
+					corps.setPointsBalance(referenceIntegral);
+					service.updateById(corpsDesc);
+					service.updateById(corps);
+					if (ObjectUtils.isNotNull(corpsDesc.getAdminProfiles())) {
+						R<User> user = userClient.userInfoById(Long.parseLong(corpsDesc.getAdminProfiles()));
+						if (user.isSuccess() && ObjectUtils.isNotNull(user.getData())) {
+							user.getData().setPointsBalance(user.getData().getPointsBalance().add(salesmanIntegral));
+							userClient.updateUserById(user.getData());
+						}
+					}
+					R<Dept> res = sysClient.getDept(Long.parseLong(storageDesc.getDeptId()));
+					if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+						res.getData().setPointsBalance(res.getData().getPointsBalance().add(storeIntegral));
+						sysClient.updateByDept(res.getData());
+					}
+				}
+			}
+		}
+		return R.data("操作成功");
+	}
+
+	@Override
+	public void updateCorps(CorpsDesc corpsDesc) {
+		service.updateById(corpsDesc);
+	}
+
 }

+ 42 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/mapper/CorpsCechargeRecordMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      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.client.corps.mapper;
+
+import org.springblade.client.entity.CorpsCechargeRecord;
+import org.springblade.client.vo.CorpsCechargeRecordVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 会员充值记录表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-07-26
+ */
+public interface CorpsCechargeRecordMapper extends BaseMapper<CorpsCechargeRecord> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param corpsCechargeRecord
+	 * @return
+	 */
+	List<CorpsCechargeRecordVO> selectCorpsCechargeRecordPage(IPage page, CorpsCechargeRecordVO corpsCechargeRecord);
+
+}

+ 32 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/mapper/CorpsCechargeRecordMapper.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.client.corps.mapper.CorpsCechargeRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="corpsCechargeRecordResultMap" type="org.springblade.client.entity.CorpsCechargeRecord">
+        <id column="id" property="id"/>
+        <result column="corp_id" property="corpId"/>
+        <result column="corp_name" property="corpName"/>
+        <result column="time" property="time"/>
+        <result column="type" property="type"/>
+        <result column="reality_amount" property="realityAmount"/>
+        <result column="give_amount" property="giveAmount"/>
+        <result column="total_amount" property="totalAmount"/>
+        <result column="operator_id" property="operatorId"/>
+        <result column="operator_name" property="operatorName"/>
+        <result column="remarks" property="remarks"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+    </resultMap>
+
+
+    <select id="selectCorpsCechargeRecordPage" resultMap="corpsCechargeRecordResultMap">
+        select * from basic_corps_cecharge_record where is_deleted = 0
+    </select>
+
+</mapper>

+ 16 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/mapper/CorpsDescMapper.xml

@@ -49,6 +49,22 @@
         <result column="admin_profiles" property="adminProfiles"/>
         <result column="package_remarks" property="packageRemarks"/>
         <result column="agent_code" property="agentCode"/>
+        <result column="initials" property="initials"/>
+        <result column="taxpayer_difference_code" property="taxpayerDifferenceCode"/>
+        <result column="line" property="line"/>
+        <result column="mailbox" property="mailbox"/>
+        <result column="Fax" property="Fax"/>
+        <result column="arrears" property="arrears"/>
+        <result column="telephone" property="telephone"/>
+        <result column="labels" property="labels"/>
+        <result column="customs_no" property="customsNo"/>
+        <result column="shopping_mall" property="shoppingMall"/>
+        <result column="opening_amount" property="openingAmount"/>
+        <result column="details" property="details"/>
+        <result column="membership_level" property="membershipLevel"/>
+        <result column="reference_id" property="referenceId"/>
+        <result column="reference_name" property="referenceName"/>
+        <result column="points_balance" property="pointsBalance"/>
     </resultMap>
 
 

+ 45 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsCechargeRecordService.java

@@ -0,0 +1,45 @@
+/*
+ *      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.client.corps.service;
+
+import org.springblade.client.entity.CorpsCechargeRecord;
+import org.springblade.client.vo.CorpsCechargeRecordVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.tool.api.R;
+
+/**
+ * 会员充值记录表 服务类
+ *
+ * @author BladeX
+ * @since 2023-07-26
+ */
+public interface ICorpsCechargeRecordService extends IService<CorpsCechargeRecord> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param corpsCechargeRecord
+	 * @return
+	 */
+	IPage<CorpsCechargeRecordVO> selectCorpsCechargeRecordPage(IPage<CorpsCechargeRecordVO> page, CorpsCechargeRecordVO corpsCechargeRecord);
+
+	R submit(CorpsCechargeRecord corpsCechargeRecord);
+
+	R synchronous(CorpsCechargeRecord corpsCechargeRecord);
+}

+ 85 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsCechargeRecordServiceImpl.java

@@ -0,0 +1,85 @@
+/*
+ *      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.client.corps.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.AllArgsConstructor;
+import org.springblade.client.corps.mapper.CorpsCechargeRecordMapper;
+import org.springblade.client.corps.service.ICorpsCechargeRecordService;
+import org.springblade.client.corps.service.ICorpsDescService;
+import org.springblade.client.entity.CorpsCechargeRecord;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.vo.CorpsCechargeRecordVO;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 会员充值记录表 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-07-26
+ */
+@Service
+@AllArgsConstructor
+public class CorpsCechargeRecordServiceImpl extends ServiceImpl<CorpsCechargeRecordMapper, CorpsCechargeRecord> implements ICorpsCechargeRecordService {
+
+
+	private final ICorpsDescService corpsDescService;
+
+	@Override
+	public IPage<CorpsCechargeRecordVO> selectCorpsCechargeRecordPage(IPage<CorpsCechargeRecordVO> page, CorpsCechargeRecordVO corpsCechargeRecord) {
+		return page.setRecords(baseMapper.selectCorpsCechargeRecordPage(page, corpsCechargeRecord));
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R submit(CorpsCechargeRecord corpsCechargeRecord) {
+		corpsCechargeRecord.setTotalAmount(corpsCechargeRecord.getGiveAmount().add(corpsCechargeRecord.getRealityAmount()));
+		this.saveOrUpdate(corpsCechargeRecord);
+		return R.data(corpsCechargeRecord);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R synchronous(CorpsCechargeRecord corpsCechargeRecord) {
+		corpsCechargeRecord.setTotalAmount(corpsCechargeRecord.getGiveAmount().add(corpsCechargeRecord.getRealityAmount()));
+		this.saveOrUpdate(corpsCechargeRecord);
+		CorpsDesc corpsDesc = corpsDescService.getById(corpsCechargeRecord.getCorpId());
+		if (1 == corpsCechargeRecord.getSynchronous()) {
+			if (ObjectUtils.isNotNull(corpsDesc)) {
+				corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().add(corpsCechargeRecord.getTotalAmount()));
+				corpsDescService.updateById(corpsDesc);
+			}
+		} else if (2 == corpsCechargeRecord.getSynchronous()) {
+			if (ObjectUtils.isNotNull(corpsDesc)) {
+				if (corpsDesc.getBalanceAmount().compareTo(corpsCechargeRecord.getTotalAmount()) < 0) {
+					throw new RuntimeException("余额不足,撤销失败");
+				}
+				corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().subtract(corpsCechargeRecord.getTotalAmount()));
+				corpsDescService.updateById(corpsDesc);
+			}
+		}
+		return R.data(corpsCechargeRecord);
+	}
+
+}

+ 4 - 2
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java

@@ -3,6 +3,7 @@ package org.springblade.client.corps.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.BeanUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -1157,6 +1158,9 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 	public CorpsDescDto getDetailsById(Long id) {
 		CorpsDescDto corpsDescDto = new CorpsDescDto();
 		CorpsDesc corpsDesc = baseMapper.selectById(id);
+		//客户信息
+		BeanUtil.copyProperties(corpsDesc,corpsDescDto);
+		corpsDescDto.setBalanceAmounts(corpsDesc.getBalanceAmount());
 		//应收账款
 		BigDecimal debitAmount = new BigDecimal("0.00");
 		//已收账款
@@ -1180,8 +1184,6 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 				corpsDescDto.setAdminProfilesName(stringBuffer.toString());
 			}
 
-			//客户信息
-			corpsDescDto = BeanUtil.copy(corpsDesc, CorpsDescDto.class);
 			//获取订单记录
 			Order order = new Order();
 			order.setCorpId(corpsDesc.getId());

+ 0 - 289
blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/controller/TongLianPaymentController.java

@@ -78,296 +78,7 @@ public class TongLianPaymentController extends BladeController {
 	@ApiIgnore
 	@RequestMapping(value = "/notify", method = RequestMethod.POST, produces = "text/html;charset=UTF-8")
 	public void notify(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response) {
-
 		paymentService.notifyMethod(request,response);
-
-		/*try {
-			request.setCharacterEncoding("UTF-8");//通知传输的编码为GBK
-			response.setCharacterEncoding("UTF-8");
-			TreeMap<String, String> params = NotifyServlet.getParams(request);
-			System.out.println("回调函数数据======》" + params.toString());
-			String appKey;
-
-			WechatMark wechatMark = new WechatMark();
-
-			Parameters parameters = new Parameters();
-			parameters.setAppId(AnalysisMapUtils.getString("appid", params));
-			parameters.setCusId(AnalysisMapUtils.getString("cusid", params));
-			Parameters parametersDetails = tongLianPaymentClient.getParametersDetails(parameters);
-			if (ObjectUtils.isNull(parametersDetails)) {
-				wechatMark.setRemark("未找到租户,异常支付");
-			}
-
-			if ("RSA".equals(params.get("signtype"))) {
-				appKey = parametersDetails.getSybRsacusprikey();
-			}else if ("SM2".equals(params.get("signtype"))) {
-				appKey = parametersDetails.getSybSmtlpubkey();
-			}else{
-				appKey = parametersDetails.getSybMdAppkey();
-			}
-			boolean isSign = SybUtil.validSign(params, appKey, params.get("signtype"));// 接受到推送通知,首先验签
-			System.out.println("验签结果:" + isSign);
-
-			wechatMark.setCreateTime(new Date());
-			wechatMark.setType("支付");
-			if (isSign) {
-				String trxstatus = AnalysisMapUtils.getString("trxstatus", params);
-				OutputStream out = response.getOutputStream();
-				if (Objects.equals(trxstatus, "0000")) {
-					response.getWriter().write(AnalysisMapUtils.setXML("SUCCESS", "OK"));
-				} else {
-					response.getWriter().write(AnalysisMapUtils.setXML("error", "OK"));
-				}
-				if (Objects.equals(trxstatus, "0000")) {
-					wechatMark.setSrcBillNo(AnalysisMapUtils.getString("cusorderid", params));
-					wechatMark.setSerialNumber(AnalysisMapUtils.getString("trxid", params));
-					wechatMark.setAmount(new BigDecimal(Objects.requireNonNull(AnalysisMapUtils.getString("trxamt", params))).divide(new BigDecimal(100), MathContext.DECIMAL32).setScale(2, BigDecimal.ROUND_HALF_UP));
-
-					//支付成功业务处理
-					Order order = new Order();
-					order.setSysNo(AnalysisMapUtils.getString("cusorderid", params));
-
-					if (ObjectUtils.isNotNull(parametersDetails)) {
-						wechatMark.setTenantId(parametersDetails.getTenantId());
-						order.setTenantId(parametersDetails.getTenantId());
-					} else {
-						wechatMark.setTenantId("000000");
-						order.setTenantId("000000");
-						wechatMark.setRemark("未找到租户,异常支付");
-					}
-
-					Order selectOrder = orderDescClient.getByOrder(order);
-					if (ObjectUtils.isNotNull(selectOrder)) {
-						System.out.println("第一步");
-						selectOrder.setStatus(3);
-						selectOrder.setConfirmStatus(2);
-						selectOrder.setActualPaymentStatus(2);
-						selectOrder.setPaymentAmountTl(new BigDecimal(Objects.requireNonNull(AnalysisMapUtils.getString("trxamt", params))).divide(new BigDecimal(100), MathContext.DECIMAL32).setScale(2, BigDecimal.ROUND_HALF_UP));
-						if (ObjectUtils.isNotNull(selectOrder) && ObjectUtils.isNotNull(selectOrder.getDebitAmount())) {
-							System.out.println("第二步");
-							List<Settlement> settlementList = new ArrayList<>();
-							Settlement settlement = new Settlement();
-							if ("XS".equals(selectOrder.getBillType())) {
-								settlement.setDc("d");
-								settlement.setBillType("收费");
-							} else {
-								settlement.setDc("c");
-								settlement.setBillType("付费");
-							}
-							settlement.setSettlementDate(new Date());
-							settlement.setAccount("微信支付");
-							settlement.setAmount(selectOrder.getPaymentAmountTl());
-							settlement.setOverPayment(new BigDecimal("0.00"));
-							settlementList.add(settlement);
-							selectOrder.setCurrentAmount(selectOrder.getPaymentAmountTl());
-							if ("2".equals(selectOrder.getOrderSource())) {
-								System.out.println("第三步");
-								R<List<OrderItems>> res = orderItemsClient.selectListYCP(selectOrder.getId(), order.getTenantId());
-								if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
-									System.out.println("第三步明细" + res.getData());
-									for (OrderItems orderItems : res.getData()) {
-										System.out.println("第三步明细数据" + orderItems.toString());
-										if ("XS".equals(selectOrder.getBillType())) {
-											orderItems.setAmount(orderItems.getStorageInQuantity().multiply(orderItems.getPrice(), MathContext.DECIMAL32));
-										} else {
-											orderItems.setAmount(orderItems.getStorageInQuantity().multiply(orderItems.getPurchasePrice(), MathContext.DECIMAL32));
-										}
-										BigDecimal stockPrice = new BigDecimal("0.00");
-										BigDecimal surplusRouteQuantity = new BigDecimal("0.00");
-										BigDecimal balanceQuantity = new BigDecimal("0.00");
-										BigDecimal balanceAmount = new BigDecimal("0.00");
-										//获取本商品库存
-										R<StockGoodsVO> r = stockGoodsClient.selectStockPartsYCP(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null, order.getTenantId());
-										if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
-											System.out.println("第三步库存" + res.getData());
-											if ("XS".equals(selectOrder.getBillType())) {
-												System.out.println("第三步原库存" + r.getData().getSurplusRouteQuantity());
-												System.out.println("第三步明细数量" + orderItems.getStorageInQuantity());
-												surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().subtract(orderItems.getStorageInQuantity()));
-												balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
-												System.out.println("第三步新库存" + surplusRouteQuantity);
-												if(new BigDecimal("0.00").compareTo(balanceQuantity) <= 0 ){
-													balanceAmount = balanceAmount.add(orderItems.getStorageInQuantity().multiply(orderItems.getPurchaseCost(), MathContext.DECIMAL32));
-													System.out.println("第三步新库存金额-01" + balanceAmount);
-													if (!new BigDecimal("0.00").equals(balanceAmount) && !new BigDecimal("0.00").equals(balanceQuantity)){
-														stockPrice = stockPrice.add(balanceAmount.divide(orderItems.getStorageInQuantity(), MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
-														System.out.println("第三步新库存价-01" + stockPrice + "数量:"+orderItems.getStorageInQuantity());
-													}else{
-														stockPrice = stockPrice.add(balanceAmount);
-														System.out.println("第三步新库存价-02" + stockPrice);
-													}
-												}else{
-													balanceAmount = balanceAmount.add(balanceQuantity.multiply(orderItems.getPurchaseCost(), MathContext.DECIMAL32));
-													System.out.println("第三步新库存金额-02" + balanceAmount);
-													if (!new BigDecimal("0.00").equals(balanceAmount) && !new BigDecimal("0.00").equals(balanceQuantity)){
-														stockPrice = stockPrice.add(balanceAmount.divide(balanceQuantity, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
-														System.out.println("第三步新库存价-01" + stockPrice+ "数量:"+balanceQuantity);
-													}else{
-														stockPrice = stockPrice.add(balanceAmount);
-														System.out.println("第三步新库存价-02" + stockPrice);
-													}
-												}
-												System.out.println("第三步新库存价" + stockPrice);
-												r.getData().setOutQuantity(r.getData().getOutQuantity().add(orderItems.getStorageInQuantity()));
-												r.getData().setOutAmount(r.getData().getOutAmount().add(orderItems.getPrice().multiply(orderItems.getStorageInQuantity())));
-											} else {
-												surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().add(orderItems.getStorageInQuantity()));
-												balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
-												balanceAmount = balanceAmount.add(balanceQuantity.multiply(orderItems.getPrice(), MathContext.DECIMAL32));
-												stockPrice = stockPrice.add(balanceAmount.divide(balanceQuantity, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
-
-												r.getData().setInQuantity(r.getData().getInQuantity().add(orderItems.getStorageInQuantity()));
-												r.getData().setInAmount(r.getData().getInAmount().add(orderItems.getAmount()));
-											}
-											r.getData().setSurplusRouteQuantity(surplusRouteQuantity);
-											r.getData().setBalanceQuantity(balanceQuantity);
-											r.getData().setBalanceAmount(balanceAmount);
-											r.getData().setStockPrice(stockPrice);
-											r.getData().setTenantId(order.getTenantId());
-											boolean a = stockGoodsClient.updateStockYCP(r.getData());
-											System.out.println("第三步库存" + a);
-										} else {
-											StockGoods stockGoods = new StockGoods();
-											if ("CG".equals(selectOrder.getBillType())) {
-												stockGoods.setGoodsId(orderItems.getItemId());
-												stockGoods.setStorageId(orderItems.getStorageId());
-												stockGoods.setPurchasePrice(orderItems.getPrice());
-												stockGoods.setStockPrice(orderItems.getPrice());
-												stockGoods.setBalanceQuantity(orderItems.getStorageInQuantity());
-												stockGoods.setBalanceAmount(stockGoods.getBalanceQuantity().multiply(orderItems.getPrice()));
-												stockGoods.setSurplusRouteQuantity(orderItems.getStorageInQuantity());
-												stockGoods.setTenantId(order.getTenantId());
-												stockGoodsClient.saveStockYCP(stockGoods);
-											} else {
-												stockGoods.setGoodsId(orderItems.getItemId());
-												stockGoods.setStorageId(orderItems.getStorageId());
-												stockGoods.setPurchasePrice(orderItems.getPrice());
-												stockGoods.setStockPrice(orderItems.getPrice());
-												stockGoods.setBalanceQuantity(new BigDecimal("0.00").subtract(orderItems.getStorageInQuantity()));
-												stockGoods.setBalanceAmount(new BigDecimal("0.00").subtract(stockGoods.getBalanceQuantity().multiply(orderItems.getPrice())));
-												stockGoods.setSurplusRouteQuantity(new BigDecimal("0.00").subtract(orderItems.getStorageInQuantity()));
-												stockGoods.setTenantId(order.getTenantId());
-												stockGoodsClient.saveStockYCP(stockGoods);
-											}
-										}
-									}
-								} else {
-									wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,库存加减失败!原因:未查到单据明细信息");
-									wechatMark.setStatus(2);
-								}
-							}
-							//账单支付处理
-							//获取所属公司中文名
-							if (selectOrder.getBelongToCorpId() != null) {
-								R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessageYCP(selectOrder.getBelongToCorpId(), order.getTenantId());
-								if (corpMessage.isSuccess() && corpMessage.getData() != null) {
-									selectOrder.setBelongToCorpName(corpMessage.getData().getCname());
-								}
-							}
-							//获取客户中文名
-							if (selectOrder.getCorpId() != null) {
-								R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessageYCP(selectOrder.getCorpId(), order.getTenantId());
-								if (corpMessage.isSuccess() && corpMessage.getData() != null) {
-									selectOrder.setCorpsName(corpMessage.getData().getCname());
-								}
-							}
-							BigDecimal amount = BigDecimal.ZERO;//对账金额   销售订单生成的金额  销售金额-本次使用返利金额+费用明细
-							BigDecimal quantity = BigDecimal.ZERO;//对账数量 数量为 就是轮胎条数的和
-							BigDecimal price = BigDecimal.ZERO;//对账单价
-							ApplyDTO applyDTO = new ApplyDTO();
-							applyDTO.setCompanyid(selectOrder.getBelongToCorpId());
-							applyDTO.setTradeType(selectOrder.getTradeType());
-							applyDTO.setBelongCompany(selectOrder.getBelongToCorpName());
-							applyDTO.setAccDate(selectOrder.getBusinesDate());
-							applyDTO.setPaymentStatus("已支付");
-							applyDTO.setPaymentType("1");
-							if ("CG".equals(selectOrder.getBillType())) {
-								applyDTO.setDc("C");
-								applyDTO.setBillType("付费");
-							} else if ("XS".equals(selectOrder.getBillType())) {
-								applyDTO.setDc("D");
-								applyDTO.setBillType("收费");
-							}
-							applyDTO.setSettlementList(settlementList);
-
-							amount = amount.add(selectOrder.getOrderAmount());
-							quantity = quantity.add(new BigDecimal(1));
-							price = price.add(amount);
-
-							applyDTO.setSrcParentId(selectOrder.getId());
-							applyDTO.setSrcSysno(selectOrder.getSysNo());
-							applyDTO.setItemType(selectOrder.getTradeType());
-							applyDTO.setCorpId(selectOrder.getCorpId());
-							applyDTO.setSrcId(selectOrder.getId());
-							applyDTO.setSrcFeesId(selectOrder.getId());
-							applyDTO.setCurrency("CNY");
-							applyDTO.setExchangeRate(selectOrder.getExchangeRate());
-							applyDTO.setTaxRate(BigDecimal.ZERO);
-							applyDTO.setSrcType(4);
-							applyDTO.setTradeType(selectOrder.getTradeType());
-							applyDTO.setChargeMember(selectOrder.getChargeMember());
-							applyDTO.setUnit("条");
-							applyDTO.setRemarks(selectOrder.getOrderRemark());
-							//获取费用id
-							R<FeesDesc> fees = feesDescClient.getFeesByNameYCP("货款", order.getTenantId());
-							if (fees.isSuccess() && fees.getData() != null) {
-								applyDTO.setCostType(fees.getData().getId().toString());
-							}
-							applyDTO.setSettlementAmount(selectOrder.getSettlmentAmount().add(selectOrder.getPaymentAmountTl()));
-							applyDTO.setQuantity(new BigDecimal(1));
-							applyDTO.setSrcDate(selectOrder.getBusinesDate());
-							applyDTO.setSrcBillNo(selectOrder.getOrderNo());
-							applyDTO.setAccSysNo(selectOrder.getSysNo());
-							applyDTO.setSrcRefno(selectOrder.getSysNo());
-							applyDTO.setRetrieval(selectOrder.getAdvanceCollectionDate());
-							applyDTO.setCorpName(selectOrder.getCorpsName());
-							applyDTO.setAmount(amount);
-							applyDTO.setPrice(price);
-							applyDTO.setQuantity(quantity);
-							applyDTO.setTenantId(order.getTenantId());
-							BigDecimal receivedAmount = selectOrder.getPaymentAmountTl();
-							receivedAmount = receivedAmount.add(selectOrder.getSettlmentAmount());
-							amount = selectOrder.getDebitAmount().subtract(receivedAmount);
-							selectOrder.setSettlmentAmount(receivedAmount);
-							selectOrder.setBalanceAmount(amount);
-							orderDescClient.updateOrderYCP(selectOrder);
-							//生成账单
-							R paymentApply = financeClient.paymentApplyParts(applyDTO);
-							if (!paymentApply.isSuccess()) {
-								wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,账单结算失败!原因:" + paymentApply.getMsg());
-								wechatMark.setStatus(2);
-							} else {
-								wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付成功");
-								wechatMark.setStatus(1);
-							}
-						} else {
-							wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,系统未查到收款信息,账单结算失败!");
-							wechatMark.setStatus(2);
-							System.out.println("第二步报错");
-						}
-					} else {
-						wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,系统未查到单据信息,账单结算失败!");
-						wechatMark.setStatus(2);
-						System.out.println("第一部步失败");
-					}
-					wechatMarkService.save(wechatMark);
-					response.getWriter().write(AnalysisMapUtils.setXML("SUCCESS", "OK"));
-				} else {
-					//订单编号
-					wechatMark.setCause("订单" + AnalysisMapUtils.getString("cusorderid", params) + "支付失败!" + "原因:" + AnalysisMapUtils.getString("errmsg", params));
-					wechatMark.setStatus(2);
-					wechatMarkService.save(wechatMark);
-					response.getWriter().write(AnalysisMapUtils.setXML("error", "OK"));
-				}
-			} else {
-				wechatMark.setCause("签名验证失败");
-				wechatMark.setStatus(2);
-				wechatMarkService.save(wechatMark);
-				throw new RuntimeException("签名验证失败");
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}*/
 	}
 
 	/**

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

@@ -635,10 +635,12 @@ public class PaymentServiceImpl implements IPaymentService {
 									if (stockGoodsList.size() > 0) {
 										stockGoodsClient.saveStockListYCP(stockGoodsList);
 									}
+									selectOrder.setOrderItemsList(res.getData());
 								} else {
 									wechatMark.setCause(AnalysisMapUtils.getString("cusorderid", params) + "单号支付成功,库存加减失败!原因:未查到单据明细信息");
 									wechatMark.setStatus(2);
 								}
+								corpsDescClient.updateIntegral(selectOrder);
 							}
 							//账单支付处理
 							//获取所属公司中文名

+ 152 - 40
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/OrderController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.purchase.sales.controller;
 
+import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -50,6 +51,8 @@ import org.springblade.finance.vojo.Acc;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.entity.OrderFees;
 import org.springblade.purchase.sales.entity.OrderItems;
+import org.springblade.purchase.sales.entity.OrderParts;
+import org.springblade.purchase.sales.excel.OrderItemsExport;
 import org.springblade.purchase.sales.excel.SaleOrderExcel;
 import org.springblade.purchase.sales.service.*;
 import org.springblade.purchase.sales.vo.OrderItemsVO;
@@ -163,10 +166,10 @@ public class OrderController extends BladeController {
 		lambdaQueryWrapper.le(Func.isNotEmpty(order.getArrivalTimeEnd()), Order::getArrivalTime, order.getArrivalTimeEnd());//确认到货日期结束
 
 		lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderRemark()), Order::getOrderRemark, order.getOrderRemark());//备注
-		if (order.getGathering() != null && order.getGathering() == 0){
-			lambdaQueryWrapper.eq(Order::getBalanceAmount,BigDecimal.ZERO);
-		}else if (order.getGathering() != null && order.getGathering() == 1){
-			lambdaQueryWrapper.gt(Order::getBalanceAmount,BigDecimal.ZERO);
+		if (order.getGathering() != null && order.getGathering() == 0) {
+			lambdaQueryWrapper.eq(Order::getBalanceAmount, BigDecimal.ZERO);
+		} else if (order.getGathering() != null && order.getGathering() == 1) {
+			lambdaQueryWrapper.gt(Order::getBalanceAmount, BigDecimal.ZERO);
 		}
 		lambdaQueryWrapper.orderByDesc(Order::getId);
 		IPage<Order> page = orderService.page(Condition.getPage(query), lambdaQueryWrapper);
@@ -176,17 +179,17 @@ public class OrderController extends BladeController {
 		String productionPlantIds = "";//生产工厂ids
 		String createUserIds = "";//创建人id拼接
 
-		for (Order orders : page.getRecords()){
-			if (ObjectUtil.isNotEmpty(orders.getCorpId())){
+		for (Order orders : page.getRecords()) {
+			if (ObjectUtil.isNotEmpty(orders.getCorpId())) {
 				corpIds = corpIds + orders.getCorpId() + ",";
 			}
-			if (ObjectUtil.isNotEmpty(orders.getCorpId())){
+			if (ObjectUtil.isNotEmpty(orders.getCorpId())) {
 				belongToCorpIds = belongToCorpIds + orders.getBelongToCorpId() + ",";
 			}
-			if (ObjectUtil.isNotEmpty(orders.getCorpId())){
+			if (ObjectUtil.isNotEmpty(orders.getCorpId())) {
 				productionPlantIds = productionPlantIds + orders.getProductionPlant() + ",";
 			}
-			if (ObjectUtil.isNotEmpty(orders.getCreateUser())){
+			if (ObjectUtil.isNotEmpty(orders.getCreateUser())) {
 				createUserIds = createUserIds + orders.getCreateUser() + ",";
 			}
 		}
@@ -216,7 +219,7 @@ public class OrderController extends BladeController {
 					}
 				}
 				//制单人
-				if (item.getCreateUser() != null){
+				if (item.getCreateUser() != null) {
 					if (ObjectUtil.isNotEmpty(createUserList)) {
 						item.setCreateUserName(createUserList.stream().filter(e -> e.getId().equals(item.getCreateUser())).findFirst().get().getName());
 					}
@@ -226,7 +229,7 @@ public class OrderController extends BladeController {
 				if (CollectionUtils.isNotEmpty(list)) {
 					item.setOrderQuantity(list.stream().map(OrderItems::getOrderQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));//数量合计
 					item.setAmount(list.stream().map(OrderItems::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add));//销售金额
-					item.setPurchaseAmount(list.stream().filter(e ->e.getPurchaseAmount() != null).map(OrderItems::getPurchaseAmount).reduce(BigDecimal.ZERO, BigDecimal::add));//采购金额
+					item.setPurchaseAmount(list.stream().filter(e -> e.getPurchaseAmount() != null).map(OrderItems::getPurchaseAmount).reduce(BigDecimal.ZERO, BigDecimal::add));//采购金额
 					item.setActualQuantity(list.stream().map(OrderItems::getActualQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));//发货数量
 					item.setActualWeight(list.stream().map(OrderItems::getActualWeight).reduce(BigDecimal.ZERO, BigDecimal::add));//已发重量(吨)
 				}
@@ -240,7 +243,7 @@ public class OrderController extends BladeController {
 	 */
 	@GetMapping("/saleOrderExport")
 	@ApiOperation(value = "销售订单导出", notes = "传入order")
-	public void saleOrderExport(OrderVO order, HttpServletResponse response){
+	public void saleOrderExport(OrderVO order, HttpServletResponse response) {
 		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(Order::getTenantId, SecureUtil.getTenantId());//租户id
 		lambdaQueryWrapper.eq(Order::getIsDeleted, 0);//订单是否有效
@@ -273,10 +276,10 @@ public class OrderController extends BladeController {
 		lambdaQueryWrapper.ge(Func.isNotEmpty(order.getArrivalTimeStart()), Order::getArrivalTime, order.getArrivalTimeStart());//确认到货日期开始
 		lambdaQueryWrapper.le(Func.isNotEmpty(order.getArrivalTimeEnd()), Order::getArrivalTime, order.getArrivalTimeEnd());//确认到货日期结束
 
-		if (order.getGathering() != null && order.getGathering() == 0){
-			lambdaQueryWrapper.eq(Order::getBalanceAmount,BigDecimal.ZERO);
-		}else if (order.getGathering() != null && order.getGathering() == 1){
-			lambdaQueryWrapper.gt(Order::getBalanceAmount,BigDecimal.ZERO);
+		if (order.getGathering() != null && order.getGathering() == 0) {
+			lambdaQueryWrapper.eq(Order::getBalanceAmount, BigDecimal.ZERO);
+		} else if (order.getGathering() != null && order.getGathering() == 1) {
+			lambdaQueryWrapper.gt(Order::getBalanceAmount, BigDecimal.ZERO);
 		}
 		lambdaQueryWrapper.orderByDesc(Order::getId);
 		List<Order> list = orderService.list(lambdaQueryWrapper);
@@ -286,17 +289,17 @@ public class OrderController extends BladeController {
 		String productionPlantIds = "";//生产工厂ids
 		String createUserIds = "";//创建人id拼接
 
-		for (Order orders : list){
-			if (ObjectUtil.isNotEmpty(orders.getCorpId())){
+		for (Order orders : list) {
+			if (ObjectUtil.isNotEmpty(orders.getCorpId())) {
 				corpIds = corpIds + orders.getCorpId() + ",";
 			}
-			if (ObjectUtil.isNotEmpty(orders.getCorpId())){
+			if (ObjectUtil.isNotEmpty(orders.getCorpId())) {
 				belongToCorpIds = belongToCorpIds + orders.getBelongToCorpId() + ",";
 			}
-			if (ObjectUtil.isNotEmpty(orders.getCorpId())){
+			if (ObjectUtil.isNotEmpty(orders.getCorpId())) {
 				productionPlantIds = productionPlantIds + orders.getProductionPlant() + ",";
 			}
-			if (ObjectUtil.isNotEmpty(orders.getCreateUser())){
+			if (ObjectUtil.isNotEmpty(orders.getCreateUser())) {
 				createUserIds = createUserIds + orders.getCreateUser() + ",";
 			}
 		}
@@ -309,19 +312,19 @@ public class OrderController extends BladeController {
 
 		if (CollectionUtils.isNotEmpty(list)) {
 			list.forEach(item -> {
-				if (item.getCreatePurchase() == 0){
+				if (item.getCreatePurchase() == 0) {
 					item.setCreatePurchaseName("否");
-				}else if (item.getCreatePurchase() == 1){
+				} else if (item.getCreatePurchase() == 1) {
 					item.setCreatePurchaseName("是");
 				}
-				if (item.getCreateFreight() == 0){
+				if (item.getCreateFreight() == 0) {
 					item.setCreateFreightName("否");
-				}else if (item.getCreateFreight() == 1){
+				} else if (item.getCreateFreight() == 1) {
 					item.setCreateFreightName("是");
 				}
-				if (item.getSpecialCheck() == 0){
+				if (item.getSpecialCheck() == 0) {
 					item.setSpecialCheckName("否");
-				}else if (item.getSpecialCheck() == 1){
+				} else if (item.getSpecialCheck() == 1) {
 					item.setSpecialCheckName("是");
 				}
 				if (item.getCorpId() != null) {
@@ -340,7 +343,7 @@ public class OrderController extends BladeController {
 					}
 				}
 				//制单人
-				if (item.getCreateUser() != null){
+				if (item.getCreateUser() != null) {
 					if (ObjectUtil.isNotEmpty(createUserList)) {
 						item.setCreateUserName(createUserList.stream().filter(e -> e.getId().equals(item.getCreateUser())).findFirst().get().getName());
 					}
@@ -537,14 +540,14 @@ public class OrderController extends BladeController {
 			String corpIds = "";//供应商
 			String saleCorpIds = "";//客户
 			String createUserIds = "";//业务员
-			for (OrderStatisticAnalysisVO vo : records){
-				if (ObjectUtil.isNotEmpty(vo.getCorpId())){
+			for (OrderStatisticAnalysisVO vo : records) {
+				if (ObjectUtil.isNotEmpty(vo.getCorpId())) {
 					corpIds = corpIds + vo.getCorpId() + ",";
 				}
-				if (ObjectUtil.isNotEmpty(vo.getSaleCorpId())){
+				if (ObjectUtil.isNotEmpty(vo.getSaleCorpId())) {
 					saleCorpIds = saleCorpIds + vo.getSaleCorpId() + ",";
 				}
-				if (ObjectUtil.isNotEmpty(vo.getCreateUser())){
+				if (ObjectUtil.isNotEmpty(vo.getCreateUser())) {
 					createUserIds = createUserIds + vo.getCreateUser() + ",";
 				}
 			}
@@ -562,7 +565,7 @@ public class OrderController extends BladeController {
 				Order service = orderService.getOne(orderLambdaQueryWrapper);
 				//供应商名称
 				if (e.getCorpId() != null) {
-					if (ObjectUtil.isNotEmpty(corpsList)){
+					if (ObjectUtil.isNotEmpty(corpsList)) {
 						e.setCorpName(corpsList.stream().filter(d -> d.getId().equals(e.getCorpId())).findFirst().get().getCname());
 					}
 				}
@@ -762,7 +765,7 @@ public class OrderController extends BladeController {
 
 				//成本单价=(货款+关税+配额)/发票重量---精确小数点2位
 				BigDecimal unitPrice = new BigDecimal(0);
-				if (ObjectUtils.isNotNull(service)){
+				if (ObjectUtils.isNotNull(service)) {
 					if (service.getInvoiceWeight() == null || service.getInvoiceWeight().compareTo(BigDecimal.ZERO) == 0) {
 						unitPrice = BigDecimal.ZERO;
 					} else {
@@ -781,13 +784,13 @@ public class OrderController extends BladeController {
 
 				//客户名称
 				if (e.getSaleCorpId() != null) {
-					if (ObjectUtil.isNotEmpty(saleCorpList)){
+					if (ObjectUtil.isNotEmpty(saleCorpList)) {
 						e.setSaleCorpName(saleCorpList.stream().filter(d -> d.getId().equals(e.getSaleCorpId())).findFirst().get().getCname());
 					}
 				}
 				//业务员名称
 				if (e.getCreateUser() != null) {
-					if (ObjectUtil.isNotEmpty(createUserList)){
+					if (ObjectUtil.isNotEmpty(createUserList)) {
 						e.setCreateUserName(createUserList.stream().filter(d -> d.getId().equals(e.getCreateUser())).findFirst().get().getRealName());
 					}
 				}
@@ -931,8 +934,8 @@ public class OrderController extends BladeController {
 	@ApiOperation(value = "Feign-审核不通过", notes = "传入财务id")
 	@RepeatSubmit
 	public R repealCancel(@RequestBody Order order) {
-		if (order.getId() == null){
-			throw  new SecurityException("缺少必要的参数");
+		if (order.getId() == null) {
+			throw new SecurityException("缺少必要的参数");
 		}
 		orderService.repealCancel(order);
 		return R.success("操作成功");
@@ -947,7 +950,7 @@ public class OrderController extends BladeController {
 	public R<IPage<OrderVO>> ListMessage(Query query, @RequestParam("itemId") Long itemId,
 										 @RequestParam("corpId") Long corpId,
 										 @RequestParam("storageId") Long storageId) {
-		IPage<OrderVO> pages = orderService.orderInventory(Condition.getPage(query), SecureUtil.getTenantId(), OrderTypeEnum.DOMESTIC.getType(), OrderTypeEnum.SALES.getType(), itemId, corpId,storageId);
+		IPage<OrderVO> pages = orderService.orderInventory(Condition.getPage(query), SecureUtil.getTenantId(), OrderTypeEnum.DOMESTIC.getType(), OrderTypeEnum.SALES.getType(), itemId, corpId, storageId);
 		if (CollectionUtils.isNotEmpty(pages.getRecords())) {
 			pages.getRecords().stream().forEach(item -> {
 				R<CorpsDesc> corpMessage = corpsDescClient.getCorpMessage(item.getCorpId());
@@ -961,13 +964,122 @@ public class OrderController extends BladeController {
 
 	/**
 	 * 获得app首页营业收入和采购支出
+	 *
 	 * @param order
 	 * @return
 	 */
 	@GetMapping("/orderIncome")
 	@ApiOperation(value = "营业收入和采购支出", notes = "传入order")
-	public R orderIncome(OrderVO order){
+	public R orderIncome(OrderVO order) {
 		return R.data(orderService.orderIncome(order));
 	}
 
+	/**
+	 * 导出销售明细信息
+	 */
+	@GetMapping("/export")
+	public void export(OrderVO order, HttpServletResponse response) {
+		order.setTenantId(AuthUtil.getTenantId());
+		List<OrderItemsExport> list = orderService.export(order);
+		for (OrderItemsExport item : list) {
+			StringBuilder itemCapsuleAccessory = new StringBuilder("瓶帽配件: ");
+			StringBuilder itemValveAccessory = new StringBuilder("阀门配件: ");
+			StringBuilder itemAttribute = new StringBuilder("产品属性: ");
+			//瓶帽配件
+			if (ObjectUtils.isNotNull(item.getPartsCapValue())) {
+				JSONArray objects = JSONArray.parseArray(item.getPartsCapValue());
+				List<OrderParts> categoryConstantInfos = objects.toJavaList(OrderParts.class);
+				if (ObjectUtils.isNotNull(categoryConstantInfos)) {
+					for (OrderParts partsItem : categoryConstantInfos) {
+						itemCapsuleAccessory.append("名称:").append(partsItem.getGoodName())
+							.append(" / 数量:").append(partsItem.getGoodNumber())
+							.append(" / 已采数量:").append(partsItem.getPurchasesNumber())
+							.append(" / ");
+					}
+				} else {
+					itemCapsuleAccessory.append("无");
+				}
+			}
+			//阀门配件
+			if (ObjectUtils.isNotNull(item.getPartsCapValue())) {
+				JSONArray objects = JSONArray.parseArray(item.getPartsValveValue());
+				List<OrderParts> categoryConstantInfos = objects.toJavaList(OrderParts.class);
+				if (ObjectUtils.isNotNull(categoryConstantInfos)) {
+					for (OrderParts partsItem : categoryConstantInfos) {
+						itemValveAccessory.append("名称:").append(partsItem.getGoodName())
+							.append(" / 数量:").append(partsItem.getGoodNumber())
+							.append(" / 已采数量:").append(partsItem.getPurchasesNumber())
+							.append(" / ");
+					}
+				} else {
+					itemValveAccessory.append("无");
+				}
+			}
+			//产品属性 - 颜色
+			if (ObjectUtils.isNotNull(item.getPartsColourValue())) {
+				JSONArray objects = JSONArray.parseArray(item.getPartsColourValue());
+				List<OrderParts> categoryConstantInfos = objects.toJavaList(OrderParts.class);
+				if (ObjectUtils.isNotNull(categoryConstantInfos)) {
+					for (OrderParts partsItem : categoryConstantInfos) {
+						itemAttribute.append("特殊颜色:").append(partsItem.getGoodName()).append(" / ");
+					}
+				} else {
+					itemAttribute.append("特殊颜色:无");
+				}
+			}
+			//产品属性 - 特殊处理
+			if (ObjectUtils.isNotNull(item.getPartsHandleValue())) {
+				JSONArray objects = JSONArray.parseArray(item.getPartsHandleValue());
+				List<OrderParts> categoryConstantInfos = objects.toJavaList(OrderParts.class);
+				if (ObjectUtils.isNotNull(categoryConstantInfos)) {
+					for (OrderParts partsItem : categoryConstantInfos) {
+						itemAttribute.append("特殊处理:").append(partsItem.getGoodName()).append(" / ");
+					}
+				} else {
+					itemAttribute.append("特殊处理:无");
+				}
+			}
+			//产品属性 - 包装方式
+			if (ObjectUtils.isNotNull(item.getPartsModeValue())) {
+				JSONArray objects = JSONArray.parseArray(item.getPartsModeValue());
+				List<OrderParts> categoryConstantInfos = objects.toJavaList(OrderParts.class);
+				if (ObjectUtils.isNotNull(categoryConstantInfos)) {
+					for (OrderParts partsItem : categoryConstantInfos) {
+						itemAttribute.append("包装方式:").append(partsItem.getGoodName()).append(" / ");
+					}
+				} else {
+					itemAttribute.append("包装方式:无");
+				}
+			}
+			//产品属性 - 认证
+			if (ObjectUtils.isNotNull(item.getPartsAuthenticationValue())) {
+				JSONArray objects = JSONArray.parseArray(item.getPartsAuthenticationValue());
+				List<OrderParts> categoryConstantInfos = objects.toJavaList(OrderParts.class);
+				if (ObjectUtils.isNotNull(categoryConstantInfos)) {
+					for (OrderParts partsItem : categoryConstantInfos) {
+						itemAttribute.append("认证:").append(partsItem.getGoodName()).append(" / ");
+					}
+				} else {
+					itemAttribute.append("认证:无");
+				}
+			}
+			//产品属性 - 其他
+			if (ObjectUtils.isNotNull(item.getPartsOtherValue())) {
+				JSONArray objects = JSONArray.parseArray(item.getPartsOtherValue());
+				List<OrderParts> categoryConstantInfos = objects.toJavaList(OrderParts.class);
+				if (ObjectUtils.isNotNull(categoryConstantInfos)) {
+					for (OrderParts partsItem : categoryConstantInfos) {
+						itemAttribute.append("其他:").append(partsItem.getGoodName()).append(" / ");
+					}
+				} else {
+					itemAttribute.append("其他:无");
+				}
+			}
+			item.setItemAttribute(itemAttribute.toString());
+			item.setItemCapsuleAccessory(itemCapsuleAccessory.toString());
+			item.setItemValveAccessory(itemValveAccessory.toString());
+		}
+		ExcelUtil.export(response, "销售订单-" + order.getOrderNo(), order.getOrderNo(), list, OrderItemsExport.class);
+	}
+
 }

+ 70 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/excel/OrderItemsExport.java

@@ -0,0 +1,70 @@
+package org.springblade.purchase.sales.excel;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.ContentRowHeight;
+import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import lombok.Data;
+
+/**
+ * @author :jixinyuan
+ * @date : 2023/7/31
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class OrderItemsExport {
+
+	@ExcelProperty(value = "销售订单号")
+	private String orderNo;
+
+	@ExcelIgnore
+	private String itemId;
+
+	@ExcelProperty(value = "产品描述(中)")
+	@ColumnWidth(100)
+	private String itemCDescribe;
+
+	@ExcelProperty(value = "产品描述(英)")
+	@ColumnWidth(100)
+	private String itemDescribe;
+
+	@ExcelProperty(value = "订单数量")
+	private String orderQuantity;
+
+	@ExcelProperty(value = "产品属性")
+	@ColumnWidth(100)
+	private String itemAttribute;
+
+	@ExcelProperty(value = "瓶帽配件")
+	@ColumnWidth(100)
+	private String itemCapsuleAccessory;
+
+	@ExcelProperty(value = "阀门配件")
+	@ColumnWidth(100)
+	private String itemValveAccessory;
+
+	@ExcelProperty(value = "已采购数量")
+	private String purchaseQuantity;
+
+	@ExcelIgnore
+	private String partsValveValue;
+	@ExcelIgnore
+	private String partsCapValue;
+	@ExcelIgnore
+	private String partsHandleValue;
+	@ExcelIgnore
+	private String partsColourValue;
+	@ExcelIgnore
+	private String partsModeValue;
+	@ExcelIgnore
+	private String partsAuthenticationValue;
+	@ExcelIgnore
+	private String partsOtherValue;
+	@ExcelIgnore
+	private String tenantId;
+
+
+}

+ 16 - 2
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderDescClient.java

@@ -9,6 +9,9 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.trade.purchase.order.enums.OrderTypeEnum;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.time.DateUtils;
+import org.springblade.client.entity.CorpsAttn;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.client.feign.IFeesDescClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
@@ -58,8 +61,6 @@ public class OrderDescClient implements IOrderDescClient {
 
 	private final IFinanceClient financeClient;//财务
 
-	private final IFeesDescClient feesDescClient;//费用
-
 	private final IDictBizClient dictBizClient;
 
 	private final IPaymentClient paymentClient;//通联支付
@@ -68,6 +69,8 @@ public class OrderDescClient implements IOrderDescClient {
 
 	private final ISysClient sysClient;
 
+	private ICorpsDescClient corpsDescClient;
+
 	@Override
 	@PostMapping(UPDATE_ORDER)
 	public R updateOrder(Order order) {
@@ -385,6 +388,17 @@ public class OrderDescClient implements IOrderDescClient {
 				throw new RuntimeException("未找到库存,操作失败!");
 			}
 		}
+		if (ObjectUtils.isNotNull(order.getCorpId())) {
+			CorpsDesc corpsDesc = corpsDescClient.getCorpId(order.getCorpId());
+			if (ObjectUtils.isNotNull(corpsDesc)) {
+				if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
+					order.setArrivalAddress(corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
+				}
+				corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().add(order.getMemberBalance()));
+				corpsDescClient.updateCorps(corpsDesc);
+			}
+		}
+
 		order.setStatus(7);
 		order.setSettlmentAmount(order.getSettlmentAmount().subtract(order.getPaymentAmountTl()));
 		iOrderService.updateById(order);

+ 5 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
+import org.springblade.core.tool.api.R;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.excel.*;
 import org.springblade.purchase.sales.vo.*;
@@ -383,4 +384,8 @@ public interface OrderMapper extends BaseMapper<Order> {
 	int corpAnalysisDWT(@Param("order")Order order);
 
     List<PjStockDetails> stockDataDetails(@Param("order") PjStockDetails pjStockDetails);
+
+	List<Map<String,Object>> integralRecord(IPage<Map<String,Object>> page,@Param("order")Order order);
+
+    List<OrderItemsExport> export(@Param("order") OrderVO order);
 }

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

@@ -3765,7 +3765,47 @@ ORDER BY
         GROUP BY
             ps.sys_no
     </select>
-
+    <select id="integralRecord" resultType="java.util.Map">
+        SELECT
+            bgd.cname as goodsName,
+            bo.busines_date as  businesDate,
+            boi.storage_in_quantity * bgd.integral as integral
+        FROM
+            business_order bo
+                LEFT JOIN business_order_items boi ON bo.id = boi.pid
+                LEFT JOIN basic_goods_desc bgd on boi.item_id = bgd.id
+        WHERE
+            bo.tenant_id = #{order.tenantId}
+          AND bo.is_deleted = '0'
+          AND bo.whether_integral = #{order.whetherIntegral}
+          AND bo.corp_id = #{order.corpId}
+    </select>
+    <select id="export" resultType="org.springblade.purchase.sales.excel.OrderItemsExport">
+        SELECT
+            bo.order_no as orderNo,
+            boi.item_id as itemId,
+            bgd.cname_description as itemDescribe,
+            bgd.name_description as itemCDescribe,
+            boi.order_quantity as orderQuantity,
+            boi.purchase_quantity as purchaseQuantity,
+            boi.parts_valve_value as partsValveValue,
+            boi.parts_cap_value as partsCapValue,
+            boi.parts_handle_value as partsHandleValue,
+            boi.parts_colour_value as partsColourValue,
+            boi.parts_authentication_value as partsAuthenticationValue,
+            boi.parts_other_value as partsOtherValue,
+            boi.parts_mode_value as partsModeValue
+        FROM
+            `business_order` bo
+                LEFT JOIN business_order_items boi ON bo.id = boi.pid
+                LEFT JOIN basic_goods_desc bgd ON boi.item_id = bgd.id
+        WHERE
+            bo.tenant_id = #{order.tenantId}
+          AND bo.is_deleted = '0'
+          AND order_no = #{order.orderNo}
+        ORDER BY
+            bo.create_time DESC
+    </select>
     <update id="updateStockGoods" parameterType="org.springblade.stock.entity.StockGoods">
         UPDATE business_stock_goods SET surplus_route_quantity = #{surplusRouteQuantity},locking_quantity = #{lockingQuantity} WHERE tenant_id = #{tenantId} AND id = #{id} AND is_deleted = 0
     </update>

+ 98 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/partsapp/AppPartsController.java

@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springblade.client.entity.CorpsAttn;
 import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.GoodsType;
 import org.springblade.client.entity.StorageDesc;
 import org.springblade.client.feign.ICorpsAttnClient;
 import org.springblade.client.feign.ICorpsDescClient;
@@ -25,6 +26,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.finance.feign.IFinanceClient;
 import org.springblade.finance.vojo.Acc;
 import org.springblade.purchase.sales.entity.Order;
@@ -47,6 +49,7 @@ import java.math.BigDecimal;
 import java.math.MathContext;
 import java.math.RoundingMode;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 国内销售或采购订单表 控制器
@@ -115,6 +118,7 @@ public class AppPartsController extends BladeController {
 		lambdaQueryWrapper.eq(Order::getIsDeleted, 0);//订单是否有效
 		lambdaQueryWrapper.like(Func.isNotEmpty(order.getOrderNo()), Order::getOrderNo, order.getOrderNo());//订单号
 		lambdaQueryWrapper.eq(Func.isNotEmpty(order.getStorageId()), Order::getStorageId, order.getStorageId());//仓库id
+		lambdaQueryWrapper.eq(Func.isNotEmpty(order.getWhetherIntegral()), Order::getWhetherIntegral, order.getWhetherIntegral());//仓库id
 		if ("线上".equals(order.getOrderSource())) {
 			CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
 			if (ObjectUtils.isNotNull(corpsAttn)) {
@@ -647,6 +651,26 @@ public class AppPartsController extends BladeController {
 		return orderService.quickBillingWX(order);}
 
 	/**
+	 * 新增或修改 经销商销售或采购订单表(微信小程序)
+	 */
+	@PostMapping("/quickBillingWXv2")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入order")
+	public R quickBillingWXv2(@Valid @RequestBody Order order) {
+		order.setTradeType(OrderTypeEnum.PARTS.getType());
+		return orderService.quickBillingWXv2(order);}
+
+	/**
+	 * 新增或修改 经销商销售或采购订单表(微信小程序积分兑换)
+	 */
+	@PostMapping("/quickBillingWXIntegral")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入order")
+	public R quickBillingWXIntegral(@Valid @RequestBody Order order) {
+		order.setTradeType(OrderTypeEnum.PARTS.getType());
+		return orderService.quickBillingWXIntegral(order);}
+
+	/**
 	 * 收付款(单)
 	 */
 	@PostMapping("/collectPayment")
@@ -680,4 +704,78 @@ public class AppPartsController extends BladeController {
 		return R.data(pages);
 	}
 
+	/**
+	 * 积分兑换记录
+	 */
+	@GetMapping("/integralExchangeRecord")
+	public R<IPage<Map<String,Object>>> integralExchangeRecord(HttpServletRequest request, Query query) {
+		Order order = new Order();
+		order.setTradeType(OrderTypeEnum.PARTS.getType());
+		if (ObjectUtils.isNull(request.getHeader("Blade-Auth"))) {
+			// 获取租户信息
+			R<Tenant> tenant = sysClient.getTenantByAppId(request.getHeader("appId"));
+			if (tenant.isSuccess() && ObjectUtils.isNotNull(tenant.getData())) {
+				order.setTenantId(tenant.getData().getTenantId());
+			} else {
+				throw new RuntimeException("获取数据失败");
+			}
+		} else {
+			order.setTenantId(AuthUtil.getTenantId());
+		}
+		Long corpId = null;
+		if (AuthUtil.getUserRole().equals("客户")) {
+			CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
+			if (ObjectUtils.isNull(corpsAttn)) {
+				throw new RuntimeException("未查到用户信息");
+			} else {
+				CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
+				if (ObjectUtils.isNull(corpsDesc)) {
+					throw new RuntimeException("未查到用户信息");
+				} else {
+					corpId = corpsDesc.getId();
+				}
+			}
+		}
+		order.setCorpId(corpId);
+		order.setWhetherIntegral("1");
+		return R.data(orderService.integralRecord(Condition.getPage(query),order));
+	}
+
+	/**
+	 * 积分获取记录
+	 */
+	@GetMapping("/integralRecord")
+	public R<IPage<Map<String,Object>>> integralRecord(HttpServletRequest request, Query query) {
+		Order order = new Order();
+		order.setTradeType(OrderTypeEnum.PARTS.getType());
+		if (ObjectUtils.isNull(request.getHeader("Blade-Auth"))) {
+			// 获取租户信息
+			R<Tenant> tenant = sysClient.getTenantByAppId(request.getHeader("appId"));
+			if (tenant.isSuccess() && ObjectUtils.isNotNull(tenant.getData())) {
+				order.setTenantId(tenant.getData().getTenantId());
+			} else {
+				throw new RuntimeException("获取数据失败");
+			}
+		} else {
+			order.setTenantId(AuthUtil.getTenantId());
+		}
+		Long corpId = null;
+		if (AuthUtil.getUserRole().equals("客户")) {
+			CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
+			if (ObjectUtils.isNull(corpsAttn)) {
+				throw new RuntimeException("未查到用户信息");
+			} else {
+				CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
+				if (ObjectUtils.isNull(corpsDesc)) {
+					throw new RuntimeException("未查到用户信息");
+				} else {
+					corpId = corpsDesc.getId();
+				}
+			}
+		}
+		order.setCorpId(corpId);
+		order.setWhetherIntegral("0");
+		return R.data(orderService.integralRecord(Condition.getPage(query),order));
+	}
+
 }

+ 8 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IOrderService.java

@@ -513,6 +513,8 @@ public interface IOrderService extends IService<Order> {
 
 	R quickBillingWX(Order order);
 
+	R quickBillingWXIntegral(Order order);
+
 	R salesList(Order order);
 
     List<Map<String,Object>> statusStatisticsApi(String type);
@@ -534,4 +536,10 @@ public interface IOrderService extends IService<Order> {
 	int corpAnalysisDWT(Order order);
 
     List<PjStockDetails> stockDataDetails(PjStockDetails pjStockDetails);
+
+	R quickBillingWXv2(Order order);
+
+	IPage<Map<String,Object>> integralRecord(IPage<Map<String,Object>> query,Order order);
+
+	List<OrderItemsExport> export(OrderVO order);
 }

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

@@ -1791,7 +1791,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			List<StockGoods> stockGoodsList = castToList(redisTemplate.opsForValue().get("stockGoods"), StockGoods.class);
 
 			if (CollectionUtils.isNotEmpty(orderItems)) {
+				List<StockGoodsLog> stockGoodsLogList = new ArrayList<>();
+				Date date = new Date();
 				orderItems.forEach(e -> {
+					StockGoodsLog stockGoodsLog = new StockGoodsLog();
+					stockGoodsLog.setTime(date);
+					stockGoodsLog.setSrcOrderId(orderMessage.getId());
+					stockGoodsLog.setUserName(AuthUtil.getUserName());
+					stockGoodsLog.setType("申请退单释放库存");
+					stockGoodsLog.setTenantId(AuthUtil.getTenantId());
+					stockGoodsLog.setCreateUser(AuthUtil.getUserId());
+					stockGoodsLog.setCreateTime(date);
 					// 开始锁定库存,减少可用
 					// 开始锁定库存,减少可用
 					StockGoods oneStock = stockGoodsList.stream().filter(s ->
@@ -1810,6 +1820,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					// 锁定库存
 					BigDecimal lockingQuantity = oneStock.getLockingQuantity();
 
+					stockGoodsLog.setStockId(oneStock.getId());
+					stockGoodsLog.setBalanceQuantityOld(oneStock.getBalanceQuantity());
+					stockGoodsLog.setSurplusRouteQuantityOld(surplusRouteQuantity);
+					stockGoodsLog.setLockingQuantityOld(lockingQuantity);
+					stockGoodsLog.setOrderQuantity(orderQuantity);
+
+
 					// 判断比较大小
 					if (orderQuantity.compareTo(lockingQuantity) > 0) {
 						throw new SecurityException("撤销失败:原单据的" + oneStock.getCode() + "订货数量大于锁定库存,无法释放 库存");
@@ -1824,8 +1841,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 //						throw new SecurityException("撤销失败: " + oneStock.getCode() + "更新库存失败");
 						throw new SecurityException(res.getMsg());
 					}
+					stockGoodsLog.setBalanceQuantity(oneStock.getBalanceQuantity());
+					stockGoodsLog.setSurplusRouteQuantity(oneStock.getSurplusRouteQuantity());
+					stockGoodsLog.setLockingQuantity(oneStock.getLockingQuantity());
+					stockGoodsLogList.add(stockGoodsLog);
 
 				});
+				stockGoodsClient.saveOrUpdateBatchListLog(stockGoodsLogList);
 			}
 		}
 
@@ -3092,6 +3114,37 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R collectPayment(Order order) {
+		CorpsDesc corpsDesc = new CorpsDesc();
+		if (ObjectUtils.isNotNull(order.getCorpId())) {
+			corpsDesc = corpsDescClient.getCorpId(order.getCorpId());
+			if (ObjectUtils.isNotNull(corpsDesc)) {
+				if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+					throw new RuntimeException("会员余额不足,支付失败");
+				}
+				if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
+					order.setArrivalAddress(corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
+				}
+			}
+		} else {
+			if (AuthUtil.getUserRole().equals("客户")) {
+				CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
+				if (ObjectUtils.isNull(corpsAttn)) {
+					throw new RuntimeException("未查到用户信息");
+				} else {
+					corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
+					if (ObjectUtils.isNull(corpsDesc)) {
+						throw new RuntimeException("未查到用户信息");
+					} else {
+						if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+							throw new RuntimeException("会员余额不足,支付失败");
+						}
+						order.setCorpId(corpsDesc.getId());
+					}
+				}
+			}
+		}
+		corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().subtract(order.getMemberBalance()));
+		corpsDescClient.updateCorps(corpsDesc);
 		if ("线上".equals(order.getOrderSource())) {
 			Order selectOrder = baseMapper.selectById(order.getId());
 			selectOrder.setStatus(3);
@@ -3142,7 +3195,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				}
 				settlement.setSettlementDate(new Date());
 				settlement.setAccount(order.getAccount());
-				settlement.setAmount(order.getCurrentAmount());
+				settlement.setAmount(order.getCurrentAmount().add(order.getMemberBalance()));
 				settlement.setOverPayment(order.getOverPayment());
 				settlementList.add(settlement);
 				order.setSettlementList(settlementList);
@@ -3199,6 +3252,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			}
 		}
 		Date date = new Date();
+		if (ObjectUtils.isNull(order.getMemberBalance())){
+			order.setMemberBalance(new BigDecimal("0.00"));
+		}
 		if (!"线上".equals(order.getOrderSource())) {
 			if ("234557".equals(AuthUtil.getTenantId())) {
 				if ("XSJH".equals(order.getBillType())) {
@@ -3639,6 +3695,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
 							order.setArrivalAddress(corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
 						}
+						if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+							throw new RuntimeException("会员余额不足,支付失败");
+						}
+						corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().subtract(order.getMemberBalance()));
+						corpsDescClient.updateCorps(corpsDesc);
 					}
 				}
 
@@ -3745,11 +3806,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				order.setGrossProfit(grossProfit);
 				order.setConfirmStatus(1);
 				this.paymentApply(order, order.getBillType(), order.getTradeType());
-				order.setDebitAmount(order.getOrderAmount());
-				order.setBalanceAmount(order.getOrderAmount());
 //				order.setPurchaseAmount(order.getOrderAmount());
-
-				order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
+				order.setDebitAmount(order.getOrderAmount());
+				order.setBalanceAmount(order.getOrderAmount().subtract(order.getMemberBalance()));
+				order.setPurchaseAmount(order.getOrderAmount());
+				order.setSettlmentAmount(order.getOrderAmount().subtract(order.getBalanceAmount()));
 				baseMapper.updateById(order);
 				// 保存订单文件信息
 				if (CollectionUtils.isNotEmpty(order.getOrderFilesList())) {
@@ -4255,6 +4316,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 								throw new RuntimeException("未查到用户信息");
 							} else {
 								order.setCorpId(corpsDesc.getId());
+								if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+									throw new RuntimeException("会员余额不足,支付失败");
+								}
+								corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().subtract(order.getMemberBalance()));
+								corpsDescClient.updateCorps(corpsDesc);
 							}
 						}
 					}
@@ -4511,6 +4577,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 							if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
 								order.setArrivalAddress(corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
 							}
+							if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+								throw new RuntimeException("会员余额不足,支付失败");
+							}
+							corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().subtract(order.getMemberBalance()));
+							corpsDescClient.updateCorps(corpsDesc);
 						}
 					}
 					order.setClient(AuthUtil.getUser().getRoleName());
@@ -4850,6 +4921,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			if (ObjectUtils.isNotNull(corpsDesc)) {
 				map.put("ID", corpsDesc.getTel());
 				map.put("corpName", corpsDesc.getCname() == null ? "无" : corpsDesc.getCname());
+				map.put("pointsBalance", corpsDesc.getPointsBalance() == null ? "0.00" : corpsDesc.getPointsBalance());
+				map.put("balanceAmount", corpsDesc.getBalanceAmount() == null ? "0.00" : corpsDesc.getBalanceAmount());
 				if (corpsDesc.getCorpsAddrList().size() > 0) {
 					map.put("address", corpsDesc.getCorpsAddrList().get(0).getDetailedAddress() == null ? "无" : corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
 				} else {
@@ -5009,6 +5082,11 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
 							orderNew.setArrivalAddress(corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
 						}
+						if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+							throw new RuntimeException("会员余额不足,支付失败");
+						}
+						corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().subtract(order.getMemberBalance()));
+						corpsDescClient.updateCorps(corpsDesc);
 					}
 				}
 				orderNew.setOrderNo((String) clientBillNo.getData());
@@ -5849,7 +5927,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 								//更新对应配件明细采购数量
 								BigDecimal quantity = ObjectUtils.isNotNull(srcItems.getPurchasesNumber()) ? srcItems.getPurchasesNumber() : new BigDecimal("0.00");
 								srcItems.setPurchasesNumber(quantity.add(orderItems.getActualQuantity()));
-//							orderPartsService.updateById(srcItems);
 								srcItemsList.add(srcItems);
 							}
 						} else {
@@ -5859,7 +5936,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 								BigDecimal quantity = ObjectUtils.isNotNull(srcItems.getPurchaseQuantity()) ? srcItems.getPurchaseQuantity() : new BigDecimal("0.00");
 								srcItems.setPurchaseQuantity(quantity.add(orderItems.getActualQuantity()));
 								srcItems.setFudaPurchaseStatus("排产中");
-//							orderItemsMapper.updateById(srcItems);
 								srcOrderItemsList.add(srcItems);
 							}
 						}
@@ -5870,7 +5946,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 							BigDecimal quantity = ObjectUtils.isNotNull(srcItems.getPurchaseQuantity()) ? srcItems.getPurchaseQuantity() : new BigDecimal("0.00");
 							srcItems.setPurchaseQuantity(quantity.add(orderItems.getActualQuantity()));
 							srcItems.setFudaPurchaseStatus("排产中");
-//							orderItemsMapper.updateById(srcItems);
 							srcOrderItemsList.add(srcItems);
 						}
 					}
@@ -5907,12 +5982,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						order1.setProductionSchedulingDate(order.getEstimateGoodGoodsDate());
 						deliveryClient.saveDeliveryData(order1.getId(), order1.getOrderNo(), "预计货好");
 					} else if (3 == order.getPurchaseStatusType()) {
-						order1.setProductionScheduling("货备齐");
-						order1.setOrderStatus("货备齐");
-						order1.setProductionSchedulingDate(new Date());
-						deliveryClient.saveDeliveryData(order1.getId(), order1.getOrderNo(), "货备齐");
+						List<Order> orderList1 = baseMapper.selectList(new LambdaQueryWrapper<Order>()
+							.eq(Order::getTenantId, AuthUtil.getTenantId())
+							.eq(Order::getIsDeleted, 0)
+							.eq(Order::getSrcOrderNo, order1.getSrcOrderNo())
+							.eq(Order::getBillType, "CG"));
+						long count = orderList1.stream().filter(e -> "货备齐".equals(e.getFudaPurchaseStatus())).count();
+						if ((orderList1.size() - count) == 1) {
+							order1.setProductionScheduling("货备齐");
+							order1.setOrderStatus("货备齐");
+							order1.setProductionSchedulingDate(new Date());
+							deliveryClient.saveDeliveryData(order1.getId(), order1.getOrderNo(), "货备齐");
+						}
 					}
-//					baseMapper.updateById(order1);
 					orderList.add(order1);
 				}
 			}
@@ -5925,10 +6007,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		for (String arr : arrs) {
 			Order selectOrder = baseMapper.selectById(Long.parseLong(arr));
 			if (ObjectUtils.isNotNull(selectOrder)) {
-				/*selectOrder.setUpdateTime(new Date());
-				selectOrder.setUpdateUser(AuthUtil.getUserId());
-				selectOrder.setUpdateUserName(AuthUtil.getUserName());*/
-
 				//循环发送消息
 				Message sendMessage = new Message();
 				sendMessage.setParameter(String.valueOf(selectOrder.getId()));
@@ -5946,19 +6024,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					sendMessage.setToUserName(selectOrder.getCreateUserName());
 					if (1 == order.getPurchaseStatusType()) {
 						sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "正在排产中,请查看");
-						/*selectOrder.setProductionScheduling("排产中");
-						selectOrder.setOrderStatus("排产中");
-						selectOrder.setProductionSchedulingDate(order.getProductionSchedulingDate());*/
 					} else if (2 == order.getPurchaseStatusType()) {
 						sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已预计货好,请查看");
-						/*selectOrder.setProductionScheduling("预计货好");
-						selectOrder.setOrderStatus("预计货好");
-						selectOrder.setProductionSchedulingDate(order.getEstimateGoodGoodsDate());*/
 					} else if (3 == order.getPurchaseStatusType()) {
 						sendMessage.setMessageBody("您的销售订单" + selectOrder.getSysNo() + "已采购完成,请查看");
-					/*	selectOrder.setProductionScheduling("货备齐");
-						selectOrder.setOrderStatus("货备齐");
-						selectOrder.setProductionSchedulingDate(new Date());*/
 						deliveryClient.updateBySrcId(selectOrder.getId(), "FH", selectOrder.getTradeType());
 					}
 					R save = messageClient.save(sendMessage);
@@ -5982,7 +6051,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 						throw new SecurityException("发送消息失败");
 					}
 				}
-//				baseMapper.updateById(selectOrder);
 			}
 		}
 		return R.data(detail);
@@ -6023,7 +6091,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				if (ObjectUtils.isNotEmpty(orderItems.getDetailType())) {
 					if (OrderTypeEnum.PARTSTYPE.getType().equals(orderItems.getDetailType())) {//更新对应配件明细采购数量
 						OrderParts srcItems = orderPartsService.getById(orderItems.getSrcItemId());
-						if (ObjectUtils.isNotNull(srcItems)){
+						if (ObjectUtils.isNotNull(srcItems)) {
 							srcItems.setPurchasesNumber(srcItems.getPurchasesNumber().subtract(orderItems.getActualQuantity()));
 							srcItemsList.add(srcItems);
 						}
@@ -6238,9 +6306,13 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			}
 		}
 		Date date = new Date();
+		CorpsDesc corpsDesc = new CorpsDesc();
 		if (ObjectUtils.isNotNull(order.getCorpId())) {
-			CorpsDesc corpsDesc = corpsDescClient.getCorpId(order.getCorpId());
+			corpsDesc = corpsDescClient.getCorpId(order.getCorpId());
 			if (ObjectUtils.isNotNull(corpsDesc)) {
+				if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+					throw new RuntimeException("会员余额不足,支付失败");
+				}
 				if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
 					order.setArrivalAddress(corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
 				}
@@ -6251,15 +6323,20 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				if (ObjectUtils.isNull(corpsAttn)) {
 					throw new RuntimeException("未查到用户信息");
 				} else {
-					CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
+					corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
 					if (ObjectUtils.isNull(corpsDesc)) {
 						throw new RuntimeException("未查到用户信息");
 					} else {
+						if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+							throw new RuntimeException("会员余额不足,支付失败");
+						}
 						order.setCorpId(corpsDesc.getId());
 					}
 				}
 			}
 		}
+		corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().subtract(order.getMemberBalance()));
+		corpsDescClient.updateCorps(corpsDesc);
 		// 订单时间
 		order.setStatus(0);
 		order.setActualPaymentStatus(1);
@@ -6366,11 +6443,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		order.setCostAmount(costAmount);
 		order.setGrossProfit(grossProfit);
 		order.setConfirmStatus(1);
+		if (ObjectUtils.isNull(order.getMemberBalance())){
+			order.setMemberBalance(new BigDecimal("0.00"));
+		}
 		this.paymentApply(order, order.getBillType(), order.getTradeType());
 		order.setDebitAmount(order.getOrderAmount());
-		order.setBalanceAmount(order.getOrderAmount());
+		order.setBalanceAmount(order.getOrderAmount().subtract(order.getMemberBalance()));
 		order.setPurchaseAmount(order.getOrderAmount());
-		order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
+		order.setSettlmentAmount(order.getOrderAmount().subtract(order.getBalanceAmount()));
 		baseMapper.updateById(order);
 
 		// 保存订单文件信息
@@ -6378,10 +6458,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			List<OrderFiles> orderFilesList = orderFilesService.saveOrderFileMessage(order.getOrderFilesList(), date, order.getId());
 			order.setOrderFilesList(orderFilesList);
 		}
-		CorpsDesc corpsDesc = corpsDescClient.getCorpId(order.getCorpId());
+		/*CorpsDesc corpsDesc = corpsDescClient.getCorpId(order.getCorpId());
 		if (ObjectUtils.isNull(corpsDesc)) {
 			throw new RuntimeException("未找到客户信息");
-		}
+		}*/
 		if (ObjectUtils.isNotNull(corpsDesc.getAdminProfiles())) {
 			String[] arrs = corpsDesc.getAdminProfiles().split(",");
 			for (String arr : arrs) {
@@ -6415,6 +6495,151 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	@Override
+	public R quickBillingWXIntegral(Order order) {
+		// 校验单号重复-新增
+		if (order.getId() == null && StringUtils.isNotBlank(order.getOrderNo())) {
+			LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			orderLambdaQueryWrapper
+				.eq(Order::getOrderNo, order.getOrderNo())
+				.eq(Order::getTradeType, order.getTradeType())
+				.eq(Order::getBillType, order.getBillType())
+				.eq(Order::getTenantId, AuthUtil.getTenantId())
+				.eq(Order::getIsDeleted, 0);
+			Integer count = baseMapper.selectCount(orderLambdaQueryWrapper);
+			if (count != null && count > 0) {
+				throw new SecurityException("合同号:" + order.getOrderNo() + "已存在,禁止重复添加");
+			}
+		}
+		// 校验单号重复-编辑
+		else {
+			LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			orderLambdaQueryWrapper
+				.ne(Order::getId, order.getId())
+				.eq(Order::getOrderNo, order.getOrderNo())
+				.eq(Order::getTradeType, order.getTradeType())
+				.eq(Order::getBillType, order.getBillType())
+				.eq(Order::getTenantId, AuthUtil.getTenantId())
+				.eq(Order::getIsDeleted, 0);
+			Integer count = baseMapper.selectCount(orderLambdaQueryWrapper);
+			if (count != null && count > 0) {
+				throw new SecurityException("合同号:" + order.getOrderNo() + "已存在,禁止重复添加");
+			}
+		}
+		Date date = new Date();
+		CorpsDesc corpsDesc = new CorpsDesc();
+		if (ObjectUtils.isNotNull(order.getCorpId())) {
+			corpsDesc = corpsDescClient.getCorpId(order.getCorpId());
+			if (ObjectUtils.isNotNull(corpsDesc)) {
+				if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
+					order.setArrivalAddress(corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
+				}
+			}
+		} else {
+			if (AuthUtil.getUserRole().equals("客户")) {
+				CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
+				if (ObjectUtils.isNull(corpsAttn)) {
+					throw new RuntimeException("未查到用户信息");
+				} else {
+					corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
+					if (ObjectUtils.isNull(corpsDesc)) {
+						throw new RuntimeException("未查到用户信息");
+					} else {
+						order.setCorpId(corpsDesc.getId());
+					}
+				}
+			}
+		}
+		// 订单时间
+		order.setBusinesDate(new Date());
+		order.setSalesName(AuthUtil.getUserId() + "");
+		order.setStatus(3);
+		order.setConfirmStatus(2);
+		order.setActualPaymentStatus(2);
+		// 保存订单主表信息
+		// 获取系统编号
+		R billNo = serialClient.getBillNo(order.getBillType(), order.getTradeType(), order.getBillType());
+		if (billNo.getCode() != 200) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成系统编号失败");
+		}
+		order.setSysNo((String) billNo.getData());
+		R clientBillNo = serialClient.getBillNo(order.getBillType(), order.getTradeType(), order.getBillType());
+		if (!clientBillNo.isSuccess()) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成订单编号失败");
+		}
+		order.setOrderNo((String) clientBillNo.getData());
+		// 进口的orgOrderNo 存的是采购订单号  出口国内存的是本身的订单号码
+		if (!order.getBillType().equals(OrderTypeEnum.IMPORT.getType())) {
+			order.setOrgOrderNo((String) clientBillNo.getData());
+		}
+
+		order.setTenantId(SecureUtil.getTenantId());
+		order.setCreateTime(date);
+		order.setCreateUser(SecureUtil.getUserId());
+		if (order.getBusinesDate() == null) {
+			order.setBusinesDate(date);
+		}
+		order.setClient(AuthUtil.getUser().getRoleName());
+		R<User> userR = userClient.userInfoById(AuthUtil.getUserId());
+		if (userR.isSuccess() && ObjectUtils.isNotNull(userR.getData())) {
+			order.setClientAttn(userR.getData().getPhone());
+		}
+		baseMapper.insert(order);
+		List<GoodsDesc> goodsDescList = goodsDescClient.selectGoodsDescAll();
+		// 保存订单明细
+		if (CollectionUtils.isNotEmpty(order.getOrderItemsList())) {
+			List<StockGoodsVO> list = new ArrayList<>();
+			BigDecimal orderAmount = new BigDecimal("0.00");
+			for (OrderItems orderItems : order.getOrderItemsList()) {
+				//获取本商品库存
+				BigDecimal surplusRouteQuantity = new BigDecimal("0.00");
+				BigDecimal balanceQuantity = new BigDecimal("0.00");
+				GoodsDesc goodsDesc = goodsDescList.stream().filter(e -> e.getId().equals(orderItems.getItemId())).findFirst().orElse(new GoodsDesc());
+				if (ObjectUtils.isNotNull(goodsDesc)) {
+					orderAmount = orderAmount.add(goodsDesc.getIntegral().multiply(orderItems.getStorageInQuantity()));
+				}
+
+				R<StockGoodsVO> r = stockGoodsClient.selectStockParts(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
+				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+					if (r.getData().getSurplusRouteQuantity().compareTo(orderItems.getStorageInQuantity()) < 0) {
+						throw new RuntimeException("库存不足,兑换失败");
+					}
+					surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().subtract(orderItems.getStorageInQuantity()));
+					balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
+					r.getData().setSurplusRouteQuantity(surplusRouteQuantity);
+					r.getData().setBalanceQuantity(balanceQuantity);
+					r.getData().setTenantId(order.getTenantId());
+					list.add(r.getData());
+				} else {
+					throw new RuntimeException("未找到库存信息");
+				}
+			}
+			if (list.size() > 0) {
+				R ress = stockGoodsClient.updateStockListYCP(BeanUtil.copy(list, StockGoods.class));
+				if (!ress.isSuccess()) {
+					throw new RuntimeException(ress.getMsg());
+				}
+			}
+			List<OrderItems> orderItemsList = orderItemsService.saveOrderItemsMessage(order.getOrderItemsList(), date, order.getId());
+			order.setOrderItemsList(orderItemsList);
+			order.setOrderAmount(orderAmount);
+			//入库出库数量
+			order.setStorageQuantity(order.getOrderItemsList().stream().map(OrderItems::getStorageInQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		}
+		if (corpsDesc.getPointsBalance().compareTo(order.getOrderAmount()) < 0) {
+			throw new RuntimeException("积分余额不足,兑换失败");
+		}
+		corpsDesc.setPointsBalance(corpsDesc.getPointsBalance().subtract(order.getOrderAmount()));
+		corpsDescClient.updateCorps(corpsDesc);
+		order.setDebitAmount(order.getOrderAmount());
+		order.setBalanceAmount(order.getDebitAmount());
+		order.setPurchaseAmount(order.getDebitAmount());
+		baseMapper.updateById(order);
+		return R.data(order);
+	}
+
+	@Override
 	public R salesList(Order order) {
 		List<Order> orderList = baseMapper.selectList(new LambdaQueryWrapper<Order>()
 			.eq(Order::getIsDeleted, 0)
@@ -6929,11 +7154,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		order.setActualPaymentStatus(1);
 		order.setStatus(0);
 		this.paymentApply(order, order.getBillType(), order.getTradeType());
-		order.setDebitAmount(order.getOrderAmount());
+		if(ObjectUtils.isNotNull(order.getMemberBalance())){
+			order.setDebitAmount(order.getOrderAmount().subtract(order.getMemberBalance()));
+		}else{
+			order.setDebitAmount(order.getOrderAmount());
+		}
 		order.setBalanceAmount(order.getOrderAmount());
 //		order.setPurchaseAmount(order.getOrderAmount());
 
-		order.setSettlmentAmount(order.getOrderAmount().subtract(order.getOrderAmount()));
+		order.setSettlmentAmount(order.getOrderAmount().subtract(order.getDebitAmount()));
 		baseMapper.updateById(order);
 		// 保存订单文件信息
 		if (CollectionUtils.isNotEmpty(order.getOrderFilesList())) {
@@ -7208,6 +7437,263 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		return baseMapper.stockDataDetails(pjStockDetails);
 	}
 
+	@Override
+	public R quickBillingWXv2(Order order) {
+		// 校验单号重复-新增
+		if (order.getId() == null && StringUtils.isNotBlank(order.getOrderNo())) {
+			LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			orderLambdaQueryWrapper
+				.eq(Order::getOrderNo, order.getOrderNo())
+				.eq(Order::getTradeType, order.getTradeType())
+				.eq(Order::getBillType, order.getBillType())
+				.eq(Order::getTenantId, AuthUtil.getTenantId())
+				.eq(Order::getIsDeleted, 0);
+			Integer count = baseMapper.selectCount(orderLambdaQueryWrapper);
+			if (count != null && count > 0) {
+				throw new SecurityException("合同号:" + order.getOrderNo() + "已存在,禁止重复添加");
+			}
+		}
+		// 校验单号重复-编辑
+		else {
+			LambdaQueryWrapper<Order> orderLambdaQueryWrapper = new LambdaQueryWrapper<>();
+			orderLambdaQueryWrapper
+				.ne(Order::getId, order.getId())
+				.eq(Order::getOrderNo, order.getOrderNo())
+				.eq(Order::getTradeType, order.getTradeType())
+				.eq(Order::getBillType, order.getBillType())
+				.eq(Order::getTenantId, AuthUtil.getTenantId())
+				.eq(Order::getIsDeleted, 0);
+			Integer count = baseMapper.selectCount(orderLambdaQueryWrapper);
+			if (count != null && count > 0) {
+				throw new SecurityException("合同号:" + order.getOrderNo() + "已存在,禁止重复添加");
+			}
+		}
+		Date date = new Date();
+		CorpsDesc corpsDesc = new CorpsDesc();
+		if (ObjectUtils.isNotNull(order.getCorpId())) {
+			corpsDesc = corpsDescClient.getCorpId(order.getCorpId());
+			if (ObjectUtils.isNotNull(corpsDesc)) {
+				if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+					throw new RuntimeException("会员余额不足,支付失败");
+				}
+				if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
+					order.setArrivalAddress(corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
+				}
+			}
+		} else {
+			if (AuthUtil.getUserRole().equals("客户")) {
+				CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
+				if (ObjectUtils.isNull(corpsAttn)) {
+					throw new RuntimeException("未查到用户信息");
+				} else {
+					corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
+					if (ObjectUtils.isNull(corpsDesc)) {
+						throw new RuntimeException("未查到用户信息");
+					} else {
+						if (corpsDesc.getBalanceAmount().compareTo(order.getMemberBalance()) < 0) {
+							throw new RuntimeException("会员余额不足,支付失败");
+						}
+						order.setCorpId(corpsDesc.getId());
+					}
+				}
+			}
+		}
+		corpsDesc.setBalanceAmount(corpsDesc.getBalanceAmount().subtract(order.getMemberBalance()));
+		corpsDescClient.updateCorps(corpsDesc);
+		// 订单时间
+		order.setBusinesDate(new Date());
+		order.setSalesName(AuthUtil.getUserId() + "");
+		order.setStatus(3);
+		order.setConfirmStatus(2);
+		order.setActualPaymentStatus(2);
+		// 保存订单主表信息
+		// 获取系统编号
+		R billNo = serialClient.getBillNo(order.getBillType(), order.getTradeType(), order.getBillType());
+		if (billNo.getCode() != 200) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成系统编号失败");
+		}
+		order.setSysNo((String) billNo.getData());
+		R clientBillNo = serialClient.getBillNo(order.getBillType(), order.getTradeType(), order.getBillType());
+		if (!clientBillNo.isSuccess()) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return R.fail(500, "生成订单编号失败");
+		}
+		order.setOrderNo((String) clientBillNo.getData());
+		// 进口的orgOrderNo 存的是采购订单号  出口国内存的是本身的订单号码
+		if (!order.getBillType().equals(OrderTypeEnum.IMPORT.getType())) {
+			order.setOrgOrderNo((String) clientBillNo.getData());
+		}
+
+		order.setTenantId(SecureUtil.getTenantId());
+		order.setCreateTime(date);
+		order.setCreateUser(SecureUtil.getUserId());
+		if (order.getBusinesDate() == null) {
+			order.setBusinesDate(date);
+		}
+		order.setClient(AuthUtil.getUser().getRoleName());
+		R<User> userR = userClient.userInfoById(AuthUtil.getUserId());
+		if (userR.isSuccess() && ObjectUtils.isNotNull(userR.getData())) {
+			order.setClientAttn(userR.getData().getPhone());
+		}
+		baseMapper.insert(order);
+		BigDecimal costAmount = new BigDecimal("0.00");
+		BigDecimal grossProfit = new BigDecimal("0.00");
+		// 保存订单明细
+		if (CollectionUtils.isNotEmpty(order.getOrderItemsList())) {
+			List<StockGoodsVO> list = new ArrayList<>();
+			List<StockGoods> stockGoodsList = new ArrayList<>();
+			for (OrderItems orderItems : order.getOrderItemsList()) {
+				if ("XS".equals(order.getBillType())) {
+					orderItems.setAmount(orderItems.getStorageInQuantity().multiply(orderItems.getPrice(), MathContext.DECIMAL32));
+				} else {
+					orderItems.setAmount(orderItems.getStorageInQuantity().multiply(orderItems.getPurchasePrice(), MathContext.DECIMAL32));
+				}
+				orderItems.setPurchaseCost(orderItems.getPurchasePrice());
+				//获取本商品库存
+				R<StockGoodsVO> r = stockGoodsClient.selectStockParts(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
+				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
+					BigDecimal stockPrice = new BigDecimal("0.00");
+					BigDecimal surplusRouteQuantity = new BigDecimal("0.00");
+					BigDecimal balanceQuantity = new BigDecimal("0.00");
+					BigDecimal balanceAmount = new BigDecimal("0.00");
+					if ("XS".equals(order.getBillType())) {
+						if (new BigDecimal("0.00").equals(r.getData().getSurplusRouteQuantity())) {
+							costAmount = costAmount.add(orderItems.getPurchasePrice().multiply(orderItems.getStorageInQuantity()));
+						} else {
+							costAmount = costAmount.add(r.getData().getStockPrice().multiply(orderItems.getStorageInQuantity()));
+						}
+						BigDecimal grossProfits = orderItems.getPrice().subtract(orderItems.getPurchasePrice());
+						grossProfit = grossProfit.add(orderItems.getStorageInQuantity().multiply(grossProfits));
+
+						surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().subtract(orderItems.getStorageInQuantity()));
+						balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
+						if (new BigDecimal("0.00").compareTo(balanceQuantity) <= 0) {
+							balanceAmount = balanceAmount.add(orderItems.getStorageInQuantity().multiply(orderItems.getPurchaseCost(), MathContext.DECIMAL32));
+						} else {
+							balanceAmount = balanceAmount.add(balanceQuantity.multiply(orderItems.getPurchaseCost(), MathContext.DECIMAL32));
+						}
+						r.getData().setOutQuantity(r.getData().getOutQuantity().add(orderItems.getStorageInQuantity()));
+						r.getData().setOutAmount(r.getData().getOutAmount().add(orderItems.getPrice().multiply(orderItems.getStorageInQuantity())));
+					} else {
+						costAmount = costAmount.add(orderItems.getPurchasePrice().multiply(orderItems.getStorageInQuantity()));
+						grossProfit = grossProfit.add(new BigDecimal("0.00"));
+						surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().add(orderItems.getStorageInQuantity()));
+						balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
+						balanceAmount = balanceAmount.add(orderItems.getStorageInQuantity().multiply(orderItems.getPrice(), MathContext.DECIMAL32)).add(r.getData().getBalanceAmount());
+						stockPrice = stockPrice.add(balanceAmount.divide(balanceQuantity, MathContext.DECIMAL32).setScale(2, RoundingMode.HALF_UP));
+
+						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().setTenantId(order.getTenantId());
+					list.add(r.getData());
+				} else {
+					StockGoods stockGoods = new StockGoods();
+					if ("CG".equals(order.getBillType())) {
+						stockGoods.setGoodsId(orderItems.getItemId());
+						stockGoods.setStorageId(orderItems.getStorageId());
+						stockGoods.setPurchasePrice(orderItems.getPrice());
+						stockGoods.setStockPrice(orderItems.getPrice());
+						stockGoods.setBalanceQuantity(orderItems.getStorageInQuantity());
+						stockGoods.setBalanceAmount(stockGoods.getBalanceQuantity().multiply(orderItems.getPrice()));
+						stockGoods.setSurplusRouteQuantity(orderItems.getStorageInQuantity());
+						stockGoodsClient.saveStock(stockGoods);
+					} else {
+						stockGoods.setGoodsId(orderItems.getItemId());
+						stockGoods.setStorageId(orderItems.getStorageId());
+						stockGoods.setPurchasePrice(orderItems.getPrice());
+						stockGoods.setStockPrice(orderItems.getPrice());
+						stockGoods.setBalanceQuantity(new BigDecimal("0.00").subtract(orderItems.getStorageInQuantity()));
+						stockGoods.setBalanceAmount(new BigDecimal("0.00").subtract(stockGoods.getBalanceQuantity().multiply(orderItems.getPrice())));
+						stockGoods.setSurplusRouteQuantity(new BigDecimal("0.00").subtract(orderItems.getStorageInQuantity()));
+						stockGoodsClient.saveStock(stockGoods);
+					}
+					stockGoodsList.add(stockGoods);
+				}
+			}
+			if (list.size() > 0) {
+				R ress = stockGoodsClient.updateStockListYCP(BeanUtil.copy(list, StockGoods.class));
+				if (!ress.isSuccess()) {
+					throw new RuntimeException(ress.getMsg());
+				}
+			}
+			if (stockGoodsList.size() > 0) {
+				stockGoodsClient.saveStockListYCP(stockGoodsList);
+			}
+			List<OrderItems> orderItemsList = orderItemsService.saveOrderItemsMessage(order.getOrderItemsList(), date, order.getId());
+			order.setOrderItemsList(orderItemsList);
+			// todo 新
+			order.setPaymentGoods(order.getOrderAmount());
+			//应收账款
+			order.setDebitAmount(order.getOrderAmount());
+			//入库出库金额
+			order.setStorageAmount(order.getOrderItemsList().stream().map(OrderItems::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+			//入库出库数量
+			order.setStorageQuantity(order.getOrderItemsList().stream().map(OrderItems::getStorageInQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+		}
+		if (ObjectUtils.isNull(order.getThisUsedProfit())) {
+			order.setThisUsedProfit(new BigDecimal("0"));
+		}
+		if (ObjectUtils.isNull(order.getOrderAmount())) {
+			order.setOrderAmount((order.getStorageAmount() == null ? new BigDecimal("0.00") : order.getStorageAmount()).subtract((order.getThisUsedProfit() == null ? new BigDecimal("0.00") : order.getThisUsedProfit())));
+		}
+		order.setCostAmount(costAmount);
+		order.setGrossProfit(grossProfit);
+		order.setConfirmStatus(1);
+		this.paymentApply(order, order.getBillType(), order.getTradeType());
+		order.setDebitAmount(order.getOrderAmount());
+		order.setBalanceAmount(order.getOrderAmount().subtract(order.getMemberBalance()));
+		order.setPurchaseAmount(order.getOrderAmount());
+		order.setSettlmentAmount(order.getOrderAmount().subtract(order.getBalanceAmount()));
+		baseMapper.updateById(order);
+
+		// 保存订单文件信息
+		if (CollectionUtils.isNotEmpty(order.getOrderFilesList())) {
+			List<OrderFiles> orderFilesList = orderFilesService.saveOrderFileMessage(order.getOrderFilesList(), date, order.getId());
+			order.setOrderFilesList(orderFilesList);
+		}
+		if (ObjectUtils.isNotNull(corpsDesc.getAdminProfiles())) {
+			String[] arrs = corpsDesc.getAdminProfiles().split(",");
+			for (String arr : arrs) {
+				//信息
+				Message sendMessage = new Message();
+				sendMessage.setParameter(String.valueOf(order.getId()));
+				sendMessage.setUserName(AuthUtil.getUserName());
+				sendMessage.setUserId(AuthUtil.getUserId());
+				sendMessage.setToUserId(Long.parseLong(arr));
+				sendMessage.setMessageType(1);
+				sendMessage.setTenantId(AuthUtil.getTenantId());
+				sendMessage.setCreateUser(AuthUtil.getUserId());
+				sendMessage.setCreateTime(new Date());
+				sendMessage.setUrl(order.getUrl());
+				sendMessage.setPageLabel(order.getPageLabel());
+				sendMessage.setPageStatus(order.getPageStatus());
+				sendMessage.setMessageBody("您的单号:" + order.getSysNo() + "下单成功!");
+				R save = messageClient.save(sendMessage);
+				if (!save.isSuccess()) {
+					throw new SecurityException("发送消息失败");
+				}
+			}
+		}
+		return R.data(order);
+	}
+
+	@Override
+	public IPage<Map<String, Object>> integralRecord(IPage<Map<String, Object>> page, Order order) {
+		return page.setRecords(baseMapper.integralRecord(page, order));
+	}
+
+	@Override
+	public List<OrderItemsExport> export(OrderVO order) {
+		return baseMapper.export(order);
+	}
+
 	/**
 	 * 状态统计
 	 * <p>
@@ -7728,6 +8214,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			applyDTO.setSrcSysno(order.getSysNo());
 			applyDTO.setItemType(itemType);
 			applyDTO.setCorpId(order.getCorpId());
+			applyDTO.setStorageId(order.getStorageId());
 			applyDTO.setSrcId(order.getId());
 			applyDTO.setSrcFeesId(order.getId());
 			applyDTO.setCurrency("CNY");
@@ -7738,6 +8225,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			applyDTO.setChargeMember(order.getChargeMember());
 			applyDTO.setUnit("条");
 			applyDTO.setRemarks(order.getOrderRemark());
+			applyDTO.setSettlementAmount(order.getSettlmentAmount());
+			applyDTO.setMemberBalance(order.getMemberBalance());
 			//获取费用id
 			R<FeesDesc> fees = feesDescClient.getFeesByName("货款");
 			if (fees.isSuccess() && fees.getData() != null) {
@@ -7758,7 +8247,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 			applyDTO.setQuantity(quantity);
 			applyDTO.setReceivedAmount(order.getCurrentAmount());
 			if (ObjectUtils.isNotNull(order.getCurrentAmount())) {
-				applyDTO.setSettlementAmount(order.getSettlmentAmount().add(order.getCurrentAmount()));
+				applyDTO.setSettlementAmount(order.getSettlmentAmount().add(order.getCurrentAmount()).add(order.getMemberBalance()));
 			}
 			//生成账单
 			R paymentApply = financeClient.paymentApplyParts(applyDTO);

+ 7 - 0
blade-service/blade-stock/src/main/java/org/springblade/stock/mapper/StockGoodsMapper.xml

@@ -146,6 +146,8 @@
         t3.label AS labels,
         t3.upper_frame AS upperFrame,
         t3.sales_volumes AS salesVolumes,
+        t3.integral AS integral,
+        t3.whether_integral AS whetherIntegral,
         t4.cname AS goodsType,
         t5.url AS url,
         t1.remarks AS remarks,
@@ -167,6 +169,9 @@
             <if test="stock.goods != null and stock.goods != ''">
                 and (t3.cname like concat('%', #{stock.goods}, '%') or t3.cname_int like concat('%', #{stock.goods}, '%') or t3.code like concat('%', #{stock.goods}, '%'))
             </if>
+            <if test="stock.whetherIntegral != null and stock.whetherIntegral != ''">
+                and t3.whether_integral = #{stock.whetherIntegral}
+            </if>
             <if test="stock.upperFrame != null and stock.upperFrame != ''">
                 and t3.upper_frame = #{stock.upperFrame}
             </if>
@@ -420,6 +425,8 @@
         t3.label AS labels,
         t3.upper_frame AS upperFrame,
         t3.sales_volumes AS salesVolumes,
+        t3.integral AS integral,
+        t3.whether_integral AS whetherIntegral,
         t4.cname AS goodsType,
         t5.url AS url,
         t1.remarks AS remarks,

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

@@ -373,17 +373,42 @@ public class StockGoodsServiceImpl extends ServiceImpl<StockGoodsMapper, StockGo
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R<StockGoods> updateMessage(StockGoods stockGoods) {
+		StockGoods details = new StockGoods();
 		if (stockGoods.getId() == null) {
 			stockGoods.setCreateTime(new Date());
 			stockGoods.setCreateUser(SecureUtil.getUserId());
 			stockGoods.setTenantId(SecureUtil.getTenantId());
 			baseMapper.insert(stockGoods);
 		} else {
+			details = baseMapper.selectById(stockGoods.getId());
+			if (!stockGoods.getVersion().equals(details.getVersion())) {
+				throw new RuntimeException("数据已变动,请刷新后再编辑");
+			}
 			stockGoods.setUpdateUser(SecureUtil.getUserId());
 			stockGoods.setUpdateTime(new Date());
+			stockGoods.setVersion(details.getVersion());
 			baseMapper.updateById(stockGoods);
 		}
+		StockGoodsLog stockGoodsLog = new StockGoodsLog();
+		stockGoodsLog.setTime(new Date());
+		stockGoodsLog.setSrcOrderId(details.getId());
+		stockGoodsLog.setUserName(AuthUtil.getUserName());
+		stockGoodsLog.setType("手动库存修改");
+		stockGoodsLog.setTenantId(AuthUtil.getTenantId());
+		stockGoodsLog.setCreateUser(AuthUtil.getUserId());
+		stockGoodsLog.setCreateTime(new Date());
+		stockGoodsLog.setStockId(details.getId());
+		stockGoodsLog.setBalanceQuantityOld(details.getBalanceQuantity());
+		stockGoodsLog.setSurplusRouteQuantityOld(details.getSurplusRouteQuantity());
+		stockGoodsLog.setLockingQuantityOld(details.getLockingQuantity());
+		stockGoodsLog.setOrderQuantity(new BigDecimal("0.00"));
+		stockGoodsLog.setBalanceQuantity(stockGoods.getBalanceQuantity());
+		stockGoodsLog.setSurplusRouteQuantity(stockGoods.getSurplusRouteQuantity());
+		stockGoodsLog.setLockingQuantity(stockGoods.getLockingQuantity());
+		stockGoodsLogService.saveOrUpdate(stockGoodsLog);
 		redisClient.basicData("stockGoods");
 		return R.data(stockGoods);
 	}

+ 5 - 0
blade-service/blade-system/src/main/java/org/springblade/system/feign/SysClient.java

@@ -239,6 +239,11 @@ public class SysClient implements ISysClient {
 	}
 
 	@Override
+	public R updateByDept(Dept data) {
+		return R.data(deptService.updateById(data));
+	}
+
+	@Override
 	@GetMapping(TENANT_ID)
 	public R<Tenant> getTenant(String tenantId) {
 		return R.data(tenantService.getByTenantId(tenantId));

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

@@ -224,6 +224,11 @@ public class UserClient implements IUserClient {
 		return String.join(",", idLists);
 	}
 
+	@Override
+	public void updateUserById(User data) {
+		service.updateById(data);
+	}
+
 	/**
 	 * 获取用户
 	 * @param user

+ 4 - 2
blade-service/trade-finance/src/main/java/org/springblade/finance/controller/SettlementController.java

@@ -177,8 +177,10 @@ public class SettlementController extends BladeController {
 
 		List<CorpsBank> corpsBanks = corpsDescClient.listBankByCorpId(detail.getCorpId());
 		detail.setBankList(corpsBanks);
-		//制单人
-		detail.setCreateUserName(iUserClient.userInfoById(detail.getCreateUser()).getData().getRealName());
+		if (ObjectUtils.isNotNull(detail.getCreateUser())){
+			//制单人
+			detail.setCreateUserName(iUserClient.userInfoById(detail.getCreateUser()).getData().getRealName());
+		}
 
 		return R.data(detail);
 	}

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

@@ -2924,6 +2924,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 						model.setSysNo(String.valueOf(System.currentTimeMillis()));
 						model.setPaymentStatus(dto.getPaymentStatus());
 						model.setPaymentType(dto.getPaymentType());
+						model.setMemberBalance(dto.getMemberBalance());
 						if (ObjectUtils.isNotNull(dto.getTenantId())) {
 							model.setTenantId(dto.getTenantId());
 						} else {
@@ -3006,6 +3007,13 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 						acc.setUpdateUser(AuthUtil.getUserId());
 					}
 					accMapper.updateById(acc);
+					if (acc.getSettlementAmount().compareTo(acc.getAmount()) == 0) {
+						Order order = new Order();
+						order.setId(acc.getSrcParentId());
+						order.setCorpId(acc.getCorpId());
+						order.setStorageId(dto.getStorageId());
+						corpsDescClient.updateIntegral(order);
+					}
 				}
 			}
 		}