Jelajahi Sumber

2024年3月22日17:53:08

纪新园 1 tahun lalu
induk
melakukan
b0c52ddde1
37 mengubah file dengan 1345 tambahan dan 168 penghapusan
  1. 12 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjCorpsDesc.java
  2. 0 6
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjGoodsDesc.java
  3. 58 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/excel/ShipItemImportCodeExcel.java
  4. 34 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/record/dto/LimitRecordDTO.java
  5. 120 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/record/entity/LimitRecord.java
  6. 36 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/record/vo/LimitRecordVO.java
  7. 15 3
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  8. 75 31
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/fegin/PJCorprClient.java
  9. 7 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.java
  10. 18 1
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.xml
  11. 4 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/mapper/GoodsDescMapper.java
  12. 8 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/mapper/GoodsDescMapper.xml
  13. 161 114
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/service/impl/GoodsDescServiceImpl.java
  14. 4 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderItemsMapper.java
  15. 5 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderItemsMapper.xml
  16. 2 3
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/service/impl/OrderServiceImpl.java
  17. 126 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/controller/LimitRecordController.java
  18. 42 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/mapper/LimitRecordMapper.java
  19. 29 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/mapper/LimitRecordMapper.xml
  20. 43 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/service/ILimitRecordService.java
  21. 68 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/service/impl/LimitRecordServiceImpl.java
  22. 28 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/controller/ShipController.java
  23. 3 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/IShipService.java
  24. 72 10
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/ship/service/impl/ShipServiceImpl.java
  25. 10 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/controller/ShoppingCartController.java
  26. 2 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/IShoppingCartService.java
  27. 254 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java
  28. 20 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/controller/StockDescController.java
  29. 1 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.java
  30. 36 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.xml
  31. 1 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/service/IStockDescService.java
  32. 5 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/service/impl/StockDescServiceImpl.java
  33. 10 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  34. 7 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java
  35. 13 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
  36. 4 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java
  37. 12 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

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

@@ -284,4 +284,16 @@ public class PjCorpsDesc implements Serializable {
 	@ApiModelProperty(value = "积分余额")
 	private BigDecimal pointsBalance;
 
+	/**
+	 * 是否使用额度(0否1是)
+	 */
+	@ApiModelProperty(value = "是否使用额度")
+	private String ifLimitAmount;
+
+	/**
+	 * 额度
+	 */
+	@ApiModelProperty(value = "额度")
+	private BigDecimal limitAmount;
+
 }

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

@@ -291,10 +291,4 @@ public class PjGoodsDesc implements Serializable {
 	@ApiModelProperty(value = "尺寸")
 	private String goodsSize;
 
-	/**
-	 * 额度
-	 */
-	@ApiModelProperty(value = "额度")
-	private BigDecimal limit;
-
 }

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

@@ -0,0 +1,58 @@
+package org.springblade.salesPart.excel;
+
+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;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 入库明细导入模板实体类
+ */
+@Data
+@ColumnWidth(25)
+@HeadRowHeight(20)
+@ContentRowHeight(18)
+public class ShipItemImportCodeExcel implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 商品名称
+	 */
+	@ExcelProperty(value = "商品名称")
+	private String goodsName;
+
+	/**
+	 * 商品编码
+	 */
+	@ExcelProperty(value = "商品编码(必填)")
+	private String code;
+
+	/**
+	 * 数量
+	 */
+	@ExcelProperty(value = "数量(必填)")
+	private BigDecimal goodsNum;
+
+	/**
+	 * 单价
+	 */
+	@ExcelProperty(value = "单价(必填)")
+	private BigDecimal price;
+
+	/**
+	 * 批次号
+	 */
+	@ExcelProperty(value = "批次号")
+	private String dot;
+
+	/**
+	 * 备注
+	 */
+	@ExcelProperty(value = "备注")
+	private String remarks;
+}

+ 34 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/record/dto/LimitRecordDTO.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.salesPart.record.dto;
+
+import org.springblade.salesPart.record.entity.LimitRecord;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 额度管理记录数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2024-03-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class LimitRecordDTO extends LimitRecord {
+	private static final long serialVersionUID = 1L;
+
+}

+ 120 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/record/entity/LimitRecord.java

@@ -0,0 +1,120 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.salesPart.record.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.secure.utils.AuthUtil;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 额度管理记录实体类
+ *
+ * @author BladeX
+ * @since 2024-03-22
+ */
+@Data
+@TableName("pjpf_limit_record")
+@ApiModel(value = "LimitRecord对象", description = "额度管理记录")
+public class LimitRecord implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	private Long id;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private Long createUser;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private Long createDept;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private Long updateUser;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 租户id
+	 */
+	@ApiModelProperty(value = "租户id")
+	private String tenantId = AuthUtil.getTenantId();
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+	/**
+	 * 活动状态(0录入 1已发布 2已失效)
+	 */
+	@ApiModelProperty(value = "活动状态(0录入 1已发布 2已失效)")
+	private String status;
+	/**
+	 * 所属公司id
+	 */
+	@ApiModelProperty(value = "所属公司id")
+	private Long salesCompanyId;
+	/**
+	 * 所属公司名称
+	 */
+	@ApiModelProperty(value = "所属公司名称")
+	private String salesCompanyName;
+	/**
+	 * 原额度
+	 */
+	@ApiModelProperty(value = "原额度")
+	private BigDecimal amountOld;
+	/**
+	 * 本次修改额度
+	 */
+	@ApiModelProperty(value = "本次修改额度")
+	private BigDecimal amountUpdate;
+	/**
+	 * 修改后额度
+	 */
+	@ApiModelProperty(value = "修改后额度")
+	private BigDecimal amountNew;
+	/**
+	 * 客户id
+	 */
+	@ApiModelProperty(value = "客户id")
+	private Long pid;
+
+
+}

+ 36 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/record/vo/LimitRecordVO.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.salesPart.record.vo;
+
+import org.springblade.salesPart.record.entity.LimitRecord;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 额度管理记录视图实体类
+ *
+ * @author BladeX
+ * @since 2024-03-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "LimitRecordVO对象", description = "额度管理记录")
+public class LimitRecordVO extends LimitRecord {
+	private static final long serialVersionUID = 1L;
+
+}

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

@@ -71,8 +71,12 @@ public interface IUserClient {
 	String WEB_USER_BY_XCX_USER_PHONE = API_PREFIX + "/getWebUserByXcxUserPhone";
 	String UPDATE_USER_BATCH_BY_ID = API_PREFIX + "/updateUserBatchById";
 
+	String SELECT_LIST_NOT_TENANT_ID = API_PREFIX + "/selectListNotTenantId";
+
+	String UPDATE_BY_ID_POINTS_BALANCE = API_PREFIX + "/updateByIdPointsBalance";
+
 	@GetMapping(LIST_USER_BY_ROLE_ID)
-	R<List<User>> listUserByRoleId(@RequestParam("roleId") Long roleId,@RequestParam(value = "tenantId",required = false) String tenantId,@RequestParam(value = "salesCompanyId",required = false) Long salesCompanyId);
+	R<List<User>> listUserByRoleId(@RequestParam("roleId") Long roleId, @RequestParam(value = "tenantId", required = false) String tenantId, @RequestParam(value = "salesCompanyId", required = false) Long salesCompanyId);
 
 	/**
 	 * 获取用户信息
@@ -187,6 +191,7 @@ public interface IUserClient {
 	 */
 	@GetMapping(USER_INFO_BY_TYPE)
 	R<UserInfo> userInfo(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account, @RequestParam("userType") String userType);
+
 	/**
 	 * 获取用户信息
 	 *
@@ -197,7 +202,7 @@ public interface IUserClient {
 	 */
 	@GetMapping(USER_INFO_BY_APPID)
 	R<UserInfo> userInfoByAppId(@RequestParam("tenantId") String tenantId, @RequestParam("account") String account, @RequestParam("userType") String userType
-	,@RequestParam("appId") String appId);
+		, @RequestParam("appId") String appId);
 
 	/**
 	 * 获取第三方平台信息
@@ -245,7 +250,7 @@ public interface IUserClient {
 	 * 根据租户id获取用户信息
 	 */
 	@GetMapping(GAIN_USER)
