纪新园 пре 2 година
родитељ
комит
70399c6be4
27 измењених фајлова са 797 додато и 104 уклоњено
  1. 1 1
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IFeesDescClient.java
  2. 111 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/entity/IntegralDetail.java
  3. 4 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderItemsClient.java
  4. 36 0
      blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/vo/IntegralDetailVO.java
  5. 38 9
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxFeesController.java
  6. 34 1
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxItemController.java
  7. 13 1
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransportItemController.java
  8. 41 1
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransportItemFeesController.java
  9. 3 2
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java
  10. 3 2
      blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransportServiceImpl.java
  11. 60 21
      blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java
  12. 2 2
      blade-service/blade-client/src/main/java/org/springblade/client/fees/feign/FeesDescClient.java
  13. 27 3
      blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescController.java
  14. 27 2
      blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescPartsController.java
  15. 126 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/IntegralDetailController.java
  16. 2 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java
  17. 8 5
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderItemsClient.java
  18. 42 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/IntegralDetailMapper.java
  19. 26 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/IntegralDetailMapper.xml
  20. 2 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/OrderMapper.xml
  21. 44 37
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/partsapp/AppPartsController.java
  22. 41 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IIntegralDetailService.java
  23. 41 0
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/IntegralDetailServiceImpl.java
  24. 26 1
      blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/OrderServiceImpl.java
  25. 33 15
      blade-service/blade-stock/src/main/java/org/springblade/stock/controller/StockGoodsController.java
  26. 5 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
  27. 1 0
      blade-service/trade-finance/src/main/java/org/springblade/finance/service/impl/SettlementServiceImpl.java

+ 1 - 1
blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/IFeesDescClient.java

@@ -40,7 +40,7 @@ public interface IFeesDescClient {
 	 * @return 费用集合
 	 */
 	@GetMapping(FEESDE_BASIC)
-	R<List<FeesDescVO>> selectGoodsBasic();
+	R<List<FeesDesc>> selectGoodsBasic();
 
 	@GetMapping(GET_FEES_BY_NAME)
 	R<FeesDesc> getFeesByName(@RequestParam("cname") String cName);

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

@@ -0,0 +1,111 @@
+/*
+ *      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.purchase.sales.entity;
+
+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.util.Date;
+
+/**
+ * 积分明细表实体类
+ *
+ * @author BladeX
+ * @since 2023-08-08
+ */
+@Data
+@TableName("business_integral_detail")
+@ApiModel(value = "IntegralDetail对象", description = "积分明细表")
+public class IntegralDetail implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 来源id
+	 */
+	@ApiModelProperty(value = "来源id")
+	private Long srcId;
+	/**
+	 * 时间
+	 */
+	@ApiModelProperty(value = "时间")
+	private Date createTime;
+	/**
+	 * 积分
+	 */
+	@ApiModelProperty(value = "积分")
+	private BigDecimal integral;
+	/**
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	private Long corpId;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	private String createUserName;
+	/**
+	 * 供应商名称
+	 */
+	@ApiModelProperty(value = "供应商名称")
+	private String corpName;
+	/**
+	 * 类型
+	 */
+	@ApiModelProperty(value = "类型")
+	private String type;
+	/**
+	 * 来源单号
+	 */
+	@ApiModelProperty(value = "来源单号")
+	private String srcNo;
+
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId;
+	/**
+	 * 商品名称
+	 */
+	@ApiModelProperty(value = "商品名称")
+	private String goodsName;
+	/**
+	 * 商品id
+	 */
+	@ApiModelProperty(value = "商品id")
+	private String goodsId;
+
+
+}

+ 4 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/feign/IOrderItemsClient.java

@@ -3,6 +3,7 @@ package org.springblade.purchase.sales.feign;
 import io.swagger.annotations.ApiParam;
 import org.springblade.common.constant.LauncherConstant;
 import org.springblade.core.tool.api.R;
+import org.springblade.purchase.sales.entity.IntegralDetail;
 import org.springblade.purchase.sales.entity.OrderFees;
 import org.springblade.purchase.sales.entity.OrderItems;
 import org.springframework.cloud.openfeign.FeignClient;