-	R<List<Map<String, Object>>> gainUser(@RequestParam(value = "roleName",required = false) String roleName);
+	R<List<Map<String, Object>>> gainUser(@RequestParam(value = "roleName", required = false) String roleName);
 
 	/**
 	 * 获取用户
@@ -292,4 +297,11 @@ public interface IUserClient {
 
 	@PostMapping(UPDATE_USER_BATCH_BY_ID)
 	void updateUserBatchById(@RequestBody List<User> users);
+
+	@GetMapping(SELECT_LIST_NOT_TENANT_ID)
+	List<User> selectListNotTenantId(@RequestParam(value = "tenantId", required = false) String tenantId,
+									 @RequestParam(value = "ids", required = false) String ids);
+
+	@PostMapping(UPDATE_BY_ID_POINTS_BALANCE)
+	void updateByIdPointsBalance(@RequestBody List<User> users);
 }

+ 75 - 31
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/fegin/PJCorprClient.java

@@ -6,15 +6,16 @@ import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
 import org.springblade.core.secure.utils.AuthUtil;
 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.feign.IIntegralDetailClient;
+import org.springblade.salesPart.corps.mapper.CorpsDescMapper;
 import org.springblade.salesPart.corps.service.ICorpsAttnService;
-import org.springblade.salesPart.corps.service.ICorpsDescService;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.feign.IPJCorpClient;
-import org.springblade.salesPart.goods.service.IGoodsDescService;
-import org.springblade.salesPart.order.service.IOrderItemsService;
+import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
+import org.springblade.salesPart.order.mapper.OrderItemsMapper;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springframework.transaction.annotation.Transactional;
@@ -33,15 +34,15 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class PJCorprClient implements IPJCorpClient {
 
-	private final ICorpsDescService corpsDescService;
+	private final CorpsDescMapper corpsDescMapper;
 
 	private final ICorpsAttnService corpsAttnService;
 
 	private final IUserClient userClient;
 
-	private final IOrderItemsService orderItemsService;
+	private final OrderItemsMapper orderItemsMapper;
 
-	private final IGoodsDescService goodsDescService;
+	private final GoodsDescMapper goodsDescMapper;
 
 	private final IIntegralDetailClient iIntegralDetailClient;
 
@@ -49,14 +50,14 @@ public class PJCorprClient implements IPJCorpClient {
 	@Override
 	public PjCorpsDesc getByCorp(Long id) {
 		if (id != null) {
-			return corpsDescService.getById(id);
+			return corpsDescMapper.selectById(id);
 		} else {
 			PjCorpsAttn corpsAttn = corpsAttnService.getOne(new LambdaQueryWrapper<PjCorpsAttn>()
 				.eq(PjCorpsAttn::getUserId, AuthUtil.getUserId())
 				.eq(PjCorpsAttn::getTenantId, AuthUtil.getTenantId())
 				.eq(PjCorpsAttn::getIsDeleted, 0));
 			if (ObjectUtils.isNotNull(corpsAttn)) {
-				return corpsDescService.getById(corpsAttn.getPid());
+				return corpsDescMapper.selectById(corpsAttn.getPid());
 			} else {
 				return null;
 			}
@@ -66,29 +67,43 @@ public class PJCorprClient implements IPJCorpClient {
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	@TenantIgnore
 	public R updateIntegral(List<PjOrder> orderList) {
-		List<Long> goodsIds = new ArrayList<>();
-		List<PjCorpsDesc> corpsDescs = new ArrayList<>();
 		List<User> users = new ArrayList<>();
 		List<IntegralDetail> integralDetailList = new ArrayList<>();
+		System.out.println("=========积分修改开始==========");
 		if (!orderList.isEmpty()) {
+			System.out.println("=========订单数据==========" + orderList);
+			String tenantId = orderList.get(0).getTenantId();
 			List<PjCorpsDesc> pjCorpsDescList = new ArrayList<>();
 			List<PjCorpsDesc> referenceList = new ArrayList<>();
 			List<User> userList = new ArrayList<>();
 			List<PjGoodsDesc> pjGoodsDescList = new ArrayList<>();
 			List<Long> orderId = orderList.stream().map(PjOrder::getId).filter(Objects::nonNull).collect(Collectors.toList());
-			List<PjOrderItems> orderItemsList = orderItemsService.list(new LambdaQueryWrapper<PjOrderItems>()
+			StringBuilder orderIds = new StringBuilder();
+			for (Long item : orderId) {
+				orderIds.append(item).append(",");
+			}
+			List<PjOrderItems> orderItemsList = orderItemsMapper.selectListNotTenantId(tenantId, orderIds.substring(0, orderIds.length() - 1));
+			/*List<PjOrderItems> orderItemsList = orderItemsMapper.selectList(new LambdaQueryWrapper<PjOrderItems>()
 				.in(PjOrderItems::getPid, orderId)
 				.eq(PjOrderItems::getIsDeleted, 0)
-				.eq(PjOrderItems::getTenantId, AuthUtil.getTenantId()));
+				.eq(PjOrderItems::getTenantId, tenantId));*/
+			System.out.println("=========订单明细数据==========" + orderItemsList);
 			if (!orderItemsList.isEmpty()) {
 				List<Long> goodsId = orderItemsList.stream().map(PjOrderItems::getGoodsId).filter(Objects::nonNull).collect(Collectors.toList());
 				if (!goodsId.isEmpty()) {
-					pjGoodsDescList = goodsDescService.list(new LambdaQueryWrapper<PjGoodsDesc>()
-						.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+					StringBuilder goodsIds = new StringBuilder();
+					for (Long item : goodsId) {
+						goodsIds.append(item).append(",");
+					}
+					pjGoodsDescList = goodsDescMapper.selectListNotTenantId(tenantId, goodsIds.substring(0, goodsIds.length() - 1));
+					/*pjGoodsDescList = goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+						.eq(PjGoodsDesc::getTenantId, tenantId)
 						.eq(PjGoodsDesc::getIsDeleted, 0)
 						.eq(PjGoodsDesc::getEnableOrNot, 0)
-						.in(PjGoodsDesc::getId, goodsIds));
+						.in(PjGoodsDesc::getId, goodsIds.toString()));*/
+					System.out.println("=========订单明细商品数据==========" + pjGoodsDescList);
 				} else {
 					System.out.println("=========订单明细商品数据为空==========");
 				}
@@ -97,23 +112,43 @@ public class PJCorprClient implements IPJCorpClient {
 			}
 			List<Long> customerId = orderList.stream().map(PjOrder::getCustomerId).filter(Objects::nonNull).collect(Collectors.toList());
 			if (!customerId.isEmpty()) {
-				pjCorpsDescList = corpsDescService.list(new LambdaQueryWrapper<PjCorpsDesc>()
+				StringBuilder customerIds = new StringBuilder();
+				for (Long item : customerId) {
+					customerIds.append(item).append(",");
+				}
+				pjCorpsDescList = corpsDescMapper.selectListNotTenantId(tenantId, customerIds.substring(0, customerIds.length() - 1));
+				/*pjCorpsDescList = corpsDescMapper.selectList(new LambdaQueryWrapper<PjCorpsDesc>()
 					.in(PjCorpsDesc::getId, customerId)
 					.eq(PjCorpsDesc::getIsDeleted, 0)
-					.eq(PjCorpsDesc::getTenantId, AuthUtil.getTenantId()));
+					.eq(PjCorpsDesc::getTenantId, tenantId));*/
+				System.out.println("=========订单客户数据==========" + pjCorpsDescList);
 				if (!pjCorpsDescList.isEmpty()) {
 					List<Long> referenceId = pjCorpsDescList.stream().map(PjCorpsDesc::getReferenceId).filter(Objects::nonNull).collect(Collectors.toList());
+					System.out.println("=========客户推荐人==========" + referenceId);
 					if (!referenceId.isEmpty()) {
-						referenceList = corpsDescService.list(new LambdaQueryWrapper<PjCorpsDesc>()
+						StringBuilder referenceIds = new StringBuilder();
+						for (Long item : referenceId) {
+							referenceIds.append(item).append(",");
+						}
+						referenceList = corpsDescMapper.selectListNotTenantId(tenantId, referenceIds.substring(0, referenceIds.length() - 1));
+						/*referenceList = corpsDescMapper.selectList(new LambdaQueryWrapper<PjCorpsDesc>()
 							.in(PjCorpsDesc::getId, referenceId)
 							.eq(PjCorpsDesc::getIsDeleted, 0)
-							.eq(PjCorpsDesc::getTenantId, AuthUtil.getTenantId()));
+							.eq(PjCorpsDesc::getTenantId, tenantId));*/
+						System.out.println("=========客户推荐人数据==========" + referenceList);
 					} else {
 						System.out.println("=========未找到客户推荐人数据==========");
 					}
 					List<Long> salesmanId = pjCorpsDescList.stream().map(PjCorpsDesc::getSalesmanId).filter(Objects::nonNull).collect(Collectors.toList());
+					System.out.println("=========客户业务员==========" + salesmanId);
 					if (!salesmanId.isEmpty()) {
-						userList = userClient.userListGetByIds(salesmanId);
+						StringBuilder salesmanIds = new StringBuilder();
+						for (Long item : salesmanId) {
+							salesmanIds.append(item).append(",");
+						}
+						userList = userClient.selectListNotTenantId(tenantId, salesmanIds.substring(0, salesmanIds.length() - 1));
+//						userList = userClient.userListGetByIds(salesmanId);
+						System.out.println("=========客户业务员数据==========" + userList);
 					} else {
 						System.out.println("=========未找到客户业务员数据==========");
 					}
@@ -140,11 +175,14 @@ public class PJCorprClient implements IPJCorpClient {
 				}
 				if (!orderItemsList.isEmpty()) {
 					List<PjOrderItems> list = orderItemsList.stream().filter(e -> e.getPid().equals(order.getId())).collect(Collectors.toList());
+					System.out.println("=========循环订单明细数据==========" + list);
 					if (!list.isEmpty()) {
+						List<Long> goodsIds = new ArrayList<>();
 						for (PjOrderItems e : list) {
 							if (!pjGoodsDescList.isEmpty()) {
 								PjGoodsDesc goodsDesc = pjGoodsDescList.stream().filter(item -> item.getId().equals(e.getGoodsId())).findFirst().orElse(null);
 								if (goodsDesc != null) {
+									goodsIds.add(goodsDesc.getId());
 									//业务员积分
 									if (user != null && ObjectUtils.isNotNull(goodsDesc.getSalesmanIntegral())) {
 										user.setPointsBalance(user.getPointsBalance().add(goodsDesc.getSalesmanIntegral().multiply(e.getGoodsNum())));
@@ -160,16 +198,19 @@ public class PJCorprClient implements IPJCorpClient {
 						}
 						System.out.println("=========积分处理完成数据==========");
 						if (reference != null) {
-							corpsDescs.add(reference);
+							corpsDescMapper.updateByIdPointsBalance(reference);
+//							corpsDescMapper.updateById(reference);
 						}
 						if (user != null) {
 							users.add(user);
 						}
-						corpsDescs.add(corpsDesc);
+//						corpsDescMapper.updateById(corpsDesc);
+						corpsDescMapper.updateByIdPointsBalance(corpsDesc);
 						IntegralDetail integralDetail = new IntegralDetail();
 						integralDetail.setCreateTime(new Date());
-						integralDetail.setCreateUserName(AuthUtil.getUserName());
-						integralDetail.setCreateUser(AuthUtil.getUserId());
+						integralDetail.setCreateUserName(order.getCreateUserName());
+						integralDetail.setCreateUser(order.getCreateUser());
+						integralDetail.setTenantId(tenantId);
 						integralDetail.setType("购买获取");
 						integralDetail.setSrcId(order.getId());
 						integralDetail.setSrcNo(order.getOrdNo());
@@ -185,12 +226,12 @@ public class PJCorprClient implements IPJCorpClient {
 							integralDetail.setGoodsId(goodsId.substring(0, goodsId.length() - 1));
 						}
 						integralDetailList.add(integralDetail);
-						R res = iIntegralDetailClient.submit(integralDetail);
+						/*R res = iIntegralDetailClient.submit(integralDetail);
 						if (res.isSuccess()) {
 							System.out.println("=========积分记录保存成功!" + res.getData() + "==========");
 						} else {
 							System.out.println("=========积分记录保存失败!" + res.getData() + "==========");
-						}
+						}*/
 					} else {
 						System.out.println("=========循环未找到明细数据==========");
 					}
@@ -199,14 +240,17 @@ public class PJCorprClient implements IPJCorpClient {
 		} else {
 			System.out.println("=========订单数据为空==========");
 		}
-		if (!corpsDescs.isEmpty()) {
-			corpsDescService.updateBatchById(corpsDescs);
-		}
 		if (!users.isEmpty()) {
-			userClient.updateUserBatchById(users);
+//			userClient.updateUserBatchById(users);
+			userClient.updateByIdPointsBalance(users);
 		}
 		if (!integralDetailList.isEmpty()) {
-			iIntegralDetailClient.updateBatchById(integralDetailList);
+			R res = iIntegralDetailClient.updateBatchById(integralDetailList);
+			if (res.isSuccess()) {
+				System.out.println("=========积分记录保存成功!" + res.getData() + "==========");
+			} else {
+				System.out.println("=========积分记录保存失败!" + res.getMsg() + "==========");
+			}
 		}
 		System.out.println("=========积分修改完成数据==========");
 		return R.success("操作成功");

+ 7 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.client.entity.CorpsDesc;
+import org.springblade.core.tenant.annotation.TenantIgnore;
 import org.springblade.salesPart.entity.PjCorpsDesc;
 import org.springblade.salesPart.vo.CorpsDescVO;
 
@@ -67,4 +68,10 @@ public interface CorpsDescMapper extends BaseMapper<PjCorpsDesc> {
 	List<PjCorpsDesc> selectPartsCorpsStatistics(@Param("CorpsDesc")PjCorpsDesc corpsDescDto);
 
 	List<PjCorpsDesc> selectPartsCorpsDesc(@Param("CorpsDesc") PjCorpsDesc corpsDescDto);
+
+	@TenantIgnore
+    List<PjCorpsDesc> selectListNotTenantId(@Param("tenantId")String tenantId, @Param("ids")String ids);
+
+	@TenantIgnore
+	int updateByIdPointsBalance(@Param("corpsDesc")PjCorpsDesc corpsDesc);
 }

+ 18 - 1
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/mapper/CorpsDescMapper.xml

@@ -29,7 +29,14 @@
         <result column="sales_company_name" property="salesCompanyName"/>
         <result column="use_credit_limit" property="useCreditLimit"/>
     </resultMap>
-
+    <update id="updateByIdPointsBalance" parameterType="org.springblade.salesPart.entity.PjCorpsDesc">
+        update pjpf_corps_desc
+        set id = #{corpsDesc.id},
+        <if test="corpsDesc.pointsBalance != null">
+            points_balance = #{corpsDesc.pointsBalance}
+        </if>
+        where id = #{corpsDesc.id}
+    </update>
 
     <select id="selectCorpsDescPage"  resultType="org.springblade.salesPart.vo.CorpsDescVO">
         select
@@ -283,4 +290,14 @@
         </if>
         ORDER BY cname ASC
     </select>
+    <select id="selectListNotTenantId" resultType="org.springblade.salesPart.entity.PjCorpsDesc">
+        select
+            *
+        from
+            pjpf_corps_desc
+        where
+            is_deleted = '0'
+          and tenant_id = #{tenantId}
+          and find_in_set(id, #{ids})
+    </select>
 </mapper>

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

@@ -16,6 +16,8 @@
  */
 package org.springblade.salesPart.goods.mapper;
 
+import feign.Param;
+import org.springblade.core.tenant.annotation.TenantIgnore;
 import org.springblade.salesPart.entity.PjGoodsDesc;
 import org.springblade.salesPart.vo.GoodsDescVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -39,4 +41,6 @@ public interface GoodsDescMapper extends BaseMapper<PjGoodsDesc> {
 	 */
 	List<GoodsDescVO> selectGoodsPage(IPage page, GoodsDescVO goods);
 
+	@TenantIgnore
+    List<PjGoodsDesc> selectListNotTenantId(@Param("tenantId") String tenantId, @Param("goodsIds")String goodsIds);
 }

+ 8 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/mapper/GoodsDescMapper.xml

@@ -40,5 +40,13 @@
     <select id="selectGoodsPage" resultMap="goodsResultMap">
         select * from pjpf_goods_desc where is_deleted = 0
     </select>
+    <select id="selectListNotTenantId" resultType="org.springblade.salesPart.entity.PjGoodsDesc">
+        select *
+        from pjpf_goods_desc
+        where is_deleted = 0
+          and enable_or_not = 1
+          and tenant_id = #{tenantId}
+          and find_in_set(id, #{goodsIds})
+    </select>
 
 </mapper>

+ 161 - 114
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/goods/service/impl/GoodsDescServiceImpl.java

@@ -50,12 +50,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
 
 /**
  * 配件批发商品表 服务实现类
@@ -299,138 +297,187 @@ public class GoodsDescServiceImpl extends ServiceImpl<GoodsDescMapper, PjGoodsDe
 		if (CollectionUtils.isEmpty(data)) {
 			throw new SecurityException("导入数据不能为空");
 		}
-
-		for (int i = 0; i < data.size(); i++) {
-			GoodsExcel goodsExcel = data.get(i);
-			String type = goodsExcel.getGoodsTypeName();
-			PjGoodsType goodsType = goodsTypeMapper.selectGoodsTypeCname(type, AuthUtil.getTenantId());
-			if (goodsType == null) {
-				throw new SecurityException("第" + (i + 2) + "行未添加分类或者分类不存在");
-			}
+		String goodsTypeNames = data.stream().map(GoodsExcel::getGoodsTypeName).distinct().filter(Objects::nonNull).collect(Collectors.joining(","));
+		List<PjGoodsType> goodsTypeList = goodsTypeMapper.selectList(new LambdaQueryWrapper<PjGoodsType>()
+			.eq(PjGoodsType::getIsDeleted, 0)
+			.eq(PjGoodsType::getTenantId, AuthUtil.getTenantId())
+			.apply("find_in_set(cname,'" + goodsTypeNames + "')"));
+		String brands = data.stream().map(GoodsExcel::getBrand).distinct().filter(Objects::nonNull).collect(Collectors.joining(","));
+		List<PjBrandDesc> brandDescList = brandDescMapper.selectList(new LambdaQueryWrapper<PjBrandDesc>()
+			.eq(PjBrandDesc::getIsDeleted, 0)
+			.eq(PjBrandDesc::getTenantId, AuthUtil.getTenantId())
+			.apply("find_in_set(cname,'" + brands + "')"));
+		String corpNames = data.stream().map(GoodsExcel::getCorpName).distinct().filter(Objects::nonNull).collect(Collectors.joining(","));
+		List<PjCorpsDesc> corpsDescList = corpsDescService.list(new LambdaQueryWrapper<PjCorpsDesc>()
+			.eq(PjCorpsDesc::getIsDeleted, 0)
+			.eq(PjCorpsDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjCorpsDesc::getCorpType, "GYS")
+			.apply("find_in_set(cname,'" + corpNames + "')"));
+		String goodsNames = data.stream().map(GoodsExcel::getCname).distinct().filter(Objects::nonNull).collect(Collectors.joining(","));
+		List<PjGoodsDesc> goodsDescList = baseMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
+			.eq(PjGoodsDesc::getIsDeleted, 0)
+			.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+			.apply("find_in_set(cname,'" + goodsNames + "')"));
+		String salesCompanyNames = data.stream().map(GoodsExcel::getSalesCompanyName).distinct().filter(Objects::nonNull).collect(Collectors.joining(","));
+		List<Dept> deptList = new ArrayList<>();
+		R<List<Dept>> res = iSysClient.getDeptListIByName(AuthUtil.getTenantId(), salesCompanyNames);
+		if (res.isSuccess()) {
+			deptList = res.getData();
 		}
-		data.forEach(e -> {
+		List<Dept> finalDeptList = deptList;
+		int q = 0;
+		List<PjGoodsDesc> pjGoodsDescList = new ArrayList<>();
+		for (GoodsExcel e : data) {
+			if (ObjectUtils.isNull(e.getCname())) {
+				throw new RuntimeException("商品名称不能为空");
+			}
+			if (ObjectUtils.isNull(e.getCode())) {
+				throw new RuntimeException("商品编码不能为空");
+			}
+			if (ObjectUtils.isNull(e.getGoodsTypeName())) {
+				throw new RuntimeException("商品分类不能为空");
+			}
+			if (ObjectUtils.isNull(e.getUnit())) {
+				throw new RuntimeException("计量单位不能为空");
+			}
+			if (ObjectUtils.isNull(e.getBrand())) {
+				throw new RuntimeException("品牌不能为空");
+			}
+			if (ObjectUtils.isNull(e.getSpecificationAndModel())) {
+				throw new RuntimeException("规格型号不能为空");
+			}
+			if (ObjectUtils.isNull(e.getBrandItem())) {
+				throw new RuntimeException("花纹不能为空");
+			}
+			if (ObjectUtils.isNull(e.getGoodsSize())) {
+				throw new RuntimeException("尺寸不能为空");
+			}
+			if (ObjectUtils.isNull(e.getSalesCompanyName())) {
+				throw new RuntimeException("所属公司名称不能为空");
+			}
+			if (ObjectUtils.isNull(e.getWhether())) {
+				throw new RuntimeException("是否管理批次号不能为空");
+			}
+			q++;
 			Integer count = baseMapper.selectCount(Wrappers.<PjGoodsDesc>lambdaQuery()
 				.eq(PjGoodsDesc::getCode, e.getCode())
 				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
 				.eq(PjGoodsDesc::getIsDeleted, 0)
 			);
-
 			Integer countName = baseMapper.selectCount(Wrappers.<PjGoodsDesc>lambdaQuery()
 				.eq(PjGoodsDesc::getCname, e.getCname())
 				.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
 				.eq(PjGoodsDesc::getIsDeleted, 0)
 			);
-			String type = e.getGoodsTypeName();
-			PjGoodsType goodsType = goodsTypeMapper.selectGoodsTypeCname(type, AuthUtil.getTenantId());
-			if (goodsType != null) {
-				PjGoodsDesc goodsDesc = new PjGoodsDesc();
-				goodsDesc.setCode(e.getCode());
-				goodsDesc.setCname(e.getCname());
-				goodsDesc.setGoodsTypeId(String.valueOf(goodsType.getId()));
-				goodsDesc.setGoodsTypeName(e.getGoodsTypeName());
-				goodsDesc.setUnit(e.getUnit());
-				goodsDesc.setEnableOrNot(1);
-
-				//获得品牌
-				if (ObjectUtils.isNotNull(e.getBrand())) {
-					PjBrandDesc brandDesc = brandDescMapper.selectOne(new LambdaQueryWrapper<PjBrandDesc>()
-						.eq(PjBrandDesc::getIsDeleted, 0)
-						.eq(PjBrandDesc::getTenantId, AuthUtil.getTenantId())
-						.eq(PjBrandDesc::getCname, e.getBrand()));
-
-					if (ObjectUtils.isNotNull(brandDesc)) {
-						goodsDesc.setBrandId(brandDesc.getId());
-						goodsDesc.setBrandName(e.getBrand());
-					} else {
-						throw new RuntimeException("品牌名称错误或品牌不存在");
-					}
+			PjGoodsType goodsType = goodsTypeList.stream().filter(i -> i.getCname().equals(e.getGoodsTypeName())).findFirst().orElse(null);
+			if (goodsType == null) {
+				throw new SecurityException("第" + (q + 1) + "行未添加分类或者分类不存在");
+			}
+			PjGoodsDesc goodsDesc = new PjGoodsDesc();
+			goodsDesc.setCode(e.getCode());
+			goodsDesc.setCname(e.getCname());
+			goodsDesc.setGoodsTypeId(String.valueOf(goodsType.getId()));
+			goodsDesc.setGoodsTypeName(e.getGoodsTypeName());
+			goodsDesc.setUnit(e.getUnit());
+			goodsDesc.setEnableOrNot(1);
+
+			//获得品牌
+			if (ObjectUtils.isNotNull(e.getBrand())) {
+				PjBrandDesc brandDesc = brandDescList.stream().filter(i -> i.getCname().equals(e.getBrand()))
+					.findFirst().orElse(null);
+				if (brandDesc != null) {
+					goodsDesc.setBrandId(brandDesc.getId());
+					goodsDesc.setBrandName(e.getBrand());
+				} else {
+					throw new RuntimeException("品牌名称错误或品牌不存在");
 				}
+			}
 
-				goodsDesc.setSpecificationAndModel(e.getSpecificationAndModel());
-				goodsDesc.setBrandItem(e.getBrandItem());
-				goodsDesc.setPlaceProduction(e.getPlaceProduction());
-
-				// 获取供应商
-				if (ObjectUtils.isNotNull(e.getCorpName())) {
-					PjCorpsDesc corpByName = corpsDescService.getCorpsDesc(e.getCorpName(), "GYS");
-					if (corpByName != null) {
-						goodsDesc.setCorpId(corpByName.getId());
-						goodsDesc.setCorpName(corpByName.getCname());
-					} else {
-						throw new RuntimeException("供应商" + e.getCorpName() + "不存在");
-					}
+			goodsDesc.setSpecificationAndModel(e.getSpecificationAndModel());
+			goodsDesc.setBrandItem(e.getBrandItem());
+			goodsDesc.setPlaceProduction(e.getPlaceProduction());
+
+			// 获取供应商
+			if (ObjectUtils.isNotNull(e.getCorpName())) {
+				PjCorpsDesc corpByName = corpsDescList.stream().filter(i -> i.getCname().equals(e.getCorpName()))
+					.findFirst().orElse(null);
+				if (corpByName != null) {
+					goodsDesc.setCorpId(corpByName.getId());
+					goodsDesc.setCorpName(corpByName.getCname());
+				} else {
+					throw new RuntimeException("供应商" + e.getCorpName() + "不存在");
 				}
-				//获得所属公司
-				if (StringUtil.isNotBlank(e.getSalesCompanyName())) {
-					R<Dept> dept = iSysClient.getDeptIByName(AuthUtil.getTenantId(), e.getSalesCompanyName());
-					if (dept.isSuccess() && ObjectUtil.isNotEmpty(dept.getData())) {
-						goodsDesc.setSalesCompanyId(dept.getData().getId());
-						goodsDesc.setSalesCompanyName(dept.getData().getFullName());
-					} else {
-						throw new SecurityException("请输入正确的所属公司");
-					}
+			}
+			//获得所属公司
+			if (StringUtil.isNotBlank(e.getSalesCompanyName())) {
+				Dept dept = finalDeptList.stream().filter(i -> i.getFullName().equals(e.getSalesCompanyName())).findFirst().orElse(null);
+				if (dept != null) {
+					goodsDesc.setSalesCompanyId(dept.getId());
+					goodsDesc.setSalesCompanyName(dept.getFullName());
 				} else {
-					throw new SecurityException("请输入所属公司");
+					throw new SecurityException("请输入正确的所属公司");
 				}
+			} else {
+				throw new SecurityException("请输入所属公司");
+			}
 
+			goodsDesc.setCnameInt(e.getCnameInt());
+			if (StringUtils.isNotBlank(e.getCnameInt())) {
 				goodsDesc.setCnameInt(e.getCnameInt());
-				if (StringUtils.isNotBlank(e.getCnameInt())) {
-					goodsDesc.setCnameInt(e.getCnameInt());
-				} else {
-					goodsDesc.setCnameInt(getCnameInt(e.getCname()));
-				}
+			} else {
+				goodsDesc.setCnameInt(getCnameInt(e.getCname()));
+			}
 
-				goodsDesc.setGoodsDescription(e.getGoodsDescription());
-				if (ObjectUtils.isNotNull(e.getWhether()) && ("1".equals(e.getWhether()) || "0".equals(e.getWhether()))) {
-					goodsDesc.setWhether(e.getWhether());
-				} else {
-					goodsDesc.setWhether("0");
+			goodsDesc.setGoodsDescription(e.getGoodsDescription());
+			if (ObjectUtils.isNotNull(e.getWhether()) && ("1".equals(e.getWhether()) || "0".equals(e.getWhether()))) {
+				goodsDesc.setWhether(e.getWhether());
+			} else {
+				goodsDesc.setWhether("0");
+			}
+			goodsDesc.setInventoryAlert(e.getInventoryAlert());
+			goodsDesc.setExplosionProof(e.getExplosionProof());
+			goodsDesc.setOriginalFactory(e.getOriginalFactory());
+			goodsDesc.setSelfRecovery(e.getSelfRecovery());
+			goodsDesc.setGoodsSize(e.getGoodsSize());
+			PjGoodsDesc one = goodsDescList.stream().filter(i -> i.getCname().equals(e.getCname())).findFirst().orElse(null);
+			if (one == null) {
+				if (count > 0) {
+					throw new ServiceException(goodsDesc.getCode() + "编码已存在");
 				}
-				goodsDesc.setInventoryAlert(e.getInventoryAlert());
-				goodsDesc.setExplosionProof(e.getExplosionProof());
-				goodsDesc.setOriginalFactory(e.getOriginalFactory());
-				goodsDesc.setSelfRecovery(e.getSelfRecovery());
-				goodsDesc.setGoodsSize(e.getGoodsSize());
-				// 如果名称相等 就认为重复
-				LambdaQueryWrapper<PjGoodsDesc> queryWrapper = new LambdaQueryWrapper<>();
-				queryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId());
-				queryWrapper.eq(PjGoodsDesc::getCname, goodsDesc.getCname());
-				queryWrapper.eq(PjGoodsDesc::getIsDeleted, 0);
-				PjGoodsDesc one = baseMapper.selectOne(queryWrapper);
-				if (one == null) {
-					if (count > 0) {
-						throw new ServiceException(goodsDesc.getCode() + "编码已存在");
-					}
-					if (countName > 0) {
-						throw new ServiceException(goodsDesc.getCname() + "名称已存在");
-					}
-					goodsDesc.setTenantId(AuthUtil.getTenantId());
-					goodsDesc.setCreateTime(new Date());
-					goodsDesc.setCreateUser(AuthUtil.getUserId());
-					goodsDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
-					baseMapper.insert(goodsDesc);
-
-					PjGoodsTypeDesc goodsTypeDes = new PjGoodsTypeDesc();
-					goodsTypeDes.setGoodsId(goodsDesc.getId());
-					goodsTypeDes.setGoodsTypeId(goodsType.getId());
-					goodsTypeDes.setCreateTime(new Date());
-					goodsTypeDes.setTenantId(AuthUtil.getTenantId());
-					goodsTypeDes.setCreateUser(AuthUtil.getUserId());
-					goodsTypeDes.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
-					goodsTypeDescMapper.insert(goodsTypeDes);
-				} else {
-					if (count > 1) {
-						throw new ServiceException(goodsDesc.getCode() + "编码已存在");
-					}
-					if (countName > 1) {
-						throw new ServiceException(goodsDesc.getCname() + "名称已存在");
-					}
-					goodsDesc.setUpdateTime(new Date());
-					goodsDesc.setUpdateUser(AuthUtil.getUserId());
-					baseMapper.updateById(goodsDesc);
+				if (countName > 0) {
+					throw new ServiceException(goodsDesc.getCname() + "名称已存在");
+				}
+				goodsDesc.setTenantId(AuthUtil.getTenantId());
+				goodsDesc.setCreateTime(new Date());
+				goodsDesc.setCreateUser(AuthUtil.getUserId());
+				goodsDesc.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+			} else {
+				if (count > 1) {
+					throw new ServiceException(goodsDesc.getCode() + "编码已存在");
+				}
+				if (countName > 1) {
+					throw new ServiceException(goodsDesc.getCname() + "名称已存在");
 				}
+				goodsDesc.setUpdateTime(new Date());
+				goodsDesc.setUpdateUser(AuthUtil.getUserId());
+				goodsDesc.setId(one.getId());
 			}
-		});
+			pjGoodsDescList.add(goodsDesc);
+		}
+		this.saveOrUpdateBatch(pjGoodsDescList);
+		for (PjGoodsDesc e : pjGoodsDescList) {
+			PjGoodsDesc one = goodsDescList.stream().filter(i -> i.getCname().equals(e.getCname())).findFirst().orElse(null);
+			if (one == null) {
+				PjGoodsTypeDesc goodsTypeDes = new PjGoodsTypeDesc();
+				goodsTypeDes.setGoodsId(e.getId());
+				goodsTypeDes.setGoodsTypeId(Long.valueOf(e.getGoodsTypeId()));
+				goodsTypeDes.setCreateTime(new Date());
+				goodsTypeDes.setTenantId(AuthUtil.getTenantId());
+				goodsTypeDes.setCreateUser(AuthUtil.getUserId());
+				goodsTypeDes.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+				goodsTypeDescMapper.insert(goodsTypeDes);
+			}
+		}
 		return R.success("ok");
 	}
 

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

@@ -19,6 +19,7 @@ package org.springblade.salesPart.order.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import feign.Param;
+import org.springblade.core.tenant.annotation.TenantIgnore;
 import org.springblade.salesPart.dto.SaleDetail;
 import org.springblade.salesPart.dto.SaleDetailDto;
 import org.springblade.salesPart.entity.PjOrderItems;
@@ -46,4 +47,7 @@ public interface OrderItemsMapper extends BaseMapper<PjOrderItems> {
 	List<SaleDetailDto> saleDetailPage(@Param("page")IPage<SaleDetailDto> page, @Param("saleDetailDto") SaleDetail saleDetailDto);
 
 	List<SaleDetailDto> saleDetailList(SaleDetail saleDetail);
+
+	@TenantIgnore
+    List<PjOrderItems> selectListNotTenantId(@Param("tenantId")String tenantId, @Param("pids")String pids);
 }

+ 5 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/order/mapper/OrderItemsMapper.xml

@@ -196,6 +196,11 @@
         ORDER BY
         po.busines_date
     </select>
+    <select id="selectListNotTenantId" resultType="org.springblade.salesPart.entity.PjOrderItems">
+        select * from pjpf_order_items where is_deleted = 0
+                                         and tenant_id = #{tenantId}
+                                         and find_in_set(pid, #{pids})
+    </select>
 
 
 </mapper>

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

@@ -2051,15 +2051,14 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, PjOrder> implemen
 								}
 							});
 						}
-
 						/* ----------------------修改上架库存---------------------- */
 					});
 				}
-
 				//生成历史记录
 				saveHistory(order.getId(), "已退款");
 			}
-
+			corpsDesc.setLimitAmount(corpsDesc.getLimitAmount().add(order.getTotalMoney()));
+			corpsDescMapper.updateById(corpsDesc);
 			/* ----------------------调用退款接口---------------------- */
 
 			if (ObjectUtils.isNull(order.getOldTrxId())) {

+ 126 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/controller/LimitRecordController.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.salesPart.record.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.salesPart.record.entity.LimitRecord;
+import org.springblade.salesPart.record.vo.LimitRecordVO;
+import org.springblade.salesPart.record.service.ILimitRecordService;
+import org.springblade.core.boot.ctrl.BladeController;
+
+/**
+ * 额度管理记录 控制器
+ *
+ * @author BladeX
+ * @since 2024-03-22
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/limitrecord")
+@Api(value = "额度管理记录", tags = "额度管理记录接口")
+public class LimitRecordController extends BladeController {
+
+	private final ILimitRecordService limitRecordService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入limitRecord")
+	public R<LimitRecord> detail(LimitRecord limitRecord) {
+		LimitRecord detail = limitRecordService.getOne(Condition.getQueryWrapper(limitRecord));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 额度管理记录
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入limitRecord")
+	public R<IPage<LimitRecord>> list(LimitRecord limitRecord, Query query) {
+		IPage<LimitRecord> pages = limitRecordService.page(Condition.getPage(query), Condition.getQueryWrapper(limitRecord));
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 额度管理记录
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入limitRecord")
+	public R<IPage<LimitRecordVO>> page(LimitRecordVO limitRecord, Query query) {
+		IPage<LimitRecordVO> pages = limitRecordService.selectLimitRecordPage(Condition.getPage(query), limitRecord);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 额度管理记录
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入limitRecord")
+	public R save(@Valid @RequestBody LimitRecord limitRecord) {
+		return R.status(limitRecordService.save(limitRecord));
+	}
+
+	/**
+	 * 修改 额度管理记录
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入limitRecord")
+	public R update(@Valid @RequestBody LimitRecord limitRecord) {
+		return R.status(limitRecordService.updateById(limitRecord));
+	}
+
+	/**
+	 * 新增或修改 额度管理记录
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入limitRecord")
+	public R submit(@Valid @RequestBody LimitRecord limitRecord) {
+		return limitRecordService.submit(limitRecord);
+	}
+
+
+	/**
+	 * 删除 额度管理记录
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(limitRecordService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}

+ 42 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/mapper/LimitRecordMapper.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.salesPart.record.mapper;
+
+import org.springblade.salesPart.record.entity.LimitRecord;
+import org.springblade.salesPart.record.vo.LimitRecordVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 额度管理记录 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2024-03-22
+ */
+public interface LimitRecordMapper extends BaseMapper<LimitRecord> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param limitRecord
+	 * @return
+	 */
+	List<LimitRecordVO> selectLimitRecordPage(IPage page, LimitRecordVO limitRecord);
+
+}

+ 29 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/mapper/LimitRecordMapper.xml

@@ -0,0 +1,29 @@
+<?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.salesPart.record.mapper.LimitRecordMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="limitRecordResultMap" type="org.springblade.salesPart.record.entity.LimitRecord">
+        <id column="id" property="id"/>
+        <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="is_deleted" property="isDeleted"/>
+        <result column="remarks" property="remarks"/>
+        <result column="status" property="status"/>
+        <result column="sales_company_id" property="salesCompanyId"/>
+        <result column="sales_company_name" property="salesCompanyName"/>
+        <result column="amount_old" property="amountOld"/>
+        <result column="amount_update" property="amountUpdate"/>
+        <result column="amount_new" property="amountNew"/>
+        <result column="pid" property="pid"/>
+    </resultMap>
+
+
+    <select id="selectLimitRecordPage" resultMap="limitRecordResultMap">
+        select * from pjpf_limit_record where is_deleted = 0
+    </select>
+
+</mapper>

+ 43 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/service/ILimitRecordService.java

@@ -0,0 +1,43 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.salesPart.record.service;
+
+import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.record.entity.LimitRecord;
+import org.springblade.salesPart.record.vo.LimitRecordVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 额度管理记录 服务类
+ *
+ * @author BladeX
+ * @since 2024-03-22
+ */
+public interface ILimitRecordService extends IService<LimitRecord> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param limitRecord
+	 * @return
+	 */
+	IPage<LimitRecordVO> selectLimitRecordPage(IPage<LimitRecordVO> page, LimitRecordVO limitRecord);
+
+    R submit(LimitRecord limitRecord);
+}

+ 68 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/record/service/impl/LimitRecordServiceImpl.java

@@ -0,0 +1,68 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.salesPart.record.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import io.seata.spring.annotation.GlobalTransactional;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.record.entity.LimitRecord;
+import org.springblade.salesPart.record.mapper.LimitRecordMapper;
+import org.springblade.salesPart.record.service.ILimitRecordService;
+import org.springblade.salesPart.record.vo.LimitRecordVO;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+
+/**
+ * 额度管理记录 服务实现类
+ *
+ * @author BladeX
+ * @since 2024-03-22
+ */
+@Service
+@AllArgsConstructor
+public class LimitRecordServiceImpl extends ServiceImpl<LimitRecordMapper, LimitRecord> implements ILimitRecordService {
+
+	@Override
+	public IPage<LimitRecordVO> selectLimitRecordPage(IPage<LimitRecordVO> page, LimitRecordVO limitRecord) {
+		return page.setRecords(baseMapper.selectLimitRecordPage(page, limitRecord));
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
+	public R submit(LimitRecord limitRecord) {
+		if (limitRecord.getId() != null) {
+			limitRecord.setSalesCompanyId(Long.parseLong(AuthUtil.getDeptId()));
+			limitRecord.setUpdateUser(AuthUtil.getUserId());
+			limitRecord.setUpdateTime(new Date());
+			limitRecord.setTenantId(AuthUtil.getTenantId());
+		} else {
+			limitRecord.setCreateUser(AuthUtil.getUserId());
+			limitRecord.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
+			limitRecord.setCreateTime(new Date());
+			limitRecord.setTenantId(AuthUtil.getTenantId());
+		}
+		this.saveOrUpdate(limitRecord);
+		return R.data(limitRecord);
+	}
+
+}

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

@@ -38,6 +38,7 @@ import org.springblade.salesPart.entity.PjShip;
 import org.springblade.salesPart.entity.PjShipItems;
 import org.springblade.salesPart.enums.OrderTypeEnum;
 import org.springblade.salesPart.excel.PjShipStockDetails;
+import org.springblade.salesPart.excel.ShipItemImportCodeExcel;
 import org.springblade.salesPart.excel.ShipItemImportExcel;
 import org.springblade.salesPart.ship.service.IShipItemsService;
 import org.springblade.salesPart.ship.service.IShipService;
@@ -360,6 +361,22 @@ public class ShipController extends BladeController {
 	}
 
 	/**
+	 * 入库明细导入
+	 */
+	@PostMapping("/import-item-code")
+	@ApiOperationSupport(order = 13)
+	@ApiOperation(value = "入库明细导入", notes = "传入excel")
+	public R<List<PjOrderItems>> importItemCode(@RequestParam("file") MultipartFile file) {
+		//导入数据
+		List<ShipItemImportCodeExcel> excelList = ExcelUtil.read(file, ShipItemImportCodeExcel.class);
+		if (CollectionUtils.isEmpty(excelList)) {
+			throw new SecurityException("数据不能为空");
+		}
+
+		return shipService.importItemCode(excelList);
+	}
+
+	/**
 	 * 导出模板
 	 */
 	@GetMapping("/export-item")
@@ -371,6 +388,17 @@ public class ShipController extends BladeController {
 	}
 
 	/**
+	 * 导出模板
+	 */
+	@GetMapping("/export-item-code")
+	@ApiOperationSupport(order = 14)
+	@ApiOperation(value = "导出模板")
+	public void exportItemCode(HttpServletResponse response) {
+		List<ShipItemImportCodeExcel> list = new ArrayList<>();
+		ExcelUtil.export(response, "导入模板-明细信息(code)", "导入模板-明细信息(code)", list, ShipItemImportCodeExcel.class);
+	}
+
+	/**
 	 * 退货入库完成
 	 */
 	@PostMapping("/returnWarehouse")

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

@@ -22,6 +22,7 @@ import org.springblade.salesPart.entity.PjOrderItems;
 import org.springblade.salesPart.entity.PjShip;
 import org.springblade.salesPart.entity.PjShipItems;
 import org.springblade.salesPart.excel.PjShipStockDetails;
+import org.springblade.salesPart.excel.ShipItemImportCodeExcel;
 import org.springblade.salesPart.excel.ShipItemImportExcel;
 import org.springblade.salesPart.vo.ShipVO;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -160,4 +161,6 @@ public interface IShipService extends IService<PjShip> {
 	R revokeTransferAllocate(PjShip order);
 
 	List<PjShipStockDetails> stockDataDetailsOrder(PjShipStockDetails pjShipStockDetails);
+
+	R<List<PjOrderItems>> importItemCode(List<ShipItemImportCodeExcel> excelList);
 }

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

@@ -34,10 +34,10 @@ 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.salesPart.corps.mapper.CorpsDescMapper;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.OrderTypeEnum;
 import org.springblade.salesPart.excel.PjShipStockDetails;
+import org.springblade.salesPart.excel.ShipItemImportCodeExcel;
 import org.springblade.salesPart.excel.ShipItemImportExcel;
 import org.springblade.salesPart.files.service.PjpfFilesService;
 import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
@@ -174,7 +174,7 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 		}
 
 		//库管员名称
-		if(ObjectUtils.isNotNull(ship.getStockClerkId())){
+		if (ObjectUtils.isNotNull(ship.getStockClerkId())) {
 			ship.setStockClerkName(userClient.userInfoById(ship.getStockClerkId()).getData().getRealName());
 		}
 		ship.setStorageName(storageDescMapper.selectById(ship.getStorageId()).getCname());
@@ -1137,6 +1137,13 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			throw new SecurityException("导入数据不能为空");
 		}
 		List<PjOrderItems> list = new ArrayList<>();
+		String goodsNames = excelList.stream().map(ShipItemImportExcel::getGoodsName)
+			.filter(Objects::nonNull).collect(Collectors.joining(","));
+		LambdaQueryWrapper<PjGoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjGoodsDesc::getIsDeleted, 0)
+			.apply("find_in_set(cname,'" + goodsNames + "')");
+		List<PjGoodsDesc> goodsDescList = goodsDescMapper.selectList(lambdaQueryWrapper);
 		for (int i = 0; i < excelList.size(); i++) {
 			//判断必填项是否为空
 			ShipItemImportExcel itemExcel = excelList.get(i);
@@ -1154,14 +1161,9 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 			BeanUtil.copy(itemExcel, item);
 
 			//查询商品信息
-			LambdaQueryWrapper<PjGoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-			lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
-				.eq(PjGoodsDesc::getIsDeleted, 0)
-//				.eq(PjGoodsDesc::getSalesCompanyId, AuthUtil.getDeptId())
-				.eq(PjGoodsDesc::getCname, itemExcel.getGoodsName());
-			PjGoodsDesc goodsDesc = goodsDescMapper.selectOne(lambdaQueryWrapper);
-
-			if (ObjectUtil.isNotEmpty(goodsDesc)) {
+			PjGoodsDesc goodsDesc = goodsDescList.stream().filter(e -> e.getCname().equals(itemExcel.getGoodsName())).findFirst().orElse(null);
+
+			if (goodsDesc != null) {
 				item.setGoodsId(goodsDesc.getId());
 				item.setGoodsName(goodsDesc.getCname());
 				item.setGoodsNo(goodsDesc.getCode());
@@ -1757,4 +1759,64 @@ public class ShipServiceImpl extends ServiceImpl<ShipMapper, PjShip> implements
 		return orderMapper.stockDataDetailsOrder(pjShipStockDetails);
 	}
 
+	@Override
+	public R<List<PjOrderItems>> importItemCode(List<ShipItemImportCodeExcel> excelList) {
+		if (CollectionUtils.isEmpty(excelList)) {
+			throw new SecurityException("导入数据不能为空");
+		}
+		List<PjOrderItems> list = new ArrayList<>();
+		String codes = excelList.stream().map(ShipItemImportCodeExcel::getCode)
+			.filter(Objects::nonNull).collect(Collectors.joining(","));
+		LambdaQueryWrapper<PjGoodsDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjGoodsDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(PjGoodsDesc::getIsDeleted, 0)
+			.apply("find_in_set(code,'" + codes + "')");
+		List<PjGoodsDesc> goodsDescList = goodsDescMapper.selectList(lambdaQueryWrapper);
+		for (int i = 0; i < excelList.size(); i++) {
+			//判断必填项是否为空
+			ShipItemImportCodeExcel itemExcel = excelList.get(i);
+			if (ObjectUtil.isEmpty(itemExcel.getPrice())) {
+				throw new SecurityException("第" + (i + 2) + "行,价格为空");
+			}
+			if (ObjectUtil.isEmpty(itemExcel.getGoodsNum())) {
+				throw new SecurityException("第" + (i + 2) + "行,数量为空");
+			}
+
+			PjOrderItems item = new PjOrderItems();
+			BeanUtil.copy(itemExcel, item);
+
+			//查询商品信息
+			PjGoodsDesc goodsDesc = goodsDescList.stream().filter(e -> e.getCode().equals(itemExcel.getCode())).findFirst().orElse(null);
+
+			if (goodsDesc != null) {
+				item.setGoodsId(goodsDesc.getId());
+				item.setGoodsName(goodsDesc.getCname());
+				item.setGoodsNo(goodsDesc.getCode());
+				item.setBrandId(goodsDesc.getBrandId());
+				item.setBrandName(goodsDesc.getBrandName());
+				item.setPropertyName(goodsDesc.getSpecificationAndModel());
+				item.setPattern(goodsDesc.getBrandItem());
+				item.setGoodsDescription(goodsDesc.getGoodsDescription());
+
+				if ("0".equals(goodsDesc.getWhether())) {//未开启管理批次号
+					if (ObjectUtil.isNotEmpty(itemExcel.getDot())) {
+						item.setDot(null);
+					}
+				} else {//已开启批次号管理
+					if (ObjectUtil.isEmpty(itemExcel.getDot())) {
+						throw new RuntimeException("第" + (i + 2) + "行,商品已开启管理批次号,请填写批次号");
+					}
+				}
+
+				item.setUnits(goodsDesc.getUnit());
+				item.setSendNum(new BigDecimal("0"));
+			} else {
+				throw new RuntimeException("第" + (i + 2) + "行,商品名称不存在");
+			}
+
+			list.add(item);
+		}
+		return R.data(list);
+	}
+
 }

+ 10 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/controller/ShoppingCartController.java

@@ -179,6 +179,16 @@ public class ShoppingCartController extends BladeController {
 	}
 
 	/**
+	 * 购物车生成销售单(额度支付)
+	 */
+	@PostMapping("/generateOrderLimit")
+	@ApiOperationSupport(order = 10)
+	@ApiOperation(value = "购物车生成销售单", notes = "传入shoppingCart")
+	public R generateOrderLimit(@RequestBody PjShoppingCart pjShoppingCart) {
+		return shoppingCartService.generateOrderLimit(pjShoppingCart.getAddress(), pjShoppingCart.getList(), pjShoppingCart.getPayType());
+	}
+
+	/**
 	 * 活动生成销售单
 	 */
 	@PostMapping("/activityGenerateOrder")

+ 2 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/IShoppingCartService.java

@@ -62,4 +62,6 @@ public interface IShoppingCartService extends IService<PjShoppingCart> {
 	R generateOrder(String address, List<Map<String, Object>> list,String payType);
 
 	R activityGenerateOrder(String address, List<Map<String, Object>> list, String payType);
+
+	R generateOrderLimit(String address, List<Map<String, Object>> list, String payType);
 }

+ 254 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/shoppingCart/service/impl/ShoppingCartServiceImpl.java

@@ -20,10 +20,14 @@ import com.alibaba.csp.sentinel.util.StringUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import io.seata.spring.annotation.GlobalTransactional;
 import lombok.AllArgsConstructor;
+import org.springblade.client.entity.Message;
+import org.springblade.client.feign.IMessageClient;
 import org.springblade.client.feign.ISerialClient;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -42,6 +46,7 @@ import org.springblade.salesPart.shoppingCart.service.IShoppingCartService;
 import org.springblade.salesPart.vo.ShoppingCartVO;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springblade.system.user.feign.IUserSearchClient;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -50,6 +55,8 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -73,6 +80,8 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
 	private final ISysClient sysClient;
 	private final PayService payService;
 	private IUserSearchClient userSearchClient;
+	private final IMessageClient messageClient;//消息
+	private IUserClient userClient;
 
 
 	/**
@@ -504,4 +513,249 @@ public class ShoppingCartServiceImpl extends ServiceImpl<ShoppingCartMapper, PjS
 		}
 	}
 
+	@Override
+	public R generateOrderLimit(String address, List<Map<String, Object>> list, String payType) {
+		StringBuilder goodsName = new StringBuilder();
+		StringBuilder shortcutJoin = new StringBuilder();
+		BigDecimal amount = new BigDecimal("0.00");
+
+		//从集合中取出商品生成销售单
+		if (ObjectUtil.isNotEmpty(list)) {
+
+			PjCorpsDesc corpsDesc = null;
+			//根据当前登录人获得客户
+			PjCorpsAttn corpsAttn = corpsAttnService.getAttn(AuthUtil.getUserId());
+			if (ObjectUtil.isNotEmpty(corpsAttn)) {
+				corpsDesc = corpsDescService.getCorpsDesc(corpsAttn.getPid());
+				if (ObjectUtil.isEmpty(corpsDesc)) {
+					throw new RuntimeException("未查到用户信息");
+				}
+			} else {
+				throw new RuntimeException("未查到用户信息");
+			}
+
+			PjCorpsDesc finalCorpsDesc = corpsDesc;
+
+			// 获取系统编号
+			R billNo = serialClient.getBillNo("WB", "WB", "WB");
+			if (billNo.getCode() != 200) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				throw new RuntimeException("生成系统编号失败");
+			}
+
+			Integer i = 1;
+			// 获取系统编号
+			R SrcOrdNo = serialClient.getBillNo("XS", "XS", "XS");
+			if (SrcOrdNo.getCode() != 200) {
+				TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+				throw new RuntimeException("生成系统编号失败");
+			}
+			List<PjOrder> pjOrderList = new ArrayList<>();
+			for (Map<String, Object> map : list) {
+				String k = (String) map.get("name");
+				if (StringUtil.isNotBlank(k)) {
+
+					String jsonStr = JSON.toJSONString(map.get("list"));
+					JSONArray objects = JSONArray.parseArray(jsonStr);
+					List<PjShoppingCart> shoppingCartList = objects.toJavaList(PjShoppingCart.class);
+
+					//保存销售主表信息
+					PjOrder order = new PjOrder();
+					if (list.size() == 1) {//如果只有一个公司,订单编号和主编号一致
+						order.setOrdNo((String) SrcOrdNo.getData());
+					} else {
+						order.setOrdNo(SrcOrdNo.getData() + "-" + i);
+					}
+					order.setBusinesDate(new Date());
+					order.setSrcOrdNo((String) billNo.getData());
+					order.setCreateUser(AuthUtil.getUserId());
+
+					//处理部门
+					int index = AuthUtil.getDeptId().indexOf(",");
+					Long deptId = null;
+					if (index > -1) {
+						deptId = Long.valueOf(AuthUtil.getDeptId().substring(0, index));
+					} else {
+						deptId = (Long.valueOf(AuthUtil.getDeptId()));
+					}
+
+					//根据客户账期计算应结日期
+					if (ObjectUtil.isNotEmpty(corpsDesc.getAccountPeriod())) {
+						Date now = new Date(); // 获取当前时间
+						long sevenDays = corpsDesc.getAccountPeriod() * 24 * 60 * 60 * 1000L;
+						Date afterSevenDays = new Date(now.getTime() + sevenDays);
+						order.setDueDate(afterSevenDays);
+					} else {
+						order.setDueDate(new Date());
+					}
+
+					order.setCreateTime(new Date());
+					order.setCreateDept(deptId);
+					order.setTenantId(AuthUtil.getTenantId());
+					order.setCustomerId(finalCorpsDesc.getId());
+					order.setCustomerName(finalCorpsDesc.getCname());
+					if (ObjectUtils.isNotNull(finalCorpsDesc.getSalesmanId())) {
+						order.setSalerId(finalCorpsDesc.getSalesmanId());
+						order.setSalerName(finalCorpsDesc.getSalesmanName());
+					} else {
+						R<List<User>> res = userSearchClient.getWarehouseKeeper("业务员", AuthUtil.getDeptId());
+						if (res.isSuccess() && ObjectUtils.isNotNull(res.getData()) && !res.getData().isEmpty()) {
+							order.setSalerId(res.getData().get(0).getId());
+							order.setSalerName(res.getData().get(0).getAccount());
+						}
+					}
+					order.setSalesCompanyId(deptId);
+					order.setSalesCompanyName(sysClient.getDeptName(deptId).getData());
+					order.setRecAddress(address);
+					order.setContacts(corpsAttn.getCname());
+					order.setPhone(corpsAttn.getTel());
+					order.setBusinessSource("额度支付");
+					order.setReceivableType("网络支付");
+					orderService.save(order);
+					//保存销售明细信息
+					if (ObjectUtil.isNotEmpty(shoppingCartList)) {
+						List<PjProductLaunch> pjProductLaunchList = new ArrayList<>();
+						shoppingCartList.forEach(e -> {
+							PjOrderItems orderItems = new PjOrderItems();
+							BeanUtils.copyProperties(e, orderItems);
+							if (e.getInventory().compareTo(orderItems.getGoodsNum()) < 0) {
+								throw new RuntimeException("库存不足");
+							}
+							orderItems.setId(null);
+							orderItems.setSendNum(new BigDecimal("0.00"));
+							orderItems.setCreateUser(AuthUtil.getUserId());
+							orderItems.setCreateDept(order.getCreateDept());
+							orderItems.setCreateTime(new Date());
+							orderItems.setPid(order.getId());
+							orderItems.setTenantId(AuthUtil.getTenantId());
+							orderItems.setBillNo(order.getOrdNo());
+							orderItems.setBizType(order.getBsType());
+							orderItems.setInventory(e.getInventory());
+							orderItems.setTotalAmount(orderItems.getGoodsNum().multiply(orderItems.getPrice()));
+							orderItems.setUrl(ObjectUtils.isNotNull(e.getFilesList()) && !e.getFilesList().isEmpty() ? e.getFilesList().get(0).getUrl() : "");
+							orderItems.setGoodsName(e.getGoodsName());
+							orderItemsMapper.insert(orderItems);
+							PjGoodsDesc goodsDesc = goodsDescMapper.selectById(orderItems.getGoodsId());
+							if (ObjectUtils.isNotNull(goodsDesc)) {
+								shortcutJoin.append(goodsDesc.getCnameInt()).append(",");
+							}
+							goodsName.append(orderItems.getGoodsName()).append(",");
+
+							//生成完毕删除购物车
+							e.setIsDeleted(1);
+							baseMapper.updateById(e);
+							PjProductLaunch productLaunch = productLaunchMapper.selectById(e.getProductLaunchId());
+							if (ObjectUtils.isNotNull(productLaunch)) {
+								pjProductLaunchList.add(productLaunch);
+							}
+						});
+						List<Integer> billType = pjProductLaunchList.stream().map(PjProductLaunch::getBillType).distinct().collect(Collectors.toList());
+						if (ObjectUtils.isNotNull(billType) && billType.size() > 1) {
+							throw new RuntimeException("请选择相同仓库的轮胎");
+						} else {
+							order.setBillType(billType.get(0));
+						}
+						BigDecimal totalMoney = BigDecimal.ZERO;
+						order.setNumberRows(shoppingCartList.size());//行数
+						//明细总数量
+						order.setGoodsTotalNum(shoppingCartList.stream().map(PjShoppingCart::getGoodsNum).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add));
+
+						//明细总金额
+						totalMoney = shoppingCartList.stream().reduce(BigDecimal.ZERO, (x, y) -> {
+							return x.add(y.getGoodsNum().multiply(y.getPrice()));
+						}, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
+
+						order.setSalesAmount(totalMoney);
+						order.setTotalMoney(totalMoney);
+
+						if (order.getGoodsTotalNum().compareTo(new BigDecimal(1)) == 0) {
+							//只有一条明细加5元运费
+							totalMoney = totalMoney.add(new BigDecimal(5));
+							order.setTotalMoney(totalMoney);
+							order.setFreight(new BigDecimal(5));
+						}
+						amount = amount.add(totalMoney);
+						order.setPaymentDate(new Date());
+						order.setActualPaymentStatus(2);
+						order.setPaymentAmountTl(totalMoney);
+						order.setStatus(OrderTypeEnum.XSDQR.getType());
+						order.setXcxStatus(OrderTypeEnum.XSDFH.getType());
+						order.setSharedCompanyId(shoppingCartList.get(0).getSharedCompanyId());
+						order.setSharedCompanyName(shoppingCartList.get(0).getSharedCompanyName());
+						corpsDesc.setLimitAmount(corpsDesc.getLimitAmount().subtract(totalMoney));
+					}
+					if (goodsName.length() > 0) {
+						order.setGoodsNameJoin(goodsName.substring(0, goodsName.length() - 1));
+					}
+					if (shortcutJoin.length() > 0) {
+						order.setShortcutJoin(shortcutJoin.substring(0, shortcutJoin.length() - 1));
+					}
+					order.setPayType(payType);
+					pjOrderList.add(order);
+				}
+				i++;
+			}
+			orderService.updateBatchById(pjOrderList);
+			corpsDescService.updateById(corpsDesc);
+			for (PjOrder item : pjOrderList) {
+				LocalDateTime now = LocalDateTime.now();
+				DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+				String formatted = now.format(formatter);
+				//给角色为财务的人发送消息
+				R<String> clientDeptIds = sysClient.getRoleIds(AuthUtil.getTenantId(), "客服");
+				if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
+					R<List<User>> userList = userClient.listUserByRoleId(Long.valueOf(clientDeptIds.getData()), AuthUtil.getTenantId(), item.getSalesCompanyId());
+					if (userList.isSuccess() && CollectionUtils.isNotEmpty(userList.getData())) {
+						for (User datum : userList.getData()) {
+							//循环发送消息
+							Message sendMessage = new Message();
+							sendMessage.setParameter(item.getId() + "");
+							sendMessage.setUserName("外部用户");
+							sendMessage.setUserId(null);
+							sendMessage.setToUserId(datum.getId());
+							sendMessage.setToUserName(datum.getName());
+							sendMessage.setMessageType(1);
+							sendMessage.setTenantId(AuthUtil.getTenantId());
+							sendMessage.setCreateUser(null);
+							sendMessage.setCreateTime(new Date());
+							sendMessage.setUrl("/tirePartsMall/salesManagement/saleOrder/index");
+							sendMessage.setPageLabel("销售订单");
+							sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
+							sendMessage.setMessageBody("您有新的外部销售订单请及时处理!单号:" + item.getOrdNo() + "时间:" + formatted);
+							R save = messageClient.save(sendMessage);
+							System.out.println("发送结果:" + save);
+							if (!save.isSuccess()) {
+								throw new SecurityException("发送消息失败");
+							}
+						}
+					}
+				}
+				if (ObjectUtils.isNotNull(item.getSalerId())) {
+					Message sendMessage = new Message();
+					sendMessage.setParameter(item.getId() + "");
+					sendMessage.setUserName("外部用户");
+					sendMessage.setUserId(null);
+					sendMessage.setToUserId(item.getSalerId());
+					sendMessage.setToUserName(item.getSalerName());
+					sendMessage.setMessageType(1);
+					sendMessage.setTenantId(AuthUtil.getTenantId());
+					sendMessage.setCreateUser(null);
+					sendMessage.setCreateTime(new Date());
+					sendMessage.setUrl("/tirePartsMall/salesManagement/saleOrder/index");
+					sendMessage.setPageLabel("销售订单");
+					sendMessage.setPageStatus("this.$store.getters.domSaleStatus");
+					sendMessage.setMessageBody("您有新的外部销售订单请及时处理!单号:" + item.getOrdNo() + "时间:" + formatted);
+					R save = messageClient.save(sendMessage);
+					System.out.println("发送结果:" + save);
+					if (!save.isSuccess()) {
+						throw new SecurityException("发送消息失败");
+					}
+				}
+			}
+			return R.data("操作成功");
+		} else {
+			throw new RuntimeException("请选择需要结算的商品");
+		}
+	}
+
 }

+ 20 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/controller/StockDescController.java

@@ -234,6 +234,26 @@ public class StockDescController extends BladeController {
 	}
 
 	/**
+	 * 获取上架管理所需库存
+	 */
+	@GetMapping("/groundingListZero")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入stockDesc")
+	public R<IPage<PjStockDesc>> groundingListZero(PjStockDesc stockDesc, Query query) {
+		List<PjProductLaunch> pjProductLaunchList = productLaunchService.list(new LambdaQueryWrapper<PjProductLaunch>()
+			.eq(PjProductLaunch::getIsDeleted, 0)
+			.eq(PjProductLaunch::getBillType, 0)
+			.eq(PjProductLaunch::getSalesCompanyId, AuthUtil.getDeptId()));
+		List<Long> ids = pjProductLaunchList.stream().map(PjProductLaunch::getGoodsId).distinct().collect(Collectors.toList());
+		if (ObjectUtils.isNotNull(ids) && !ids.isEmpty()) {
+			stockDesc.setGoodsIds(ids);
+		}
+		stockDesc.setSalesCompanyIds(AuthUtil.getDeptId());
+		IPage<PjStockDesc> pages = stockDescService.selectStockDescPageZero(Condition.getPage(query), stockDesc);
+		return R.data(pages);
+	}
+
+	/**
 	 * 自定义分页 配件批发库存表
 	 */
 	@GetMapping("/page")

+ 1 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.java

@@ -48,4 +48,5 @@ public interface StockDescMapper extends BaseMapper<PjStockDesc> {
 	 */
 	List<PjStockDesc> getStockList(PjStockDesc stockDesc);
 
+	List<PjStockDesc> selectStockDescPageZero(IPage<PjStockDesc> page, @Param("stockDesc")PjStockDesc stockDesc);
 }

+ 36 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/mapper/StockDescMapper.xml

@@ -147,5 +147,41 @@
         GROUP BY
             goods_id
     </select>
+    <select id="selectStockDescPageZero" resultType="org.springblade.salesPart.entity.PjStockDesc">
+        SELECT
+        *
+        FROM pjpf_goods_desc
+        <where>
+            is_deleted = 0
+            <if test='stockDesc.cname != null and stockDesc.cname != ""'>
+                and cname like CONCAT(CONCAT('%', #{stockDesc.cname}), '%')
+            </if>
+            <if test='stockDesc.code != null and stockDesc.code != ""'>
+                and code like CONCAT(CONCAT('%', #{stockDesc.code}), '%')
+            </if>
+            <if test='stockDesc.salesCompanyIds != null'>
+                and find_in_set(sales_company_id,#{stockDesc.salesCompanyIds})
+            </if>
+            <if test='stockDesc.brandId != null'>
+                and brand_id = #{stockDesc.brandId}
+            </if>
+            <if test='stockDesc.goodsTypeId != null'>
+                and goods_type_id = #{stockDesc.goodsTypeId}
+            </if>
+            <if test='stockDesc.typeno != null and stockDesc.typeno != ""'>
+                and specification_and_model like CONCAT(CONCAT('%', #{stockDesc.typeno}), '%')
+            </if>
+            <if test='stockDesc.goodsIds != null and stockDesc.goodsIds'>
+                and id not IN
+                <foreach collection="stockDesc.goodsIds" item="ids" index="index" open="(" close=")" separator=",">
+                    #{ids}
+                </foreach>
+            </if>
+        </where>
+        GROUP BY
+        goods_id
+        order By
+        create_time
+    </select>
 
 </mapper>

+ 1 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/service/IStockDescService.java

@@ -56,4 +56,5 @@ public interface IStockDescService extends IService<PjStockDesc> {
 
 	R updateBatchByIdNew(List<PjStockDesc> pjStockDescArrayList);
 
+	IPage<PjStockDesc> selectStockDescPageZero(IPage<PjStockDesc> page, PjStockDesc stockDesc);
 }

+ 5 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/stock/service/impl/StockDescServiceImpl.java

@@ -124,4 +124,9 @@ public class StockDescServiceImpl extends ServiceImpl<StockDescMapper, PjStockDe
 		return R.success("操作成功");
 	}
 
+	@Override
+	public IPage<PjStockDesc> selectStockDescPageZero(IPage<PjStockDesc> page, PjStockDesc stockDesc) {
+		return page.setRecords(baseMapper.selectStockDescPageZero(page, stockDesc));
+	}
+
 }

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

@@ -296,6 +296,16 @@ public class UserClient implements IUserClient {
 		service.updateBatchById(users);
 	}
 
+	@Override
+	public List<User> selectListNotTenantId(String tenantId, String ids) {
+		return service.selectListNotTenantId(tenantId,ids);
+	}
+
+	@Override
+	public void updateByIdPointsBalance(List<User> users) {
+		service.updateByIdPointsBalance(users);
+	}
+
 	/**
 	 * 获取用户
 	 * @param user

+ 7 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Param;
+import org.springblade.core.tenant.annotation.TenantIgnore;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.excel.UserExcel;
 
@@ -83,4 +84,10 @@ public interface UserMapper extends BaseMapper<User> {
 	 * @return
 	 */
 	List<User> selectUserIds(@Param("users") List<Long> users);
+
+	@TenantIgnore
+	List<User> selectListNotTenantId(@Param("tenantId")String tenantId, @Param("ids")String ids);
+
+	@TenantIgnore
+    void updateByIdPointsBalance(@Param("users")User users);
 }

+ 13 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@@ -27,6 +27,14 @@
         <result column="post_id" property="postId"/>
         <result column="working_status" property="workingStatus"/>
     </resultMap>
+    <update id="updateByIdPointsBalance" parameterType="org.springblade.system.user.entity.User">
+        update blade_user
+        set id = #{users.id},
+        <if test="users.pointsBalance != null">
+            points_balance = #{users.pointsBalance}
+        </if>
+        where id = #{users.id}
+    </update>
 
     <select id="selectUserPage" resultMap="userResultMap">
         select * from blade_user where is_deleted = 0
@@ -114,5 +122,10 @@
             </foreach>
             )
     </select>
+    <select id="selectListNotTenantId" resultType="org.springblade.system.user.entity.User">
+        select * from blade_user where is_deleted = 0
+                                   and tenant_id = #{tenantId}
+                                   and find_in_set(id, #{ids})
+    </select>
 
 </mapper>

+ 4 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/service/IUserService.java

@@ -240,4 +240,8 @@ public interface IUserService extends BaseService<User> {
 	List<User> selectUserIds(String userIds);
 
 	UserInfo userInfoByAppId(String tenantId, String account, UserEnum of, String appId);
+
+    List<User> selectListNotTenantId(String tenantId, String ids);
+
+	void updateByIdPointsBalance(List<User> users);
 }

+ 12 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -499,6 +499,18 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 		return buildUserInfo(user, userEnum);
 	}
 
+	@Override
+	public List<User> selectListNotTenantId(String tenantId, String ids) {
+		return baseMapper.selectListNotTenantId(tenantId, ids);
+	}
+
+	@Override
+	public void updateByIdPointsBalance(List<User> users) {
+		for (User item : users) {
+			baseMapper.updateByIdPointsBalance(item);
+		}
+	}
+
 	/**
 	 * 查询顶级部门ID
 	 */