@@ -31,6 +32,7 @@ public interface IOrderItemsClient {
 	String LOT_NO = API_PREFIX +"/lotNo";
 	String SELECT_LIST = API_PREFIX +"/selectList";
 	String SELECT_LIST_YCP = API_PREFIX +"/selectListYCP";
+	String SAVE_INTEGRAL = API_PREFIX +"/saveIntegral";
 
 	/**
 	 * 修改订单明细发货数量
@@ -92,4 +94,6 @@ public interface IOrderItemsClient {
 	@GetMapping(SELECT_LIST_YCP)
 	R<List<OrderItems>> selectListYCP(@RequestParam("orderId") Long orderId,@RequestParam("tenantId")String tenantId);
 
+	@PostMapping(SAVE_INTEGRAL)
+	R saveIntegral(@RequestBody IntegralDetail integralDetail);
 }

+ 36 - 0
blade-service-api/blade-purchase-sales-api/src/main/java/org/springblade/purchase/sales/vo/IntegralDetailVO.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.purchase.sales.vo;
+
+import org.springblade.purchase.sales.entity.IntegralDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 积分明细表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-08-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "IntegralDetailVO对象", description = "积分明细表")
+public class IntegralDetailVO extends IntegralDetail {
+	private static final long serialVersionUID = 1L;
+
+}

+ 38 - 9
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxFeesController.java

@@ -16,24 +16,32 @@
  */
 package org.springblade.box.tube.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 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.box.tube.entity.TradingBoxFees;
+import org.springblade.box.tube.service.ITradingBoxFeesService;
+import org.springblade.box.tube.vo.TradingBoxFeesVO;
+import org.springblade.client.entity.FeesDesc;
+import org.springblade.client.feign.IFeesDescClient;
+import org.springblade.client.vo.FeesDescVO;
 import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.core.boot.ctrl.BladeController;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.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.box.tube.entity.TradingBoxFees;
-import org.springblade.box.tube.vo.TradingBoxFeesVO;
-import org.springblade.box.tube.service.ITradingBoxFeesService;
-import org.springblade.core.boot.ctrl.BladeController;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * 买(卖)箱费用明细表 控制器
@@ -49,6 +57,8 @@ public class TradingBoxFeesController extends BladeController {
 
 	private final ITradingBoxFeesService tradingBoxFeesService;
 
+	private final IFeesDescClient feesDescClient;
+
 	/**
 	 * 详情
 	 */
@@ -67,7 +77,19 @@ public class TradingBoxFeesController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入tradingBoxFees")
 	public R<IPage<TradingBoxFees>> list(TradingBoxFees tradingBoxFees, Query query) {
-		IPage<TradingBoxFees> pages = tradingBoxFeesService.page(Condition.getPage(query), Condition.getQueryWrapper(tradingBoxFees));
+		R<List<FeesDesc>> res = feesDescClient.selectGoodsBasic();
+		List<FeesDesc> feesDescVOList = new ArrayList<>();
+		if (res.isSuccess() && res.getData().size() > 0) {
+			feesDescVOList = res.getData();
+		}
+		IPage<TradingBoxFees> pages = tradingBoxFeesService.page(Condition.getPage(query), Condition.getQueryWrapper(tradingBoxFees).orderByDesc());
+
+		for (TradingBoxFees item : pages.getRecords()) {
+			FeesDesc descVO = feesDescVOList.stream().filter(e -> e.getId().equals(item.getItemId())).findFirst().orElse(new FeesDescVO());
+			if (ObjectUtils.isNotNull(descVO)) {
+				item.setItemName(descVO.getCname());
+			}
+		}
 		return R.data(pages);
 	}
 
@@ -110,6 +132,13 @@ public class TradingBoxFeesController extends BladeController {
 	@ApiOperation(value = "新增或修改", notes = "传入tradingBoxFees")
 	@RepeatSubmit
 	public R submit(@Valid @RequestBody TradingBoxFees tradingBoxFees) {
+		if (tradingBoxFees.getId() == null) {
+			tradingBoxFees.setCreateUser(AuthUtil.getUserId());
+			tradingBoxFees.setCreateTime(new Date());
+		} else {
+			tradingBoxFees.setUpdateTime(new Date());
+			tradingBoxFees.setUpdateUser(AuthUtil.getUserId());
+		}
 		return R.status(tradingBoxFeesService.saveOrUpdate(tradingBoxFees));
 	}
 

+ 34 - 1
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TradingBoxItemController.java

@@ -40,6 +40,7 @@ import org.springblade.box.tube.service.ITradingBoxItemService;
 import org.springblade.core.boot.ctrl.BladeController;
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -74,7 +75,30 @@ public class TradingBoxItemController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入tradingBoxItem")
 	public R<IPage<TradingBoxItem>> list(TradingBoxItem tradingBoxItem, Query query) {
-		IPage<TradingBoxItem> pages = tradingBoxItemService.page(Condition.getPage(query), Condition.getQueryWrapper(tradingBoxItem));
+		if (ObjectUtils.isNull(tradingBoxItem.getPid())){
+			return R.data(null);
+		}
+		LambdaQueryWrapper<TradingBoxItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
+			.eq(TradingBoxItem::getIsDeleted, 0)
+			.eq(TradingBoxItem::getPid, tradingBoxItem.getPid())
+			.like(ObjectUtils.isNotNull(tradingBoxItem.getCode()), TradingBoxItem::getCode, tradingBoxItem.getCode())//箱号
+			.eq(ObjectUtils.isNotNull(tradingBoxItem.getStatus()), TradingBoxItem::getStatus, tradingBoxItem.getStatus())//状态
+			.eq(ObjectUtils.isNotNull(tradingBoxItem.getBoxTypeId()), TradingBoxItem::getBoxTypeId, tradingBoxItem.getBoxTypeId());//箱类型
+		if (tradingBoxItem.getLeaseCommencementDateList() != null && tradingBoxItem.getLeaseCommencementDateList().size() > 1) {//起租时间
+			lambdaQueryWrapper.ge(TradingBoxItem::getLeaseCommencementDate, tradingBoxItem.getLeaseCommencementDateList().get(0));
+			lambdaQueryWrapper.le(TradingBoxItem::getLeaseCommencementDate, tradingBoxItem.getLeaseCommencementDateList().get(1));
+		}
+		if (tradingBoxItem.getRentingOutDateList() != null && tradingBoxItem.getRentingOutDateList().size() > 1) {//退租日期
+			lambdaQueryWrapper.ge(TradingBoxItem::getRentingOutDate, tradingBoxItem.getRentingOutDateList().get(0));
+			lambdaQueryWrapper.le(TradingBoxItem::getRentingOutDate, tradingBoxItem.getRentingOutDateList().get(1));
+		}
+		if (tradingBoxItem.getRentEndDateList() != null && tradingBoxItem.getRentEndDateList().size() > 1) {//当前租金日期
+			lambdaQueryWrapper.ge(TradingBoxItem::getRentEndDate, tradingBoxItem.getRentEndDateList().get(0));
+			lambdaQueryWrapper.le(TradingBoxItem::getRentEndDate, tradingBoxItem.getRentEndDateList().get(1));
+		}
+		lambdaQueryWrapper.orderByDesc(TradingBoxItem::getCreateTime);
+		IPage<TradingBoxItem> pages = tradingBoxItemService.page(Condition.getPage(query), lambdaQueryWrapper);
 		return R.data(pages);
 	}
 
@@ -151,6 +175,15 @@ public class TradingBoxItemController extends BladeController {
 	@ApiOperation(value = "新增或修改", notes = "传入tradingBoxItem")
 	@RepeatSubmit
 	public R submit(@Valid @RequestBody TradingBoxItem tradingBoxItem) {
+		if (tradingBoxItem.getId() == null){
+			tradingBoxItem.setCreateUser(AuthUtil.getUserId());
+			tradingBoxItem.setCreateUserName(AuthUtil.getUserName());
+			tradingBoxItem.setCreateTime(new Date());
+		}else{
+			tradingBoxItem.setUpdateTime(new Date());
+			tradingBoxItem.setUpdateUser(AuthUtil.getUserId());
+			tradingBoxItem.setUpdateUserName(AuthUtil.getUserName());
+		}
 		return R.status(tradingBoxItemService.saveOrUpdate(tradingBoxItem));
 	}
 

+ 13 - 1
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransportItemController.java

@@ -26,6 +26,7 @@ import javax.validation.Valid;
 import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
@@ -35,6 +36,8 @@ import org.springblade.box.tube.vo.TransportItemVO;
 import org.springblade.box.tube.service.ITransportItemService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.Date;
+
 /**
  * 进出口返程明细表 控制器
  *
@@ -67,7 +70,7 @@ public class TransportItemController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入transportItem")
 	public R<IPage<TransportItem>> list(TransportItem transportItem, Query query) {
-		IPage<TransportItem> pages = transportItemService.page(Condition.getPage(query), Condition.getQueryWrapper(transportItem));
+		IPage<TransportItem> pages = transportItemService.page(Condition.getPage(query), Condition.getQueryWrapper(transportItem).orderByDesc());
 		return R.data(pages);
 	}
 
@@ -110,6 +113,15 @@ public class TransportItemController extends BladeController {
 	@ApiOperation(value = "新增或修改", notes = "传入transportItem")
 	@RepeatSubmit
 	public R submit(@Valid @RequestBody TransportItem transportItem) {
+		if (transportItem.getId() == null){
+			transportItem.setCreateUser(AuthUtil.getUserId());
+			transportItem.setCreateUserName(AuthUtil.getUserName());
+			transportItem.setCreateTime(new Date());
+		}else{
+			transportItem.setUpdateTime(new Date());
+			transportItem.setUpdateUser(AuthUtil.getUserId());
+			transportItem.setUpdateUserName(AuthUtil.getUserName());
+		}
 		return R.status(transportItemService.saveOrUpdate(transportItem));
 	}
 

+ 41 - 1
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/controller/TransportItemFeesController.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.box.tube.controller;
 
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -23,9 +24,16 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
 
+import org.springblade.box.tube.entity.TradingBoxFees;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.entity.FeesDesc;
+import org.springblade.client.feign.ICorpsDescClient;
+import org.springblade.client.feign.IFeesDescClient;
+import org.springblade.client.vo.FeesDescVO;
 import org.springblade.common.annotation.RepeatSubmit;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.web.bind.annotation.*;
@@ -35,6 +43,10 @@ import org.springblade.box.tube.vo.TransportItemFeesVO;
 import org.springblade.box.tube.service.ITransportItemFeesService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
 /**
  * 进出口明细费用表 控制器
  *
@@ -49,6 +61,10 @@ public class TransportItemFeesController extends BladeController {
 
 	private final ITransportItemFeesService transportItemFeesService;
 
+	private final IFeesDescClient feesDescClient;
+
+	private final ICorpsDescClient corpsDescClient;
+
 	/**
 	 * 详情
 	 */
@@ -67,7 +83,24 @@ public class TransportItemFeesController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入transportItemFees")
 	public R<IPage<TransportItemFees>> list(TransportItemFees transportItemFees, Query query) {
-		IPage<TransportItemFees> pages = transportItemFeesService.page(Condition.getPage(query), Condition.getQueryWrapper(transportItemFees));
+		R<List<FeesDesc>> res = feesDescClient.selectGoodsBasic();
+		List<FeesDesc> feesDescVOList = new ArrayList<>();
+		if (res.isSuccess() && res.getData().size() > 0) {
+			feesDescVOList = res.getData();
+		}
+		IPage<TransportItemFees> pages = transportItemFeesService.page(Condition.getPage(query), Condition.getQueryWrapper(transportItemFees).orderByDesc());
+		for (TransportItemFees item : pages.getRecords()) {
+			FeesDesc descVO = feesDescVOList.stream().filter(e -> e.getId().equals(item.getItemId())).findFirst().orElse(new FeesDescVO());
+			if (ObjectUtils.isNotNull(descVO)) {
+				item.setItemName(descVO.getCname());
+			}
+			if (ObjectUtils.isNotNull(item.getCorpId())){
+				CorpsDesc corpsDesc = corpsDescClient.getCorpId(item.getCorpId());
+				if (ObjectUtils.isNotNull(corpsDesc)) {
+					item.setCorpName(corpsDesc.getCname());
+				}
+			}
+		}
 		return R.data(pages);
 	}
 
@@ -110,6 +143,13 @@ public class TransportItemFeesController extends BladeController {
 	@ApiOperation(value = "新增或修改", notes = "传入transportItemFees")
 	@RepeatSubmit
 	public R submit(@Valid @RequestBody TransportItemFees transportItemFees) {
+		if (transportItemFees.getId() == null){
+			transportItemFees.setCreateUser(AuthUtil.getUserId());
+			transportItemFees.setCreateTime(new Date());
+		}else{
+			transportItemFees.setUpdateTime(new Date());
+			transportItemFees.setUpdateUser(AuthUtil.getUserId());
+		}
 		return R.status(transportItemFeesService.saveOrUpdate(transportItemFees));
 	}
 

+ 3 - 2
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TradingBoxServiceImpl.java

@@ -125,6 +125,9 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 		}
 		TradingBox details = baseMapper.selectById(tradingBox.getId());
 		if (ObjectUtils.isNotNull(details)) {
+			details.setTradingBoxItemsList(new ArrayList<>());
+			//获取明细信息
+			/*
 			LambdaQueryWrapper<TradingBoxItem> tradingBoxItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			tradingBoxItemLambdaQueryWrapper.eq(TradingBoxItem::getIsDeleted, 0)
 				.eq(TradingBoxItem::getTenantId, AuthUtil.getTenantId())
@@ -132,8 +135,6 @@ public class TradingBoxServiceImpl extends ServiceImpl<TradingBoxMapper, Trading
 				.orderByDesc(TradingBoxItem::getCreateTime);
 			List<TradingBoxItem> tradingBoxItemList = tradingBoxItemMapper.selectList(tradingBoxItemLambdaQueryWrapper);
 			details.setTradingBoxItemsList(tradingBoxItemList);
-			//获取明细信息
-			/*
 			//商品
 			List<FeesDesc> feesDescList = new ArrayList<>();
 			feesDescList = castToList(redisTemplate.opsForValue().get("feeName"), FeesDesc.class);

+ 3 - 2
blade-service/blade-box-tube/src/main/java/org/springblade/box/tube/service/impl/TransportServiceImpl.java

@@ -117,6 +117,9 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 
 		Transport detail = baseMapper.selectById(transport.getId());
 		if (ObjectUtils.isNotNull(detail)) {
+			detail.setTransportItemList(new ArrayList<>());
+			//获取明细信息
+			/*
 			LambdaQueryWrapper<TransportItem> transportItemLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			transportItemLambdaQueryWrapper.eq(TransportItem::getIsDeleted, 0)
 				.eq(TransportItem::getTenantId, AuthUtil.getTenantId())
@@ -124,8 +127,6 @@ public class TransportServiceImpl extends ServiceImpl<TransportMapper, Transport
 				.orderByDesc(TransportItem::getCreateTime);
 			List<TransportItem> transportItemList = transportItemMapper.selectList(transportItemLambdaQueryWrapper);
 			detail.setTransportItemList(transportItemList);
-			//获取明细信息
-			/*
 			//获取费用信息
 			LambdaQueryWrapper<TransportItemFees> transportItemFeesLambdaQueryWrapper = new LambdaQueryWrapper<>();
 			transportItemFeesLambdaQueryWrapper.eq(TransportItemFees::getIsDeleted, 0)

+ 60 - 21
blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java

@@ -16,7 +16,6 @@ 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;
@@ -26,6 +25,7 @@ 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.IntegralDetail;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.feign.IOrderItemsClient;
@@ -40,6 +40,7 @@ import springfox.documentation.annotations.ApiIgnore;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -262,7 +263,17 @@ public class CorpsDescClient implements ICorpsDescClient {
 				orderItemsList = res.getData();
 			}
 		}
-		if (orderItemsList.size()>0){
+		IntegralDetail integralDetail = new IntegralDetail();
+		integralDetail.setCreateTime(new Date());
+		integralDetail.setCreateUserName(AuthUtil.getUserName());
+		integralDetail.setCreateUser(AuthUtil.getUserId());
+		integralDetail.setType("购买获取");
+		StringBuilder goodsName = new StringBuilder();
+		StringBuilder goodsIds = new StringBuilder();
+
+		if (orderItemsList.size() > 0) {
+			integralDetail.setSrcId(orderItemsList.get(0).getPid());
+			integralDetail.setSrcNo(order.getSysNo());
 			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());
@@ -280,22 +291,30 @@ public class CorpsDescClient implements ICorpsDescClient {
 					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)) {
+							goodsName.append(goodsDesc.getCname()).append(",");
+							goodsIds.append(goodsDesc.getId()).append(",");
 							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()));
 						}
 					}
+					integralDetail.setGoodsName(goodsName.toString());
+					integralDetail.setGoodsId(goodsIds.toString());
+					integralDetail.setCorpId(corpsDesc.getId());
+					integralDetail.setCorpName(corpsDesc.getCname());
+					integralDetail.setIntegral(pointsBalance);
 					corpsDesc.setPointsBalance(pointsBalance);
-					corps.setPointsBalance(referenceIntegral);
 					service.updateById(corpsDesc);
-					service.updateById(corps);
+					if (ObjectUtils.isNotNull(corps)) {
+						corps.setPointsBalance(referenceIntegral.add(ObjectUtils.isNotNull(corps.getPointsBalance()) ? corps.getPointsBalance() : new BigDecimal("0.00")));
+						service.updateById(corps);
+					}
+					orderItemsClient.saveIntegral(integralDetail);
 					if (ObjectUtils.isNotNull(corpsDesc.getAdminProfiles())) {
 						R<User> user = userClient.userInfoById(Long.parseLong(corpsDesc.getAdminProfiles()));
 						if (user.isSuccess() && ObjectUtils.isNotNull(user.getData())) {
@@ -303,10 +322,12 @@ public class CorpsDescClient implements ICorpsDescClient {
 							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());
+					if (ObjectUtils.isNotNull(storageDesc.getDeptId())){
+						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());
+						}
 					}
 				}
 			}
@@ -330,7 +351,16 @@ public class CorpsDescClient implements ICorpsDescClient {
 				orderItemsList = res.getData();
 			}
 		}
-		if (orderItemsList.size()>0){
+		IntegralDetail integralDetail = new IntegralDetail();
+		integralDetail.setCreateTime(new Date());
+		integralDetail.setCreateUserName(AuthUtil.getUserName());
+		integralDetail.setCreateUser(AuthUtil.getUserId());
+		integralDetail.setType("退款退货");
+		StringBuilder goodsName = new StringBuilder();
+		StringBuilder goodsIds = new StringBuilder();
+		if (orderItemsList.size() > 0) {
+			integralDetail.setSrcId(orderItemsList.get(0).getPid());
+			integralDetail.setSrcNo(order.getSysNo());
 			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());
@@ -348,22 +378,29 @@ public class CorpsDescClient implements ICorpsDescClient {
 					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)) {
+							goodsName.append(goodsDesc.getCname()).append(",");
+							goodsIds.append(goodsDesc.getId()).append(",");
 							pointsBalance = pointsBalance.subtract(item.getStorageInQuantity().multiply(goodsDesc.getIntegral()));
 							storeIntegral = storeIntegral.add(item.getStorageInQuantity().multiply(goodsDesc.getStoreIntegral()));
 							referenceIntegral = referenceIntegral.subtract(item.getStorageInQuantity().multiply(goodsDesc.getReferenceIntegral()));
 							salesmanIntegral = salesmanIntegral.add(item.getStorageInQuantity().multiply(goodsDesc.getSalesmanIntegral()));
 						}
 					}
+					integralDetail.setGoodsName(goodsName.toString());
+					integralDetail.setGoodsId(goodsIds.toString());
+					integralDetail.setCorpId(corpsDesc.getId());
+					integralDetail.setCorpName(corpsDesc.getCname());
+					integralDetail.setIntegral(pointsBalance);
 					corpsDesc.setPointsBalance(pointsBalance);
-					corps.setPointsBalance(referenceIntegral);
 					service.updateById(corpsDesc);
-					service.updateById(corps);
+					if (ObjectUtils.isNotNull(corps)) {
+						corps.setPointsBalance(referenceIntegral.add(ObjectUtils.isNotNull(corps.getPointsBalance()) ? corps.getPointsBalance() : new BigDecimal("0.00")));
+						service.updateById(corps);
+					}
+					orderItemsClient.saveIntegral(integralDetail);
 					if (ObjectUtils.isNotNull(corpsDesc.getAdminProfiles())) {
 						R<User> user = userClient.userInfoById(Long.parseLong(corpsDesc.getAdminProfiles()));
 						if (user.isSuccess() && ObjectUtils.isNotNull(user.getData())) {
@@ -371,10 +408,12 @@ public class CorpsDescClient implements ICorpsDescClient {
 							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().subtract(storeIntegral));
-						sysClient.updateByDept(res.getData());
+					if (ObjectUtils.isNotNull(storageDesc.getDeptId())) {
+						R<Dept> res = sysClient.getDept(Long.parseLong(storageDesc.getDeptId()));
+						if (res.isSuccess() && ObjectUtils.isNotNull(res.getData())) {
+							res.getData().setPointsBalance(res.getData().getPointsBalance().subtract(storeIntegral));
+							sysClient.updateByDept(res.getData());
+						}
 					}
 				}
 			}

+ 2 - 2
blade-service/blade-client/src/main/java/org/springblade/client/fees/feign/FeesDescClient.java

@@ -48,11 +48,11 @@ public class FeesDescClient implements IFeesDescClient {
 	 */
 	@Override
 	@GetMapping(FEESDE_BASIC)
-	public R<List<FeesDescVO>> selectGoodsBasic() {
+	public R<List<FeesDesc>> selectGoodsBasic() {
 		List<FeesDesc> feesDescList = feesDescService.list(Wrappers.<FeesDesc>lambdaQuery()
 			.select(FeesDesc::getId, FeesDesc::getCname, FeesDesc::getCode, FeesDesc::getUnitno));
 //		return R.data(feesDescList.stream().map(feesDescMapstructMapper::toVo).collect(Collectors.toList()));
-		return null;
+		return R.data(feesDescList);
 	}
 
 	@Override

+ 27 - 3
blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescController.java

@@ -689,7 +689,8 @@ public class GoodsDescController extends BladeController {
 							 @RequestParam(name = "belongToCorpId", required = false) String belongToCorpId,
 							 @RequestParam(name = "storageId", required = false) Long storageId,
 							 @RequestParam(name = "whetherIntegral", required = false) String whetherIntegral,
-							 @RequestParam(name = "billType", required = false) String billType
+							 @RequestParam(name = "billType", required = false) String billType,
+							 @RequestParam(name = "corpId", required = false) String corpId
 	) {
 		LambdaQueryWrapper<GoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		//指定分类为一级分类,查询此分类所有二级分类的商品
@@ -701,7 +702,15 @@ public class GoodsDescController extends BladeController {
 
 			lambdaQueryWrapper.in(GoodsDesc::getGoodsTypeId, goodsIdList);
 		}
-
+		String shoppingMall = "";
+		if (ObjectUtils.isNotNull(Long.parseLong(corpId))){
+			CorpsDesc corpsDesc = corpsDescService.getById(Long.parseLong(corpId));
+			if (ObjectUtils.isNull(corpsDesc)) {
+				throw new RuntimeException("未查到用户信息");
+			} else {
+				shoppingMall = corpsDesc.getShoppingMall();
+			}
+		}
 		if (StringUtils.isNotBlank(belongToCorpId)) {
 			LambdaQueryWrapper<CorpsDesc> gysIdListQueryWrapper = new LambdaQueryWrapper<>();
 			gysIdListQueryWrapper.select(CorpsDesc::getId)
@@ -729,6 +738,7 @@ public class GoodsDescController extends BladeController {
 		Page<GoodsDesc> page = new Page<>(current, size);
 		IPage<GoodsDesc> iPage = goodsDescService.page(page, lambdaQueryWrapper);
 		List<GoodsDesc> goodsDescList = new ArrayList<>();
+		String finalShoppingMall = shoppingMall;
 		iPage.getRecords().forEach(good -> {
 			List<GoodsFiles> filesList = goodsFilesMapper.selectList(new LambdaQueryWrapper<GoodsFiles>()
 				.eq(GoodsFiles::getPid, good.getId())
@@ -744,6 +754,21 @@ public class GoodsDescController extends BladeController {
 			} else {
 				good.setStockGoodsList(new ArrayList<>());
 			}
+			if ("零售价".equals(finalShoppingMall) || "游客".equals(finalShoppingMall)) {
+				good.setPrice(good.getStandardPrice());
+			} else if ("售价1".equals(finalShoppingMall)) {
+				good.setPrice(good.getWholesalePrice());
+			} else if ("售价2".equals(finalShoppingMall)) {
+				good.setPrice(good.getRepairDepotPrice());
+			} else if ("售价3".equals(finalShoppingMall)) {
+				good.setPrice(good.getStorePrice());
+			} else if ("售价4".equals(finalShoppingMall)) {
+				good.setPrice(good.getPrice());
+			} else if ("特价".equals(finalShoppingMall)) {
+				good.setPrice(good.getSpecialOffer());
+			} else {
+				good.setPrice(good.getSpecialOffer());
+			}
 			if (ObjectUtils.isNotNull(storageId)) {
 				R<StockGoodsVO> r = stockGoodsClient.selectStockParts(null, storageId, good.getId(), null, null, null, null, null, null);
 				if (r.isSuccess() && ObjectUtils.isNotNull(r.getData())) {
@@ -751,7 +776,6 @@ public class GoodsDescController extends BladeController {
 				}
 				goodsDescList.add(good);
 			}
-
 		});
 		if (ObjectUtils.isNotNull(storageId)) {
 			iPage.setRecords(goodsDescList);

+ 27 - 2
blade-service/blade-client/src/main/java/org/springblade/client/goods/controller/GoodsDescPartsController.java

@@ -100,8 +100,19 @@ public class GoodsDescPartsController extends BladeController {
 	@GetMapping("/partsDetails")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "")
-	public R partsDetails(@RequestParam("goodsId") Long goodsId, @RequestParam(value = "storageId", required = false) Long storageId) {
+	public R partsDetails(@RequestParam("goodsId") Long goodsId,
+						  @RequestParam(value = "storageId", required = false) Long storageId,
+						  @RequestParam(name = "corpId", required = false) String corpId) {
 		GoodsDesc goodsDesc = goodsDescService.getById(goodsId);
+		String shoppingMall = "";
+		if (ObjectUtils.isNotNull(Long.parseLong(corpId))){
+			CorpsDesc corpsDesc = corpsDescService.getById(Long.parseLong(corpId));
+			if (ObjectUtils.isNull(corpsDesc)) {
+				throw new RuntimeException("未查到用户信息");
+			} else {
+				shoppingMall = corpsDesc.getShoppingMall();
+			}
+		}
 		if (ObjectUtils.isNotNull(goodsDesc.getGoodsTypeId())) {
 			String typeId = goodsDesc.getGoodsTypeId();
 			String[] split = typeId.split(",");
@@ -144,7 +155,21 @@ public class GoodsDescPartsController extends BladeController {
 			BigDecimal actualQuantity = listR.getData().stream().map(OrderItems::getActualQuantity).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
 			goodsDescDto.setActualQuantity(actualQuantity.intValue());
 		}
-		goodsDescDto.setPrice(goodsDescDto.getStandardPrice());
+		if ("零售价".equals(shoppingMall) || "游客".equals(shoppingMall)) {
+			goodsDescDto.setPrice(goodsDesc.getStandardPrice());
+		} else if ("售价1".equals(shoppingMall)) {
+			goodsDescDto.setPrice(goodsDesc.getWholesalePrice());
+		} else if ("售价2".equals(shoppingMall)) {
+			goodsDescDto.setPrice(goodsDesc.getRepairDepotPrice());
+		} else if ("售价3".equals(shoppingMall)) {
+			goodsDescDto.setPrice(goodsDesc.getStorePrice());
+		} else if ("售价4".equals(shoppingMall)) {
+			goodsDescDto.setPrice(goodsDesc.getPrice());
+		} else if ("特价".equals(shoppingMall)) {
+			goodsDescDto.setPrice(goodsDesc.getSpecialOffer());
+		} else {
+			goodsDescDto.setPrice(goodsDesc.getStandardPrice());
+		}
 		return R.data(goodsDescDto);
 	}
 

+ 126 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/controller/IntegralDetailController.java

@@ -0,0 +1,126 @@
+/*
+ *      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.purchase.sales.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.purchase.sales.entity.IntegralDetail;
+import org.springblade.purchase.sales.vo.IntegralDetailVO;
+import org.springblade.purchase.sales.service.IIntegralDetailService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 积分明细表 控制器
+ *
+ * @author BladeX
+ * @since 2023-08-08
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/integraldetail")
+@Api(value = "积分明细表", tags = "积分明细表接口")
+public class IntegralDetailController extends BladeController {
+
+	private final IIntegralDetailService integralDetailService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入integralDetail")
+	public R<IntegralDetail> detail(IntegralDetail integralDetail) {
+		IntegralDetail detail = integralDetailService.getOne(Condition.getQueryWrapper(integralDetail));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 积分明细表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入integralDetail")
+	public R<IPage<IntegralDetail>> list(IntegralDetail integralDetail, Query query) {
+		IPage<IntegralDetail> pages = integralDetailService.page(Condition.getPage(query), Condition.getQueryWrapper(integralDetail));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 积分明细表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入integralDetail")
+	public R<IPage<IntegralDetailVO>> page(IntegralDetailVO integralDetail, Query query) {
+		IPage<IntegralDetailVO> pages = integralDetailService.selectIntegralDetailPage(Condition.getPage(query), integralDetail);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 积分明细表
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入integralDetail")
+	public R save(@Valid @RequestBody IntegralDetail integralDetail) {
+		return R.status(integralDetailService.save(integralDetail));
+	}
+
+	/**
+	 * 修改 积分明细表
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入integralDetail")
+	public R update(@Valid @RequestBody IntegralDetail integralDetail) {
+		return R.status(integralDetailService.updateById(integralDetail));
+	}
+
+	/**
+	 * 新增或修改 积分明细表
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入integralDetail")
+	public R submit(@Valid @RequestBody IntegralDetail integralDetail) {
+		return R.status(integralDetailService.saveOrUpdate(integralDetail));
+	}
+
+	
+	/**
+	 * 删除 积分明细表
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(integralDetailService.removeByIds(Func.toLongList(ids)));
+	}
+
+	
+}

+ 2 - 1
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/export/ExportOrderController.java

@@ -1319,7 +1319,8 @@ public class ExportOrderController extends BladeController {
 			.eq(Order::getTradeType, OrderTypeEnum.EXPORT.getType())
 			.isNotNull(Order::getProductionScheduling)
 			.and(i -> i.apply("storage_quantity > purchase_quantity").or()
-				.apply("storage_quantity_pj > purchase_quantity_pj"));//销售数量大于采购数量
+				.apply("storage_quantity_pj > purchase_quantity_pj"))
+		.orderByDesc(Order::getCreateTime);//销售数量大于采购数量
 		List<Order> orderList = orderService.list(lambdaQueryWrapper);
 		return R.data(orderList);
 	}

+ 8 - 5
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/feign/OrderItemsClient.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tenant.annotation.NonDS;
@@ -14,8 +13,10 @@ import org.springblade.core.tenant.annotation.TenantIgnore;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.deliver.goods.enums.DeliveryEnum;
+import org.springblade.purchase.sales.entity.IntegralDetail;
 import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.mapper.OrderPartsMapper;
+import org.springblade.purchase.sales.service.IIntegralDetailService;
 import org.springblade.purchase.sales.service.IOrderItemsService;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -39,10 +40,7 @@ public class OrderItemsClient implements IOrderItemsClient {
 	 */
 	private IOrderItemsService orderItemsService;
 
-	/**
-	 * 获取客户信息
-	 */
-	private final ICorpsDescClient corpsDescClient;
+	private final IIntegralDetailService integralDetailService;
 
 	private final OrderPartsMapper orderPartsMapper;
 
@@ -213,4 +211,9 @@ public class OrderItemsClient implements IOrderItemsClient {
 		lambdaQueryWrapper.eq(OrderItems::getPid, orderId);
 		return R.data(orderItemsService.list(lambdaQueryWrapper));
 	}
+
+	@Override
+	public R saveIntegral(IntegralDetail integralDetail) {
+		return R.data(integralDetailService.saveOrUpdate(integralDetail));
+	}
 }

+ 42 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/IntegralDetailMapper.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.purchase.sales.mapper;
+
+import org.springblade.purchase.sales.entity.IntegralDetail;
+import org.springblade.purchase.sales.vo.IntegralDetailVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 积分明细表 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2023-08-08
+ */
+public interface IntegralDetailMapper extends BaseMapper<IntegralDetail> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param integralDetail
+	 * @return
+	 */
+	List<IntegralDetailVO> selectIntegralDetailPage(IPage page, IntegralDetailVO integralDetail);
+
+}

+ 26 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/mapper/IntegralDetailMapper.xml

@@ -0,0 +1,26 @@
+<?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.purchase.sales.mapper.IntegralDetailMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="integralDetailResultMap" type="org.springblade.purchase.sales.entity.IntegralDetail">
+        <id column="id" property="id"/>
+        <result column="src_id" property="srcId"/>
+        <result column="create_time" property="createTime"/>
+        <result column="integral" property="integral"/>
+        <result column="corp_id" property="corpId"/>
+        <result column="remarks" property="remarks"/>
+        <result column="create_user" property="createUser"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="corp_name" property="corpName"/>
+        <result column="type" property="type"/>
+        <result column="src_no" property="srcNo"/>
+    </resultMap>
+
+
+    <select id="selectIntegralDetailPage" resultMap="integralDetailResultMap">
+        select * from business_integral_detail where is_deleted = 0
+    </select>
+
+</mapper>

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

@@ -3764,6 +3764,8 @@ ORDER BY
         </if>
         GROUP BY
             ps.sys_no
+        ORDER BY
+            ps.busines_date desc
     </select>
     <select id="integralRecord" resultType="java.util.Map">
         SELECT

+ 44 - 37
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/partsapp/AppPartsController.java

@@ -30,10 +30,12 @@ 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.IntegralDetail;
 import org.springblade.purchase.sales.entity.Order;
 import org.springblade.purchase.sales.entity.OrderItems;
 import org.springblade.purchase.sales.excel.AnalysisDetailsExcel;
 import org.springblade.purchase.sales.excel.PjStockDetails;
+import org.springblade.purchase.sales.service.IIntegralDetailService;
 import org.springblade.purchase.sales.service.IOrderItemsService;
 import org.springblade.purchase.sales.service.IOrderService;
 import org.springblade.purchase.sales.vo.OrderVO;
@@ -71,6 +73,7 @@ public class AppPartsController extends BladeController {
 	private final IStorageClient iStorageClient;//库区信息
 	private final IFinanceClient financeClient;
 	private final ISysClient sysClient;
+	private final IIntegralDetailService integralDetailService;
 	/**
 	 * 库区信息
 	 */
@@ -81,8 +84,8 @@ public class AppPartsController extends BladeController {
 	 */
 	@GetMapping("/revenueExpenditure")
 	@ApiOperation(value = "营业收入和采购支出", notes = "传入order")
-	public R revenueExpenditure(@RequestParam(value = "tenantId" ,required = false) String tenantId, HttpServletRequest request) {
-		if (ObjectUtils.isNull(request.getHeader("Blade-Auth"))){
+	public R revenueExpenditure(@RequestParam(value = "tenantId", required = false) String tenantId, HttpServletRequest request) {
+		if (ObjectUtils.isNull(request.getHeader("Blade-Auth"))) {
 			// 获取租户信息
 			R<Tenant> tenant = sysClient.getTenantByAppId(request.getHeader("appId"));
 			if (tenant.isSuccess() && ObjectUtils.isNotNull(tenant.getData())) {
@@ -176,7 +179,7 @@ public class AppPartsController extends BladeController {
 				lambdaQueryWrapper.orderByAsc(Order::getBusinesDate);
 			} else if ("5".equals(order.getTypeSort())) {
 				lambdaQueryWrapper.orderByAsc(Order::getConfirmStatus);
-			}else {
+			} else {
 				lambdaQueryWrapper.orderByDesc(Order::getBusinesDate);
 			}
 		} else if ("1".equals(order.getSort())) {
@@ -190,7 +193,7 @@ public class AppPartsController extends BladeController {
 				lambdaQueryWrapper.orderByDesc(Order::getBusinesDate);
 			} else if ("5".equals(order.getTypeSort())) {
 				lambdaQueryWrapper.orderByDesc(Order::getConfirmStatus);
-			}else {
+			} else {
 				lambdaQueryWrapper.orderByDesc(Order::getBusinesDate);
 			}
 		} else {
@@ -345,16 +348,16 @@ public class AppPartsController extends BladeController {
 		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(Order::getTenantId, SecureUtil.getTenantId());//租户id
 		lambdaQueryWrapper.eq(Order::getIsDeleted, 0);//订单是否有效
-		if (ObjectUtils.isNotNull(order.getType()) && "1".equals(order.getType())){
+		if (ObjectUtils.isNotNull(order.getType()) && "1".equals(order.getType())) {
 			CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
 			if (ObjectUtils.isNotNull(corpsAttn)) {
 				CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
 				if (ObjectUtils.isNotNull(corpsDesc)) {
-					lambdaQueryWrapper.eq( Order::getCorpId, corpsDesc.getId());//客户id
+					lambdaQueryWrapper.eq(Order::getCorpId, corpsDesc.getId());//客户id
 					order.setCorpId(corpsDesc.getId());
 				}
 			}
-		}else{
+		} else {
 			lambdaQueryWrapper.like(Func.isNotEmpty(order.getCorpId()), Order::getCorpId, order.getCorpId());//客户id
 			lambdaQueryWrapper.eq(ObjectUtils.isNotNull(order.getSalesName()), Order::getSalesName, order.getSalesName());//业务员
 			if (AuthUtil.getUserRole().contains("销售") || AuthUtil.getUserRole().contains("业务员")) {
@@ -656,7 +659,8 @@ public class AppPartsController extends BladeController {
 	@RepeatSubmit
 	public R quickBillingWX(@Valid @RequestBody Order order) {
 		order.setTradeType(OrderTypeEnum.PARTS.getType());
-		return orderService.quickBillingWX(order);}
+		return orderService.quickBillingWX(order);
+	}
 
 	/**
 	 * 新增或修改 经销商销售或采购订单表(微信小程序)
@@ -667,7 +671,8 @@ public class AppPartsController extends BladeController {
 	@RepeatSubmit
 	public R quickBillingWXv2(@Valid @RequestBody Order order) {
 		order.setTradeType(OrderTypeEnum.PARTS.getType());
-		return orderService.quickBillingWXv2(order);}
+		return orderService.quickBillingWXv2(order);
+	}
 
 	/**
 	 * 新增或修改 经销商销售或采购订单表(微信小程序积分兑换)
@@ -678,7 +683,8 @@ public class AppPartsController extends BladeController {
 	@RepeatSubmit
 	public R quickBillingWXIntegral(@Valid @RequestBody Order order) {
 		order.setTradeType(OrderTypeEnum.PARTS.getType());
-		return orderService.quickBillingWXIntegral(order);}
+		return orderService.quickBillingWXIntegral(order);
+	}
 
 	/**
 	 * 收付款(单)
@@ -720,20 +726,19 @@ public class AppPartsController extends BladeController {
 	 * 积分兑换记录
 	 */
 	@GetMapping("/integralExchangeRecord")
-	public R<IPage<Map<String,Object>>> integralExchangeRecord(HttpServletRequest request, Query query,@RequestParam(value = "corpId",required = false) Long corpId) {
-		Order order = new Order();
-		order.setTradeType(OrderTypeEnum.PARTS.getType());
-		if (corpId == null){
+	public R<IPage<IntegralDetail>> integralExchangeRecord(HttpServletRequest request, Query query, @RequestParam(value = "corpId", required = false) Long corpId) {
+		LambdaQueryWrapper<IntegralDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		if (corpId == null) {
 			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());
+					lambdaQueryWrapper.eq(IntegralDetail::getTenantId, tenant.getData().getTenantId());
 				} else {
 					throw new RuntimeException("获取数据失败");
 				}
 			} else {
-				order.setTenantId(AuthUtil.getTenantId());
+				lambdaQueryWrapper.eq(IntegralDetail::getTenantId, AuthUtil.getTenantId());
 			}
 			if (AuthUtil.getUserRole().equals("客户")) {
 				CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
@@ -748,32 +753,32 @@ public class AppPartsController extends BladeController {
 					}
 				}
 			}
-		}else{
-			order.setTenantId(AuthUtil.getTenantId());
+		} else {
+			lambdaQueryWrapper.eq(IntegralDetail::getTenantId, AuthUtil.getTenantId());
 		}
-		order.setCorpId(corpId);
-		order.setWhetherIntegral("1");
-		return R.data(orderService.integralRecord(Condition.getPage(query),order));
+		lambdaQueryWrapper.eq(IntegralDetail::getCorpId, corpId)
+			.eq(IntegralDetail::getType, "积分兑换")
+		.ne(IntegralDetail::getIntegral,0);
+		return R.data(integralDetailService.page(Condition.getPage(query), lambdaQueryWrapper));
 	}
 
 	/**
 	 * 积分获取记录
 	 */
 	@GetMapping("/integralRecord")
-	public R<IPage<Map<String,Object>>> integralRecord(HttpServletRequest request, Query query,@RequestParam(value = "corpId",required = false) Long corpId) {
-		Order order = new Order();
-		order.setTradeType(OrderTypeEnum.PARTS.getType());
-		if (corpId == null){
+	public R<IPage<IntegralDetail>> integralRecord(HttpServletRequest request, Query query, @RequestParam(value = "corpId", required = false) Long corpId) {
+		LambdaQueryWrapper<IntegralDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		if (corpId == null) {
 			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());
+					lambdaQueryWrapper.eq(IntegralDetail::getTenantId, tenant.getData().getTenantId());
 				} else {
 					throw new RuntimeException("获取数据失败");
 				}
 			} else {
-				order.setTenantId(AuthUtil.getTenantId());
+				lambdaQueryWrapper.eq(IntegralDetail::getTenantId, AuthUtil.getTenantId());
 			}
 			if (AuthUtil.getUserRole().equals("客户")) {
 				CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
@@ -788,12 +793,13 @@ public class AppPartsController extends BladeController {
 					}
 				}
 			}
-		}else{
-			order.setTenantId(AuthUtil.getTenantId());
+		} else {
+			lambdaQueryWrapper.eq(IntegralDetail::getTenantId, AuthUtil.getTenantId());
 		}
-		order.setCorpId(corpId);
-		order.setWhetherIntegral("0");
-		return R.data(orderService.integralRecord(Condition.getPage(query),order));
+		lambdaQueryWrapper.eq(IntegralDetail::getCorpId, corpId)
+			.apply("find_in_set(type,'购买获取,退款退货')")
+			.ne(IntegralDetail::getIntegral,0);
+		return R.data(integralDetailService.page(Condition.getPage(query), lambdaQueryWrapper));
 	}
 
 	/**
@@ -802,11 +808,12 @@ public class AppPartsController extends BladeController {
 	@GetMapping("/consumptionRecords")
 	public R<IPage<Order>> consumptionRecords(Order order, Query query) {
 		LambdaQueryWrapper<Order> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-		lambdaQueryWrapper.eq(Order::getTenantId,AuthUtil.getTenantId())
-			.eq(Order::getIsDeleted,0)
-			.eq(Order::getTradeType,OrderTypeEnum.PARTS.getType())
-			.eq(Order::getWhetherIntegral,"0")
-			.eq(Order::getCorpId,order.getCorpId());
+		lambdaQueryWrapper.eq(Order::getTenantId, AuthUtil.getTenantId())
+			.eq(Order::getIsDeleted, 0)
+			.eq(Order::getTradeType, OrderTypeEnum.PARTS.getType())
+			.eq(Order::getWhetherIntegral, "0")
+			.ne(Order::getMemberBalance,0)
+			.eq(Order::getCorpId, order.getCorpId());
 		return R.data(orderService.page(Condition.getPage(query), lambdaQueryWrapper));
 	}
 

+ 41 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/IIntegralDetailService.java

@@ -0,0 +1,41 @@
+/*
+ *      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.purchase.sales.service;
+
+import org.springblade.purchase.sales.entity.IntegralDetail;
+import org.springblade.purchase.sales.vo.IntegralDetailVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 积分明细表 服务类
+ *
+ * @author BladeX
+ * @since 2023-08-08
+ */
+public interface IIntegralDetailService extends IService<IntegralDetail> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param integralDetail
+	 * @return
+	 */
+	IPage<IntegralDetailVO> selectIntegralDetailPage(IPage<IntegralDetailVO> page, IntegralDetailVO integralDetail);
+
+}

+ 41 - 0
blade-service/blade-purchase-sales/src/main/java/org/springblade/purchase/sales/service/impl/IntegralDetailServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      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.purchase.sales.service.impl;
+
+import org.springblade.purchase.sales.entity.IntegralDetail;
+import org.springblade.purchase.sales.vo.IntegralDetailVO;
+import org.springblade.purchase.sales.mapper.IntegralDetailMapper;
+import org.springblade.purchase.sales.service.IIntegralDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 积分明细表 服务实现类
+ *
+ * @author BladeX
+ * @since 2023-08-08
+ */
+@Service
+public class IntegralDetailServiceImpl extends ServiceImpl<IntegralDetailMapper, IntegralDetail> implements IIntegralDetailService {
+
+	@Override
+	public IPage<IntegralDetailVO> selectIntegralDetailPage(IPage<IntegralDetailVO> page, IntegralDetailVO integralDetail) {
+		return page.setRecords(baseMapper.selectIntegralDetailPage(page, integralDetail));
+	}
+
+}

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

@@ -67,6 +67,7 @@ import org.springblade.purchase.sales.mapper.OrderCostItemMapper;
 import org.springblade.purchase.sales.mapper.OrderCostMapper;
 import org.springblade.purchase.sales.mapper.OrderItemsMapper;
 import org.springblade.purchase.sales.mapper.OrderMapper;
+import org.springblade.purchase.sales.service.IIntegralDetailService;
 import org.springblade.purchase.sales.service.IOrderFilesService;
 import org.springblade.purchase.sales.service.IOrderPartsService;
 import org.springblade.purchase.sales.service.IOrderService;
@@ -182,6 +183,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 
 	private final IPriceBankClient priceBankClient;
 
+	private IIntegralDetailService integralDetailService;
+
 
 	@Override
 	public IPage<OrderVO> selectOrderPage(IPage<OrderVO> page, OrderVO order) {
@@ -6435,6 +6438,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
 	public R quickBillingWXIntegral(Order order) {
 		// 校验单号重复-新增
 		if (order.getId() == null && StringUtils.isNotBlank(order.getOrderNo())) {
@@ -6528,6 +6533,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		baseMapper.insert(order);
 		List<GoodsDesc> goodsDescList = goodsDescClient.selectGoodsDescAll();
 		// 保存订单明细
+		StringBuilder goodsName = new StringBuilder();
+		StringBuilder goodsIds = new StringBuilder();
 		if (CollectionUtils.isNotEmpty(order.getOrderItemsList())) {
 			List<StockGoodsVO> list = new ArrayList<>();
 			BigDecimal orderAmount = new BigDecimal("0.00");
@@ -6535,9 +6542,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				//获取本商品库存
 				BigDecimal surplusRouteQuantity = new BigDecimal("0.00");
 				BigDecimal balanceQuantity = new BigDecimal("0.00");
+				BigDecimal balanceAmount = 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()));
+					goodsName.append(goodsDesc.getCname()).append(",");
+					goodsIds.append(goodsDesc.getId()).append(",");
 				}
 
 				R<StockGoodsVO> r = stockGoodsClient.selectStockParts(null, orderItems.getStorageId(), orderItems.getItemId(), null, null, null, null, null, null);
@@ -6547,8 +6557,10 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 					}
 					surplusRouteQuantity = surplusRouteQuantity.add(r.getData().getSurplusRouteQuantity().subtract(orderItems.getStorageInQuantity()));
 					balanceQuantity = balanceQuantity.add(surplusRouteQuantity);
+					balanceAmount = balanceAmount.add(r.getData().getBalanceAmount().subtract(orderItems.getAmount()));
 					r.getData().setSurplusRouteQuantity(surplusRouteQuantity);
 					r.getData().setBalanceQuantity(balanceQuantity);
+					r.getData().setBalanceAmount(balanceAmount);
 					r.getData().setTenantId(order.getTenantId());
 					list.add(r.getData());
 				} else {
@@ -6576,6 +6588,19 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 		order.setBalanceAmount(order.getDebitAmount());
 		order.setPurchaseAmount(order.getDebitAmount());
 		baseMapper.updateById(order);
+		IntegralDetail integralDetail = new IntegralDetail();
+		integralDetail.setCreateTime(new Date());
+		integralDetail.setCreateUserName(AuthUtil.getUserName());
+		integralDetail.setCreateUser(AuthUtil.getUserId());
+		integralDetail.setType("积分兑换");
+		integralDetail.setSrcId(order.getId());
+		integralDetail.setSrcNo(order.getSysNo());
+		integralDetail.setCorpId(corpsDesc.getId());
+		integralDetail.setCorpName(corpsDesc.getCname());
+		integralDetail.setIntegral(order.getOrderAmount());
+		integralDetail.setGoodsName(goodsName.toString());
+		integralDetail.setGoodsId(goodsIds.toString());
+		integralDetailService.saveOrUpdate(integralDetail);
 		return R.data(order);
 	}
 
@@ -6962,7 +6987,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
 				if (ObjectUtils.isNotNull(corpsDesc.getCorpsAddrList()) && corpsDesc.getCorpsAddrList().size() > 0) {
 					order.setArrivalAddress(corpsDesc.getCorpsAddrList().get(0).getDetailedAddress());
 					order.setTel(corpsDesc.getTel());
-					if (ObjectUtils.isNull(order.getCorpTel())){
+					if (ObjectUtils.isNull(order.getCorpTel())) {
 						order.setCorpTel(corpsDesc.getTel());
 					}
 				}

+ 33 - 15
blade-service/blade-stock/src/main/java/org/springblade/stock/controller/StockGoodsController.java

@@ -474,21 +474,30 @@ public class StockGoodsController extends BladeController {
 		}
 		String shoppingMall = "";
 		Long corpId = null;
-		if (AuthUtil.getUserRole().equals("客户")) {
-			CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
-			if (ObjectUtils.isNull(corpsAttn)) {
+		if (ObjectUtils.isNotNull(appStockPartsVO.getCorpId())) {
+			CorpsDesc corpsDesc = corpsDescClient.getCorpId(appStockPartsVO.getCorpId());
+			if (ObjectUtils.isNull(corpsDesc)) {
 				throw new RuntimeException("未查到用户信息");
 			} else {
-				CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
-				if (ObjectUtils.isNull(corpsDesc)) {
+				shoppingMall = corpsDesc.getShoppingMall();
+			}
+		} else {
+			if (AuthUtil.getUserRole().equals("客户")) {
+				CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
+				if (ObjectUtils.isNull(corpsAttn)) {
 					throw new RuntimeException("未查到用户信息");
 				} else {
-					shoppingMall = corpsDesc.getShoppingMall();
-					corpId = corpsDesc.getId();
+					CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
+					if (ObjectUtils.isNull(corpsDesc)) {
+						throw new RuntimeException("未查到用户信息");
+					} else {
+						shoppingMall = corpsDesc.getShoppingMall();
+						corpId = corpsDesc.getId();
+					}
 				}
+			} else {
+				shoppingMall = "游客";
 			}
-		} else {
-			shoppingMall = "游客";
 		}
 		appStockPartsVO.setUserType(shoppingMall);
 		String finalShoppingMall = shoppingMall;
@@ -610,16 +619,25 @@ public class StockGoodsController extends BladeController {
 		AppStockPartsVO appStockPartsVO1 = stockGoodsService.stockPartsDetails(appStockPartsVO);
 		if (ObjectUtils.isNotNull(appStockPartsVO1)) {
 			String shoppingMall = "";
-			if (AuthUtil.getUserRole().equals("客户")) {
-				CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
-				if (ObjectUtils.isNull(corpsAttn)) {
+			if (ObjectUtils.isNotNull(appStockPartsVO.getCorpId())) {
+				CorpsDesc corpsDesc = corpsDescClient.getCorpId(appStockPartsVO.getCorpId());
+				if (ObjectUtils.isNull(corpsDesc)) {
 					throw new RuntimeException("未查到用户信息");
 				} else {
-					CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
-					if (ObjectUtils.isNull(corpsDesc)) {
+					shoppingMall = corpsDesc.getShoppingMall();
+				}
+			} else {
+				if (AuthUtil.getUserRole().equals("客户")) {
+					CorpsAttn corpsAttn = corpsAttnClient.getUser(AuthUtil.getUserId());
+					if (ObjectUtils.isNull(corpsAttn)) {
 						throw new RuntimeException("未查到用户信息");
 					} else {
-						shoppingMall = corpsDesc.getShoppingMall();
+						CorpsDesc corpsDesc = corpsDescClient.getCorpId(corpsAttn.getPid());
+						if (ObjectUtils.isNull(corpsDesc)) {
+							throw new RuntimeException("未查到用户信息");
+						} else {
+							shoppingMall = corpsDesc.getShoppingMall();
+						}
 					}
 				}
 			}

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

@@ -113,6 +113,9 @@ public class UserController {
 		if (AuthUtil.getTenantId().equals("234557") && StringUtil.isBlank(userVO.getRoleAlias())){
 			userVO.setRoleAlias("业务员");
 		}
+		if (AuthUtil.getTenantId().equals("119111") && StringUtil.isBlank(userVO.getRoleAlias())){
+			userVO.setRoleAlias("业务员");
+		}
 		LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.like(StringUtils.isNotBlank(userVO.getRealName()), User::getRealName, userVO.getRealName())
 			.like(ObjectUtil.isNotEmpty(userVO.getDeptPid()), User::getDeptPid, userVO.getDeptPid())
@@ -134,6 +137,8 @@ public class UserController {
 			List<Long> userIdList = userService.getUserIdByCorpId(Long.parseLong(userVO.getUserExt()));
 			if (CollectionUtil.isNotEmpty(userIdList)) {
 				lambdaQueryWrapper.in(User::getId, userIdList);
+			}else{
+				return R.data(new ArrayList<>());
 			}
 		}
 

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

@@ -3042,6 +3042,7 @@ public class SettlementServiceImpl extends ServiceImpl<SettlementMapper, Settlem
 						order.setId(acc.getSrcParentId());
 						order.setCorpId(acc.getCorpId());
 						order.setStorageId(dto.getStorageId());
+						order.setSysNo(dto.getSrcBillNo());
 						corpsDescClient.updateIntegral(order);
 					}
 				}