Explorar o código

易车配轮胎平台app相关接口

liyuan hai 4 días
pai
achega
14a49016bc
Modificáronse 29 ficheiros con 1320 adicións e 11 borrados
  1. 3 0
      blade-common/src/main/java/org/springblade/common/constant/PlatformConstant.java
  2. 22 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/feign/ICorpsDescClient.java
  3. 57 0
      blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/AppRegisterCorpVO.java
  4. 7 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/entity/PjCorpsDesc.java
  5. 26 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/feign/IPJCorpClient.java
  6. 114 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/dto/PlatformAppGoodsDTO.java
  7. 113 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/dto/PlatformAppGoodsDetailDTO.java
  8. 68 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/dto/PlatformUserInfoDTO.java
  9. 39 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/entity/TireUserCompany.java
  10. 34 0
      blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/vo/PlatformAppGoodsSelectVO.java
  11. 11 0
      blade-service-api/blade-user-api/src/main/java/org/springblade/system/user/feign/IUserClient.java
  12. 6 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java
  13. 27 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java
  14. 9 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsDescService.java
  15. 42 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java
  16. 3 3
      blade-service/blade-pay/src/main/java/org/springblade/pay/tonglianPayment/service/impl/PaymentServiceImpl.java
  17. 29 2
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/corps/fegin/PJCorprClient.java
  18. 41 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/controller/PlatformGoodsController.java
  19. 58 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/mapper/PlatformGoodsMapper.java
  20. 298 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/mapper/PlatformGoodsMapper.xml
  21. 23 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/mapper/TireUserCompanyMapper.java
  22. 22 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/mapper/TireUserCompanyMapper.xml
  23. 42 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/service/IPlatformGoodsService.java
  24. 132 0
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/service/impl/PlatformGoodsServiceImpl.java
  25. 1 3
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java
  26. 39 3
      blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/util/WxParamUtil.java
  27. 6 0
      blade-service/blade-user/pom.xml
  28. 7 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/feign/UserClient.java
  29. 41 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

+ 3 - 0
blade-common/src/main/java/org/springblade/common/constant/PlatformConstant.java

@@ -10,6 +10,9 @@ public interface PlatformConstant {
 	String PLATFORM_CODE = "941197";
 
 
+	String CENTER_WAREHOUSE_CODE = "147149";
+
+
 	String PLATFORM_USER_ROLE = "2029842545323802625";
 
 	String PLATFORM_USER_DEPT = "2029845881653559297";

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

@@ -54,6 +54,18 @@ public interface ICorpsDescClient {
 	String REVOKE_UPDATE_INTEGRAL = API_PREFIX + "/revokeUpdateCorps";
 
 	String GET_CORP_LIST_BY_CORP_NAME = API_PREFIX + "/getCorpListByCorpName";
+
+	String INSERT_CORPS_DATA_BY_USER = API_PREFIX + "/insertCorpsDataByUser";
+
+
+
+
+
+
+
+
+
+
 	@PostMapping(CORPS_UPDATE)
 	R corpsUpdate(@RequestBody CorpsDesc corpsDesc);
 
@@ -224,4 +236,14 @@ public interface ICorpsDescClient {
 
 	@GetMapping(GET_CORP_LIST_BY_CORP_NAME)
 	R<List<CorpsDesc>> getCorpListByCorpName(@RequestParam("corpName") String corpName);
+
+
+	/**
+	 * 插入客户信息
+	 *
+	 * @param insertPlatformCorpsDesc 平台用户信息
+	 * @return 结果
+	 */
+	@PostMapping(INSERT_CORPS_DATA_BY_USER)
+	boolean insertCorpsDataByUser(@RequestBody CorpsDesc insertPlatformCorpsDesc);
 }

+ 57 - 0
blade-service-api/blade-client-api/src/main/java/org/springblade/client/vo/AppRegisterCorpVO.java

@@ -0,0 +1,57 @@
+package org.springblade.client.vo;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+
+/**
+ * @author Rain
+ */
+@Data
+public class AppRegisterCorpVO {
+
+
+	/**
+	 * 店铺名称
+	 */
+	@NotBlank(message = "店铺名称不能为空")
+	@Size(min = 2, max = 50, message = "店铺名称长度必须在 2-50 个字符之间")
+	private String storeName;
+
+	/**
+	 * 联系人
+	 */
+	@NotBlank(message = "联系人不能为空")
+	private String contact;
+
+	/**
+	 * 手机号
+	 */
+	@NotBlank(message = "手机号不能为空")
+	@Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号格式不正确")
+	private String mobile;
+
+	/**
+	 * 验证码
+	 */
+	@NotBlank(message = "验证码不能为空")
+	private String smsCode;
+
+	/**
+	 * 地区
+	 */
+	@NotBlank(message = "地区不能为空")
+	private String region;
+
+	/**
+	 *  地址
+	 */
+	@NotBlank(message = "地址不能为空")
+	private String address;
+
+
+
+
+}

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

@@ -396,4 +396,11 @@ public class PjCorpsDesc implements Serializable {
 	@TableField(exist = false)
 	private Long userId;
 
+
+	/**
+	 * 联系人
+	 */
+	@TableField(exist = false)
+	private PjCorpsAttn pjCorpsAttn;
+
 }

+ 26 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/feign/IPJCorpClient.java

@@ -5,6 +5,7 @@ import org.springblade.salesPart.entity.PjCorpsDesc;
 import org.springblade.salesPart.entity.PjGoodsDesc;
 import org.springblade.salesPart.entity.PjGoodsType;
 import org.springblade.salesPart.entity.PjOrder;
+import org.springblade.salesPart.platform.entity.TireUserCompany;
 import org.springblade.salesPart.vo.PayRecoveredBalanceVo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -39,6 +40,10 @@ public interface IPJCorpClient {
 
 	String SELECT_GOODS_BY_CODE_AND_TENANT_ID = API_PREFIX + "/selectGoodsByCodeAndTenantId";
 
+	String GET_PJ_CORP_DATA_BY_USER = API_PREFIX + "/getPjCorpDataByUser";
+
+	String INSERT_USER_COMPANY_LIST = API_PREFIX + "/insertUserCompanyList";
+
 	/**
 	 * 根据id查询订单
 	 *
@@ -94,4 +99,25 @@ public interface IPJCorpClient {
 	 */
 	@PostMapping(SELECT_GOODS_BY_CODE_AND_TENANT_ID)
 	List<PjGoodsDesc> selectGoodsByCodeAndTenantId(@RequestParam("tenantId") String tenantId, @RequestParam("codesList") List<String> codesList);
+
+
+	/**
+	 * 根据用户id查询客户信息
+	 *
+	 * @param id 用户id
+	 * @param tenantId 租户id
+	 * @param phone 电话
+	 * @return 结果
+	 */
+	@PostMapping(GET_PJ_CORP_DATA_BY_USER)
+	PjCorpsDesc getPjCorpDataByUser(@RequestParam("id") Long id, @RequestParam("tenantId") String tenantId, @RequestParam("phone") String phone);
+
+	/**
+	 * 批量插入用户公司
+	 *
+	 * @param userCompanyList 公司列表
+	 * @return 插入结果
+	 */
+	@PostMapping(INSERT_USER_COMPANY_LIST)
+	boolean insertUserCompanyList(@RequestBody List<TireUserCompany> userCompanyList);
 }

+ 114 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/dto/PlatformAppGoodsDTO.java

@@ -0,0 +1,114 @@
+package org.springblade.salesPart.platform.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author Rain
+ */
+@Data
+public class PlatformAppGoodsDTO {
+
+
+	/**
+	 * 主键ID
+	 */
+	private Long id;
+
+	/**
+	 * 公司ID
+	 */
+	private Long salesCompanyId;
+
+	/**
+	 * 公司名称
+	 */
+	private String salesCompanyName;
+
+	/**
+	 * 商品名称
+	 */
+	private String cname;
+
+	/**
+	 * 规格型号
+	 */
+	private String specificationAndModel;
+
+	/**
+	 * 库存
+	 */
+	private Long inventory;
+
+	/**
+	 * 商品ID
+	 */
+	private Long goodsId;
+
+	/**
+	 * 价格一
+	 */
+	private BigDecimal priceOne;
+
+	/**
+	 * 价格二
+	 */
+	private BigDecimal priceTwo;
+
+	/**
+	 * 价格三
+	 */
+	private BigDecimal priceThree;
+
+	/**
+	 * 价格四
+	 */
+	private BigDecimal priceFour;
+
+	/**
+	 * 品牌ID
+	 */
+	private Long brandId;
+
+	/**
+	 * 品牌名称
+	 */
+	private String brandName;
+
+	/**
+	 * 品牌项
+	 */
+	private String brandItem;
+
+	/**
+	 * 产地
+	 */
+	private String placeProduction;
+
+	/**
+	 * 商品编码
+	 */
+	private String code;
+
+	/**
+	 * 租户ID
+	 */
+	private String tenantId;
+
+	/**
+	 * 租户名称
+	 */
+	private String tenantName;
+
+	/**
+	 * 图片
+	 */
+	private String url;
+
+	/**
+	 * 建议零售价
+	 */
+	private BigDecimal suggestedRetailPrice;
+
+}

+ 113 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/dto/PlatformAppGoodsDetailDTO.java

@@ -0,0 +1,113 @@
+package org.springblade.salesPart.platform.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+@Data
+public class PlatformAppGoodsDetailDTO {
+
+	/**
+	 * 主键id 中心仓为库存id其他仓为上架id
+	 */
+	private Long id;
+
+	/**
+	 * 租户 ID
+	 */
+	private String tenantId;
+
+	/**
+	 * 商品中文名称
+	 */
+	private String cname;
+
+	/**
+	 * 品牌 ID
+	 */
+	private Long brandId;
+
+	/**
+	 * 规格型号
+	 */
+	private String specificationAndModel;
+
+	/**
+	 * 花纹
+	 */
+	private String brandItem;
+
+	/**
+	 * 产地
+	 */
+	private String placeProduction;
+
+	/**
+	 * 是否防爆(0-否, 1-是)
+	 */
+	private Integer explosionProof;
+
+	/**
+	 * 是否原厂(0-否, 1-是)
+	 */
+	private Integer originalFactory;
+
+	/**
+	 * 是否自恢复(0-否, 1-是)
+	 */
+	private Integer selfRecovery;
+
+	/**
+	 * 品牌名称
+	 */
+	private String brandName;
+
+	/**
+	 * 最高/最新成交价(取自订单项中的 MAX(price))
+	 */
+	private BigDecimal price;
+
+	/**
+	 * 总库存(来自 center_stock_desc 的 balance_quantity 求和)
+	 */
+	private Long inventory;
+
+	/**
+	 * 商品主图 URL
+	 */
+	private List<String> mainImageUrl;
+
+
+	/**
+	 * 商品详情图片 URL
+	 */
+	private List<String> detailsImageUrl;
+
+	/**
+	 * 建议零售价
+	 */
+	private BigDecimal suggestedRetailPrice;
+
+	/**
+	 * 商品 ID
+	 */
+	private Long goodsId;
+
+	/**
+	 * 租户名称
+	 */
+	private String tenantName;
+
+	/**
+	 * 租户头像
+	 */
+	private String tenantAvatar;
+
+
+
+
+}

+ 68 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/dto/PlatformUserInfoDTO.java

@@ -0,0 +1,68 @@
+package org.springblade.salesPart.platform.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author Rain
+ */
+@Data
+public class PlatformUserInfoDTO {
+
+	/**
+	 * 用户id
+	 */
+	private Long id;
+
+	/**
+	 * 昵称
+	 */
+	private String name;
+	/**
+	 * 真名
+	 */
+	private String realName;
+
+	/**
+	 * 头像
+	 */
+	private String avatar;
+
+	/**
+	 * 手机
+	 */
+	private String phone;
+
+	/**
+	 * 仓库名称id
+	 */
+	private String storageId;
+
+	/**
+	 * 仓库名称
+	 */
+	private String storageName;
+
+
+	/**
+	 * 积分
+	 */
+	private BigDecimal pointsBalance;
+
+	/**
+	 * 门店id
+	 */
+	private Long shopId;
+
+	/**
+	 * 门店名称
+	 */
+	private String shopName;
+
+	/**
+	 * 余额
+	 */
+	private BigDecimal recoveredBalance;
+
+}

+ 39 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/entity/TireUserCompany.java

@@ -0,0 +1,39 @@
+package org.springblade.salesPart.platform.entity;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 用户与公司关联关系实体类
+ * 对应数据库表:tire_user_company
+ * @author Rain
+ */
+@Data
+public class TireUserCompany {
+
+	/**
+	 * 主键ID
+	 */
+	private Long id;
+
+	/**
+	 * 平台用户ID
+	 */
+	private Long platformUserId;
+
+	/**
+	 * 所属仓库租户(tenant ID)
+	 */
+	private String companyTenantId;
+
+	/**
+	 * 所属仓库用户ID
+	 */
+	private Long companyUserId;
+
+	/**
+	 * 创建时间
+	 */
+	private Date createTime;
+}

+ 34 - 0
blade-service-api/blade-sales-part-api/src/main/java/org/springblade/salesPart/platform/vo/PlatformAppGoodsSelectVO.java

@@ -0,0 +1,34 @@
+package org.springblade.salesPart.platform.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+@Data
+public class PlatformAppGoodsSelectVO {
+
+
+	private List<String> userCompanyList;
+
+	private String tireName;
+
+	/**
+	 * 是否防爆(0-否, 1-是)
+	 */
+	private Integer explosionProof;
+
+	/**
+	 * 是否静音棉(0-否, 1-是)
+	 */
+	private Integer originalFactory;
+
+	/**
+	 * 是否自恢复(0-否, 1-是)
+	 */
+	private Integer selfRecovery;
+
+
+}

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

@@ -85,6 +85,8 @@ public interface IUserClient {
 
 	String GET_USER_INFO_BY_PHONE =  "/getUserInfoByPhone";
 
+	String GET_PLATFORM_USER_BY_PHONE =  "/getPlatformUserByPhone";
+
 	@GetMapping(LIST_USER_BY_ROLE_ID)
 	R<List<User>> listUserByRoleId(@RequestParam("roleId") String roleId, @RequestParam(value = "tenantId", required = false) String tenantId,
 								   @RequestParam(value = "salesCompanyId", required = false) String salesCompanyId,
@@ -340,4 +342,13 @@ public interface IUserClient {
 	 */
 	@PostMapping(GET_USER_INFO_BY_PHONE)
     UserInfo getUserInfoByPhone(@RequestParam("phone") String phone);
+
+	/**
+	 * 根据手机号获取用户信息
+	 *
+	 * @param mobile 手机号
+	 * @return User
+	 */
+	@GetMapping(GET_PLATFORM_USER_BY_PHONE)
+	User getPlatformUserByPhone(@RequestParam("mobile")  String mobile);
 }

+ 6 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsDescController.java

@@ -19,6 +19,7 @@ import org.springblade.client.corps.service.impl.CorpsAddrServiceImpl;
 import org.springblade.client.corps.service.impl.CorpsAttnServiceImpl;
 import org.springblade.client.entity.*;
 import org.springblade.client.feign.IRedisClient;
+import org.springblade.client.vo.AppRegisterCorpVO;
 import org.springblade.client.vo.CorpListVo;
 import org.springblade.client.vo.CorpsDescVO;
 import org.springblade.core.boot.ctrl.BladeController;
@@ -1147,4 +1148,9 @@ public class CorpsDescController extends BladeController {
 		return resList;
 	}
 
+	@PostMapping("/appRegisterSubmit")
+	public R appRegisterSubmit(@RequestBody @Valid AppRegisterCorpVO appRegisterCorpVO) {
+		return corpsDescService.appRegisterSubmit(appRegisterCorpVO);
+	}
+
 }

+ 27 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/feign/CorpsDescClient.java

@@ -17,6 +17,7 @@ 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.vo.CorpsDescVO;
+import org.springblade.common.constant.PlatformConstant;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
@@ -29,10 +30,12 @@ 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;
+import org.springblade.salesPart.entity.PjCorpsAttn;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -45,6 +48,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+/**
+ * @author Rain
+ */
 @NonDS
 @ApiIgnore()
 @RestController
@@ -435,4 +441,25 @@ public class CorpsDescClient implements ICorpsDescClient {
 		return R.data(service.list(lambdaQueryWrapper));
 	}
 
+	@Override
+	@TenantIgnore
+	@Transactional(rollbackFor = Exception.class)
+	public boolean insertCorpsDataByUser(CorpsDesc insertPlatformCorpsDesc) {
+		boolean insertCount = service.save(insertPlatformCorpsDesc);
+		if (!insertCount) {
+			return false;
+		}
+		CorpsAttn corpsAttn = new CorpsAttn();
+		corpsAttn.setCname(insertPlatformCorpsDesc.getAttn());
+		corpsAttn.setTel(insertPlatformCorpsDesc.getTel());
+		corpsAttn.setPid(insertPlatformCorpsDesc.getId());
+		corpsAttn.setCode(insertPlatformCorpsDesc.getCode());
+		corpsAttn.setTenantId(PlatformConstant.PLATFORM_CODE);
+		boolean insertAttn = corpsAttnService.save(corpsAttn);
+		if (!insertAttn) {
+			throw new RuntimeException("注册失败,请稍后重试");
+		}
+		return true;
+	}
+
 }

+ 9 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/ICorpsDescService.java

@@ -24,6 +24,7 @@ import org.springblade.client.corps.excel.*;
 import org.springblade.client.dto.CorpsDescDto;
 import org.springblade.client.entity.CorpsAddr;
 import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.vo.AppRegisterCorpVO;
 import org.springblade.client.vo.CorpsDescVO;
 import org.springblade.core.tool.api.R;
 
@@ -230,4 +231,12 @@ public interface ICorpsDescService extends IService<CorpsDesc> {
 	R submitWeb(CorpsDesc corpsDesc);
 
 	List<Map<String,Object>> getCorpListAll();
+
+	/**
+	 * app注册提交
+	 *
+	 * @param appRegisterCorpVO app注册提交参数
+	 * @return app提交结果
+	 */
+	R appRegisterSubmit(AppRegisterCorpVO appRegisterCorpVO);
 }

+ 42 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java

@@ -17,7 +17,9 @@ import org.springblade.client.corps.mapper.CorpsTypeMapper;
 import org.springblade.client.corps.service.ICorpsDescService;
 import org.springblade.client.dto.CorpsDescDto;
 import org.springblade.client.entity.*;
+import org.springblade.client.vo.AppRegisterCorpVO;
 import org.springblade.client.vo.CorpsDescVO;
+import org.springblade.common.constant.PlatformConstant;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
@@ -1161,6 +1163,43 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R appRegisterSubmit(AppRegisterCorpVO appRegisterCorpVO) {
+		CorpsDesc exist = baseMapper.selectOne(new LambdaQueryWrapper<CorpsDesc>().eq(CorpsDesc::getIsDeleted, 0)
+			.eq(CorpsDesc::getTenantId, PlatformConstant.PLATFORM_CODE).and(wrapper -> wrapper.eq(CorpsDesc::getCname, appRegisterCorpVO.getStoreName())
+				.or().eq(CorpsDesc::getTel, appRegisterCorpVO.getMobile())));
+		if (Objects.nonNull(exist)) {
+			return R.fail(exist.getCname().equals(appRegisterCorpVO.getStoreName()) ? "该店铺名称已被使用" : "该手机号已注册");
+		}
+		User userExist = userClient.getPlatformUserByPhone(appRegisterCorpVO.getMobile());
+		if (Objects.nonNull(userExist)) {
+			return R.fail("该手机号已在平台其他门店下注册");
+		}
+		// 先不做验证码处理
+		CorpsDesc appCorp = new CorpsDesc();
+		appCorp.setCname(appRegisterCorpVO.getStoreName());
+		appCorp.setTel(appRegisterCorpVO.getMobile());
+		appCorp.setAttn(appRegisterCorpVO.getContact());
+		appCorp.setTenantId(PlatformConstant.PLATFORM_CODE);
+		appCorp.setCode("请设置编码");
+		int count =  baseMapper.insert(appCorp);
+		if (count <= 0) {
+			return R.fail("注册失败,请稍后重试");
+		}
+		CorpsAttn corpsAttn = new CorpsAttn();
+		corpsAttn.setCname(appRegisterCorpVO.getContact());
+		corpsAttn.setTel(appRegisterCorpVO.getMobile());
+		corpsAttn.setPid(appCorp.getId());
+		corpsAttn.setCode(appCorp.getCode());
+		corpsAttn.setTenantId(PlatformConstant.PLATFORM_CODE);
+		boolean insertAttnCount = corpsAttnService.save(corpsAttn);
+		if (!insertAttnCount) {
+			throw new RuntimeException("注册失败,请稍后重试");
+		}
+		return R.success("信息提交成功,请等待审核");
+	}
+
+	@Override
 	public IPage<CorpsDescDto> selectPartsCorpsDescPage(IPage<CorpsDescDto> page, CorpsDescDto corpsDescDto) {
 		//获取客户子类别
 		if (StringUtils.isNotBlank(corpsDescDto.getCorpsTypeId())) {
@@ -1572,4 +1611,7 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 	}
 
 
+
+
+
 }

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

@@ -512,7 +512,7 @@ public class PaymentServiceImpl implements IPaymentService {
 							DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 							String formatted = now.format(formatter);
 							//给角色为财务的人发送消息
-							R<String> clientDeptIds = sysClient.getRoleIds(parametersDetails.getTenantId(), "客服");
+							R<String> clientDeptIds = sysClient.getRoleIds(parametersDetails.getTenantId(), "客服,老板");
 							if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
 								String status = sysClient.paramServiceValue( parametersDetails.getTenantId(),"whether.branch.management");
 								Long storage_id = null;
@@ -952,7 +952,7 @@ public class PaymentServiceImpl implements IPaymentService {
 							pushAppMsgVo.setTitle(AppPushPathEnum.ORDER_NOTIFICATION.title);
 							pushAppMsgVo.setContent(String.format(CommonEnum.ORDER_CONTENT_MSG.info, selectOrder.getOrdNo(), selectOrder.getCustomerName(), selectOrder.getSalerName(), "轮胎数量:" + selectOrder.getGoodsTotalNum() + ",轮胎金额:" + selectOrder.getTotalMoney()));
 							pushAppMsgVo.setOrderId(selectOrder.getId());
-							R<String> clientDeptIds = sysClient.getRoleIds(parametersDetails.getTenantId(), "客服");
+							R<String> clientDeptIds = sysClient.getRoleIds(parametersDetails.getTenantId(), "客服,老板");
 							if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
 								String status = sysClient.paramServiceValue( parametersDetails.getTenantId(),"whether.branch.management");
 								Long storage_id = null;
@@ -1193,7 +1193,7 @@ public class PaymentServiceImpl implements IPaymentService {
 							DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 							String formatted = now.format(formatter);
 							//给角色为财务的人发送消息
-							R<String> clientDeptIds = sysClient.getRoleIds(parametersDetails.getTenantId(), "客服");
+							R<String> clientDeptIds = sysClient.getRoleIds(parametersDetails.getTenantId(), "客服,老板");
 							if (clientDeptIds.isSuccess() && StringUtils.isNotBlank(clientDeptIds.getData())) {
 								System.out.println("所属公司id:" + selectOrder.getSalesCompanyId());
 								System.out.println("租户号:" + parametersDetails.getTenantId());

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

@@ -1,11 +1,11 @@
 package org.springblade.salesPart.corps.fegin;
 
+import cn.hutool.core.util.IdUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import lombok.AllArgsConstructor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springblade.common.enums.NumberEnum;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tenant.annotation.TenantIgnore;
@@ -18,7 +18,8 @@ import org.springblade.salesPart.goods.mapper.GoodsDescMapper;
 import org.springblade.salesPart.goods.service.IGoodsTypeService;
 import org.springblade.salesPart.order.mapper.OrderItemsMapper;
 import org.springblade.salesPart.order.service.IPjIntegralDetailService;
-import org.springblade.salesPart.recycling.entity.GreenRecyclingRecord;
+import org.springblade.salesPart.platform.entity.TireUserCompany;
+import org.springblade.salesPart.platform.mapper.TireUserCompanyMapper;
 import org.springblade.salesPart.recycling.service.IGreenRecyclingRecordService;
 import org.springblade.salesPart.util.WxParamUtil;
 import org.springblade.salesPart.vo.PayRecoveredBalanceVo;
@@ -51,6 +52,8 @@ public class PJCorprClient implements IPJCorpClient {
 
 	private final IGoodsTypeService goodsTypeService;
 
+	private final TireUserCompanyMapper userCompanyMapper;
+
 	private final Logger logger = LoggerFactory.getLogger(PJCorprClient.class);
 
 
@@ -329,4 +332,28 @@ public class PJCorprClient implements IPJCorpClient {
 		return goodsDescMapper.selectList(new LambdaQueryWrapper<PjGoodsDesc>()
 			.eq(PjGoodsDesc::getTenantId, tenantId).in(PjGoodsDesc::getCode, codesList).eq(PjGoodsDesc::getIsDeleted, 0));
 	}
+
+	@Override
+	@TenantIgnore
+	public PjCorpsDesc getPjCorpDataByUser(Long userId, String tenantId, String phone) {
+		PjCorpsAttn corpsAttn = corpsAttnService.getOne(new LambdaQueryWrapper<PjCorpsAttn>().eq(PjCorpsAttn::getIsDeleted, 0).eq(PjCorpsAttn::getTenantId, tenantId)
+			.eq(PjCorpsAttn::getUserId, userId).eq(PjCorpsAttn::getTel, phone).last("limit 1"));
+		if (Objects.isNull(corpsAttn)) {
+			return null;
+		}
+		PjCorpsDesc corpsDesc = corpsDescMapper.selectOne(new LambdaQueryWrapper<PjCorpsDesc>().eq(PjCorpsDesc::getId, corpsAttn.getPid()).eq(PjCorpsDesc::getTenantId, tenantId)
+			.eq(PjCorpsDesc::getIsDeleted, 0).last("limit 1"));
+		if (Objects.isNull(corpsDesc)) {
+			return null;
+		}
+		corpsDesc.setPjCorpsAttn(corpsAttn);
+		return corpsDesc;
+	}
+
+	@Override
+	public boolean insertUserCompanyList(List<TireUserCompany> userCompanyList) {
+		userCompanyList.forEach(item -> item.setId(IdUtil.getSnowflakeNextId()));
+		int insertCount = userCompanyMapper.insertUserCompanyBatch(userCompanyList);
+		return insertCount > 0;
+	}
 }

+ 41 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/controller/PlatformGoodsController.java

@@ -0,0 +1,41 @@
+package org.springblade.salesPart.platform.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDTO;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDetailDTO;
+import org.springblade.salesPart.platform.service.IPlatformGoodsService;
+import org.springblade.salesPart.platform.vo.PlatformAppGoodsSelectVO;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author Rain
+ */
+@RestController
+@RequestMapping("/platform/goods")
+@AllArgsConstructor
+public class PlatformGoodsController {
+
+
+	private final IPlatformGoodsService platformGoodsService;
+
+
+	@GetMapping("/getPlatformAppGoodsList")
+	public R<IPage<PlatformAppGoodsDTO>> getPlatformAppGoodsList(PlatformAppGoodsSelectVO appGoodsSelectVO, Query query) {
+		return R.data(platformGoodsService.getPlatformAppGoodsList(appGoodsSelectVO, query));
+	}
+
+	@GetMapping("/getPlatformAppGoodsDetail")
+	public R<PlatformAppGoodsDetailDTO> getPlatformAppGoodsDetail(@RequestParam("id") Long id, @RequestParam("tenantId") String tenantId) {
+		return R.data(platformGoodsService.getPlatformAppGoodsDetail(id, tenantId));
+	}
+
+	@PostMapping("/getPlatformUserInfo")
+	public R getPlatformUserInfo() {
+		return platformGoodsService.getPlatformUserInfo();
+	}
+
+
+}

+ 58 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/mapper/PlatformGoodsMapper.java

@@ -0,0 +1,58 @@
+package org.springblade.salesPart.platform.mapper;
+
+import org.apache.ibatis.annotations.Param;
+import org.springblade.salesPart.entity.PjCorpsDesc;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDTO;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDetailDTO;
+import org.springblade.salesPart.platform.vo.PlatformAppGoodsSelectVO;
+import org.springblade.system.entity.Tenant;
+
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+public interface PlatformGoodsMapper {
+
+	/**
+	 * 获取平台商品列表
+	 *
+	 * @param appGoodsSelectVO 查询参数
+	 * @return 结果
+	 */
+	List<PlatformAppGoodsDTO> getPlatformAppGoodsList(PlatformAppGoodsSelectVO appGoodsSelectVO);
+
+
+	/**
+	 * 获取商品详情
+	 *
+	 * @param id 商品id
+	 * @return 结果
+	 */
+	PlatformAppGoodsDetailDTO getCenterWarehouseGoodsDetail(@Param("id") Long id);
+
+	/**
+	 * 获取其他仓库商品详情
+	 *
+	 * @param id      商品id
+	 * @param tenantId 仓库id
+	 * @return 详情
+	 */
+	PlatformAppGoodsDetailDTO getOtherWarehouseGoodsDetail(@Param("id") Long id, @Param("tenantId") String tenantId);
+
+	/**
+	 * 获取租户信息
+	 *
+	 * @param tenantId 仓库id
+	 * @return 仓库信息
+	 */
+	Tenant selectTenantInfo(@Param("tenantId") String tenantId);
+
+	/**
+	 * 获取门店
+	 *
+	 * @param id 用户id
+	 * @return 公司描述
+	 */
+	PjCorpsDesc selectCorpsDescByUserId(@Param("id") Long id);
+}

+ 298 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/mapper/PlatformGoodsMapper.xml

@@ -0,0 +1,298 @@
+<?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">
+<!--suppress ALL -->
+<mapper namespace="org.springblade.salesPart.platform.mapper.PlatformGoodsMapper">
+
+    <resultMap id="BaseResultMap" type="org.springblade.salesPart.platform.entity.TireUserCompany">
+        <id column="id" property="id"/>
+        <result column="platform_user_id" property="platformUserId"/>
+        <result column="company_tenant_id" property="companyTenantId"/>
+        <result column="company_user_id" property="companyUserId"/>
+        <result column="create_time" property="createTime"/>
+    </resultMap>
+
+    <resultMap id="ProductLaunchUnionResultMap" type="org.springblade.salesPart.platform.dto.PlatformAppGoodsDTO">
+        <id property="id" column="id"/>
+        <result property="salesCompanyId" column="sales_company_id"/>
+        <result property="salesCompanyName" column="sales_company_name"/>
+        <result property="cname" column="cname"/>
+        <result property="specificationAndModel" column="specification_and_model"/>
+        <result property="inventory" column="inventory"/>
+        <result property="goodsId" column="goods_id"/>
+        <result property="priceOne" column="price_one"/>
+        <result property="priceTwo" column="price_two"/>
+        <result property="priceThree" column="price_three"/>
+        <result property="priceFour" column="price_four"/>
+        <result property="brandId" column="brand_id"/>
+        <result property="brandName" column="brand_name"/>
+        <result property="brandItem" column="brand_item"/>
+        <result property="placeProduction" column="place_production"/>
+        <result property="code" column="code"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="tenantName" column="tenant_name"/>
+        <result property="suggestedRetailPrice" column="suggested_retail_price"/>
+    </resultMap>
+
+    <resultMap id="PlatformAppGoodsDetailResultMap"
+               type="org.springblade.salesPart.platform.dto.PlatformAppGoodsDetailDTO">
+        <id property="id" column="id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="cname" column="cname"/>
+        <result property="brandId" column="brand_id"/>
+        <result property="specificationAndModel" column="specification_and_model"/>
+        <result property="brandItem" column="brand_item"/>
+        <result property="placeProduction" column="place_production"/>
+        <result property="explosionProof" column="explosion_proof"/>
+        <result property="originalFactory" column="original_factory"/>
+        <result property="selfRecovery" column="self_recovery"/>
+        <result property="brandName" column="brand_name"/>
+        <result property="price" column="price"/>
+        <result property="inventory" column="inventory"/>
+        <result property="firstImageUrl" column="first_image_url"/>
+        <result property="suggestedRetailPrice" column="suggested_retail_price"/>
+        <result property="goodsId" column="goods_id"/>
+    </resultMap>
+
+    <resultMap id="tenantResultMap" type="org.springblade.system.entity.Tenant">
+        <result column="id" property="id"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="tenant_id" property="tenantId"/>
+        <result column="tenant_name" property="tenantName"/>
+        <result column="domain" property="domain"/>
+        <result column="background_url" property="backgroundUrl"/>
+        <result column="linkman" property="linkman"/>
+        <result column="contact_number" property="contactNumber"/>
+        <result column="address" property="address"/>
+        <result column="account_number" property="accountNumber"/>
+        <result column="expire_time" property="expireTime"/>
+        <result column="license_key" property="licenseKey"/>
+        <result column="bill_type" property="billType"/>
+        <result column="terrace" property="terrace"/>
+        <result column="corp_code" property="corpCode"/>
+    </resultMap>
+
+    <resultMap id="corpsDescResultMap" type="org.springblade.salesPart.entity.PjCorpsDesc">
+        <id column="id" property="id"/>
+        <result column="tenant_id" property="tenantId"/>
+        <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="enable_or_not" property="enableOrNot"/>
+        <result column="cname" property="cname"/>
+        <result column="tel" property="tel"/>
+        <result column="delivery_warehouse_id" property="deliveryWarehouseId"/>
+        <result column="delivery_warehouse_name" property="deliveryWarehouseName"/>
+        <result column="price_system" property="priceSystem"/>
+        <result column="corp_type" property="corpType"/>
+        <result column="credit_limit" property="creditLimit"/>
+        <result column="account_period" property="accountPeriod"/>
+        <result column="salesman_id" property="salesmanId"/>
+        <result column="salesman_name" property="salesmanName"/>
+        <result column="sales_company_id" property="salesCompanyId"/>
+        <result column="sales_company_name" property="salesCompanyName"/>
+        <result column="use_credit_limit" property="useCreditLimit"/>
+        <result column="brand_id" property="brandId"/>
+        <result column="brand_name" property="brandName"/>
+        <result column="file_path" property="filePath"/>
+        <result column="longitude" property="longitude"/>
+        <result column="dimension" property="dimension"/>
+        <result column="resource_warehouse" property="resourceWarehouse"/>
+        <result column="recovered_balance" property="recoveredBalance"/>
+    </resultMap>
+
+
+    <select id="getPlatformAppGoodsList" resultMap="ProductLaunchUnionResultMap"
+            parameterType="org.springblade.salesPart.platform.vo.PlatformAppGoodsSelectVO">
+        <if test="userCompanyList != null and userCompanyList.size > 0">
+            select * from (
+            SELECT ppl.id,
+            ppl.sales_company_id,
+            ppl.sales_company_name,
+            ppl.cname,
+            ppl.specification_and_model,
+            ppl.inventory,
+            ppl.goods_id,
+            ppl.price_one,
+            ppl.price_two,
+            ppl.price_three,
+            ppl.price_four,
+            ppl.suggested_retail_price,
+            ppl.brand_id,
+            ppl.brand_name,
+            ppl.brand_item,
+            ppl.place_production,
+            ppl.`code`,
+            ppl.tenant_id,
+            bt.tenant_name
+            FROM pjpf_product_launch ppl
+            INNER JOIN blade_tenant bt ON ppl.tenant_id = bt.tenant_id
+            WHERE ppl.tenant_id IN
+            <foreach collection="userCompanyList" item="company" open="(" close=")" separator=",">
+                #{company}
+            </foreach>
+            AND ppl.is_deleted = 0
+            AND ppl.up_and_down_shelves = 1
+            AND ppl.inventory > 0
+            AND ppl.whether_integral = 0
+            <if test="tireName != null and tireName != ''">
+                AND ppl.cname_int LIKE CONCAT('%', #{tireName}, '%')
+            </if>
+            <if test="explosionProof != null">
+                AND ppl.explosion_proof = #{explosionProof}
+            </if>
+            <if test="originalFactory != null">
+                AND ppl.original_factory = #{originalFactory}
+            </if>
+            <if test="selfRecovery != null">
+                AND ppl.self_recovery = #{selfRecovery}
+            </if>
+            UNION ALL
+        </if>
+        SELECT csd.id,
+        1927195914162761729 AS sales_company_id,
+        '多多易车配济南中心仓' AS sales_company_name,
+        csd.cname,
+        csd.type_no AS specification_and_model,
+        SUM(csd.balance_quantity) AS inventory,
+        csd.goods_id,
+        MAX(copi.price) AS price_one,
+        MAX(copi.price) AS price_two,
+        MAX(copi.price) AS price_three,
+        MAX(copi.price) AS price_four,
+        MAX(copi.price) + 20      AS suggested_retail_price,
+        csd.brand_id,
+        csd.brand_name,
+        csd.brand_item,
+        NULL AS place_production,
+        csd.`code`,
+        csd.tenant_id,
+        '济南仓' AS tenant_name
+        FROM center_order_plan cop
+        INNER JOIN center_order_plan_items copi ON cop.id = copi.pid AND cop.bs_type = 'RP'
+        INNER JOIN center_stock_desc csd ON copi.goods_id = csd.goods_id
+        INNER JOIN pjpf_goods_desc pgd on csd.goods_id = pgd.id and pgd.tenant_id = '147149'
+        WHERE copi.price != 0
+        AND csd.balance_quantity != 0
+        and pgd.enable_or_not = 1
+        <if test="tireName != null and tireName != ''">
+            AND pgd.cname_int LIKE CONCAT('%', #{tireName}, '%')
+        </if>
+        <if test="explosionProof != null">
+            AND pgd.explosion_proof = #{explosionProof}
+        </if>
+        <if test="originalFactory != null">
+            AND pgd.original_factory = #{originalFactory}
+        </if>
+        <if test="selfRecovery != null">
+            AND pgd.self_recovery = #{selfRecovery}
+        </if>
+        GROUP BY
+        csd.id,
+        csd.tenant_id,
+        csd.goods_id,
+        csd.cname,
+        csd.`code`,
+        csd.brand_id,
+        csd.brand_name,
+        csd.dot
+        ) as goods
+        order by goods.inventory desc
+
+
+    </select>
+    <select id="getCenterWarehouseGoodsDetail" resultMap="PlatformAppGoodsDetailResultMap"
+            parameterType="java.lang.Long">
+        SELECT csd.id,
+               pgd.id                    as goods_id,
+               pgd.tenant_id,
+               pgd.cname,
+               pgd.brand_id,
+               pgd.specification_and_model,
+               pgd.brand_item,
+               pgd.place_production,
+               pgd.explosion_proof,
+               pgd.original_factory,
+               pgd.self_recovery,
+               pgd.brand_name,
+               MAX(copi.price)           AS price,
+               MAX(copi.price) + 20      AS suggested_retail_price,
+               SUM(csd.balance_quantity) AS inventory
+        FROM pjpf_goods_desc pgd
+                 INNER JOIN center_stock_desc csd ON pgd.id = csd.goods_id
+                 INNER JOIN center_order_plan_items copi ON pgd.id = copi.goods_id
+        WHERE pgd.enable_or_not = 1
+          AND copi.price != 0
+          AND csd.balance_quantity != 0
+            and csd.id = #{id}
+        GROUP BY
+            csd.id,
+            pgd.id,
+            pgd.tenant_id,
+            pgd.cname,
+            pgd.brand_id,
+            pgd.specification_and_model,
+            pgd.brand_item,
+            pgd.place_production,
+            pgd.explosion_proof,
+            pgd.original_factory,
+            pgd.self_recovery,
+            pgd.brand_name
+    </select>
+    <select id="getOtherWarehouseGoodsDetail" resultMap="PlatformAppGoodsDetailResultMap">
+        SELECT pgd.id        as goods_id,
+               pgd.tenant_id,
+               pgd.cname,
+               pgd.brand_id,
+               pgd.specification_and_model,
+               pgd.brand_item,
+               pgd.place_production,
+               pgd.explosion_proof,
+               pgd.original_factory,
+               pgd.self_recovery,
+               pgd.brand_name,
+               ppl.inventory,
+               ppl.suggested_retail_price,
+               ppl.id,
+               ppl.price_one AS price
+        FROM pjpf_goods_desc pgd
+                 INNER JOIN pjpf_product_launch ppl ON pgd.id = ppl.goods_id
+        WHERE ppl.tenant_id = #{tenantId}
+          and ppl.id = #{id}
+          AND ppl.is_deleted = 0
+          AND ppl.up_and_down_shelves = 1
+          AND ppl.inventory > 0
+          AND ppl.whether_integral = 0
+    </select>
+    <select id="selectTenantInfo" resultMap="tenantResultMap">
+        SELECT id,tenant_id,tenant_name,background_url
+        FROM blade_tenant
+        WHERE tenant_id = #{tenantId}
+    </select>
+    <select id="selectCorpsDescByUserId" resultMap="corpsDescResultMap">
+        SELECT
+            pcd.id,
+            pcd.cname,
+            pcd.points_balance,
+            pcd.recovered_balance
+        FROM
+            pjpf_corps_desc pcd
+                INNER JOIN pjpf_corps_attn pca ON pcd.id = pca.pid
+        WHERE
+            pca.user_id = #{id}
+          AND pcd.is_deleted = 0
+          AND pca.is_deleted = 0
+          AND pcd.enable_or_not = 1
+    </select>
+
+
+</mapper>

+ 23 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/mapper/TireUserCompanyMapper.java

@@ -0,0 +1,23 @@
+package org.springblade.salesPart.platform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.core.tenant.annotation.TenantIgnore;
+import org.springblade.salesPart.platform.entity.TireUserCompany;
+
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+public interface TireUserCompanyMapper extends BaseMapper<TireUserCompany> {
+
+	/**
+	 * 批量插入
+	 *
+	 * @param userCompanyList 参数
+	 * @return 结果
+	 */
+	@TenantIgnore
+	int insertUserCompanyBatch(@Param("userCompanyList") List<TireUserCompany> userCompanyList);
+}

+ 22 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/mapper/TireUserCompanyMapper.xml

@@ -0,0 +1,22 @@
+<?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">
+<!--suppress ALL -->
+<mapper namespace="org.springblade.salesPart.platform.mapper.TireUserCompanyMapper">
+
+    <resultMap id="BaseResultMap" type="org.springblade.salesPart.platform.entity.TireUserCompany">
+        <id column="id" property="id"/>
+        <result column="platform_user_id" property="platformUserId"/>
+        <result column="company_tenant_id" property="companyTenantId"/>
+        <result column="company_user_id" property="companyUserId"/>
+        <result column="create_time" property="createTime"/>
+    </resultMap>
+
+    <insert id="insertUserCompanyBatch">
+        insert into tire_user_company (id, platform_user_id, company_tenant_id, company_user_id) values
+        <foreach collection="userCompanyList" item="item" separator=",">
+            (#{item.id},#{item.platformUserId},#{item.companyTenantId},#{item.companyUserId})
+        </foreach>
+    </insert>
+
+
+</mapper>

+ 42 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/service/IPlatformGoodsService.java

@@ -0,0 +1,42 @@
+package org.springblade.salesPart.platform.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDTO;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDetailDTO;
+import org.springblade.salesPart.platform.vo.PlatformAppGoodsSelectVO;
+
+
+/**
+ * @author Rain
+ */
+public interface IPlatformGoodsService {
+
+
+	/**
+	 * 获取平台商品列表
+	 *
+	 * @param appGoodsSelectVO 查询条件
+	 * @param query            分页
+	 * @return 结果
+	 */
+	IPage<PlatformAppGoodsDTO> getPlatformAppGoodsList(PlatformAppGoodsSelectVO appGoodsSelectVO, Query query);
+
+
+	/**
+	 * 获取平台商品详情
+	 *
+	 * @param id       商品id
+	 * @param tenantId 租户id
+	 * @return 结果
+	 */
+	PlatformAppGoodsDetailDTO getPlatformAppGoodsDetail(Long id, String tenantId);
+
+	/**
+	 * 获取平台用户信息
+	 *
+	 * @return 获取平台用户信息
+	 */
+	R getPlatformUserInfo();
+}

+ 132 - 0
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/platform/service/impl/PlatformGoodsServiceImpl.java

@@ -0,0 +1,132 @@
+package org.springblade.salesPart.platform.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageHelper;
+import lombok.AllArgsConstructor;
+import org.springblade.common.constant.PlatformConstant;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tenant.annotation.TenantIgnore;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springblade.salesPart.entity.PjCorpsDesc;
+import org.springblade.salesPart.entity.PjGoodsFiles;
+import org.springblade.salesPart.goods.mapper.GoodsFilesMapper;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDTO;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDetailDTO;
+import org.springblade.salesPart.platform.dto.PlatformUserInfoDTO;
+import org.springblade.salesPart.platform.entity.TireUserCompany;
+import org.springblade.salesPart.platform.mapper.PlatformGoodsMapper;
+import org.springblade.salesPart.platform.mapper.TireUserCompanyMapper;
+import org.springblade.salesPart.platform.service.IPlatformGoodsService;
+import org.springblade.salesPart.platform.vo.PlatformAppGoodsSelectVO;
+import org.springblade.salesPart.shopping.mapper.ShoppingMallDetailMapper;
+import org.springblade.salesPart.util.WxParamUtil;
+import org.springblade.salesPart.vo.WxAppGoodsImgVo;
+import org.springblade.system.entity.Tenant;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * @author Rain
+ */
+@Service
+@AllArgsConstructor
+public class PlatformGoodsServiceImpl implements IPlatformGoodsService {
+
+	private final PlatformGoodsMapper platformGoodsMapper;
+
+	private final TireUserCompanyMapper tireUserCompanyMapper;
+
+	private final ShoppingMallDetailMapper shoppingMallDetailMapper;
+
+	private final GoodsFilesMapper goodsFilesMapper;
+
+	private final IUserClient userService;
+
+
+
+	@Override
+	@TenantIgnore
+	public IPage<PlatformAppGoodsDTO> getPlatformAppGoodsList(PlatformAppGoodsSelectVO appGoodsSelectVO, Query query) {
+		List<TireUserCompany> userCompanyList = tireUserCompanyMapper.selectList(new LambdaQueryWrapper<TireUserCompany>().eq(TireUserCompany::getPlatformUserId, AuthUtil.getUserId()));
+		if (CollectionUtil.isNotEmpty(userCompanyList)) {
+			appGoodsSelectVO.setUserCompanyList(userCompanyList.stream().map(TireUserCompany::getCompanyTenantId).collect(Collectors.toList()));
+		}
+		PageHelper.startPage(query.getCurrent(), query.getSize());
+		List<PlatformAppGoodsDTO> platformAppGoodsList = platformGoodsMapper.getPlatformAppGoodsList(appGoodsSelectVO);
+		if (CollectionUtil.isNotEmpty(platformAppGoodsList)) {
+			List<Long> ids = platformAppGoodsList.stream().filter(item -> !PlatformConstant.CENTER_WAREHOUSE_CODE.equals(item.getTenantId())).map(PlatformAppGoodsDTO::getId).collect(Collectors.toList());
+			List<Long> brandIds = platformAppGoodsList.stream().filter(item -> !PlatformConstant.CENTER_WAREHOUSE_CODE.equals(item.getTenantId())).map(PlatformAppGoodsDTO::getBrandId).distinct().collect(Collectors.toList());
+			if (CollectionUtil.isNotEmpty(ids)) {
+				// 查询商品的所有图片并根据匹配度与优先级显示
+				List<WxAppGoodsImgVo> wxAppGoodsImgVoList = shoppingMallDetailMapper.selectWxAppGoodsImgVoList(ids, brandIds);
+				WxParamUtil.findPlatformGoodsImg(platformAppGoodsList, wxAppGoodsImgVoList);
+			}
+		}
+		IPage<PlatformAppGoodsDTO> page = new Page<>(query.getCurrent(), query.getSize());
+		page.setRecords(platformAppGoodsList);
+		return page;
+	}
+
+	@Override
+	@TenantIgnore
+	public PlatformAppGoodsDetailDTO getPlatformAppGoodsDetail(Long id, String tenantId) {
+		PlatformAppGoodsDetailDTO  appGoodsDetailDTO;
+		if (PlatformConstant.CENTER_WAREHOUSE_CODE.equals(tenantId)) {
+			// 中心仓
+			appGoodsDetailDTO =  platformGoodsMapper.getCenterWarehouseGoodsDetail(id);
+		} else {
+			appGoodsDetailDTO =  platformGoodsMapper.getOtherWarehouseGoodsDetail(id, tenantId);
+		}
+		if (Objects.isNull(appGoodsDetailDTO)) {
+			return new PlatformAppGoodsDetailDTO();
+		}
+		if (PlatformConstant.CENTER_WAREHOUSE_CODE.equals(tenantId)) {
+			List<PjGoodsFiles> goodsFilesList = goodsFilesMapper.selectList(new LambdaQueryWrapper<PjGoodsFiles>().eq(PjGoodsFiles::getPid, appGoodsDetailDTO.getGoodsId())
+				.eq(PjGoodsFiles::getTenantId, tenantId).eq(PjGoodsFiles::getIsDeleted, 0));
+			if (CollectionUtil.isNotEmpty(goodsFilesList)) {
+				List<String> mainImageUrlList = goodsFilesList.stream().filter(item -> item.getMainImage() != 0).map(PjGoodsFiles::getUrl).collect(Collectors.toList());
+				appGoodsDetailDTO.setMainImageUrl(CollectionUtil.isNotEmpty(mainImageUrlList) ? mainImageUrlList : Collections.singletonList(goodsFilesList.get(0).getUrl()));
+				appGoodsDetailDTO.setDetailsImageUrl(goodsFilesList.stream().filter(item -> item.getMainImage() == 0).map(PjGoodsFiles::getUrl).collect(Collectors.toList()));
+			}
+		} else {
+			List<WxAppGoodsImgVo> wxAppGoodsImgVoList = shoppingMallDetailMapper.selectWxAppGoodsImgVoList(Collections.singletonList(appGoodsDetailDTO.getId()), Collections.singletonList(appGoodsDetailDTO.getBrandId()));
+			WxParamUtil.findSingletonPlatformGoodsImg(appGoodsDetailDTO, wxAppGoodsImgVoList);
+		}
+		Tenant tenant = platformGoodsMapper.selectTenantInfo(tenantId);
+		if (Objects.nonNull(tenant)) {
+			appGoodsDetailDTO.setTenantName(tenant.getTenantName());
+			appGoodsDetailDTO.setTenantAvatar(tenant.getBackgroundUrl());
+		}
+		return appGoodsDetailDTO;
+	}
+
+	@Override
+	public R getPlatformUserInfo() {
+		R<User> userInfoResult = userService.userInfoById(AuthUtil.getUserId());
+		if (!userInfoResult.isSuccess() || Objects.isNull(userInfoResult.getData())) {
+			return R.fail(403, "用户不存在,请重新登录");
+		}
+		User userInfo = userInfoResult.getData();
+		PjCorpsDesc corpsDesc = platformGoodsMapper.selectCorpsDescByUserId(userInfo.getId());
+		PlatformUserInfoDTO platformUserInfoVO = new PlatformUserInfoDTO();
+		platformUserInfoVO.setId(userInfo.getId());
+		platformUserInfoVO.setAvatar(userInfo.getAvatar());
+		platformUserInfoVO.setRealName(userInfo.getRealName());
+		platformUserInfoVO.setName(userInfo.getName());
+		platformUserInfoVO.setPhone(userInfo.getPhone());
+		platformUserInfoVO.setStorageId(userInfo.getStorageId());
+		platformUserInfoVO.setStorageName(userInfo.getStorageName());
+		return R.data(platformUserInfoVO);
+	}
+}

+ 1 - 3
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/productLaunch/controller/ProductLaunchController.java

@@ -66,10 +66,8 @@ public class ProductLaunchController extends BladeController {
 
 	private final IProductLaunchService productLaunchService;
 	private final IBrandFilesService brandFilesService;
-	private final IBrandDescService brandDescService;
 	private final IProductLaunchFilesService productLaunchFilesService;
-	private final ICorpsAttnService corpsAttnService;//客户联系人
-	private final ICorpsDescService corpsDescService;//客户
+	private final ICorpsDescService corpsDescService;
 	private final ISysClient iSysClient;
 	private final IBrandFigureService brandFigureService;
 	private final IGoodsDescService goodsDescService;

+ 39 - 3
blade-service/blade-sales-part/src/main/java/org/springblade/salesPart/util/WxParamUtil.java

@@ -3,6 +3,7 @@ package org.springblade.salesPart.util;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import org.springblade.common.enums.CommonEnum;
+import org.springblade.common.enums.NumberEnum;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
@@ -11,6 +12,8 @@ import org.springblade.salesPart.brand.service.IBrandDescService;
 import org.springblade.salesPart.entity.*;
 import org.springblade.salesPart.enums.FinalMap;
 import org.springblade.salesPart.enums.ProductLaunchPriceSystem;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDTO;
+import org.springblade.salesPart.platform.dto.PlatformAppGoodsDetailDTO;
 import org.springblade.salesPart.recycling.entity.GreenRecyclingRecord;
 import org.springblade.salesPart.stock.service.IStockDescService;
 import org.springblade.salesPart.vo.ResourceWarehouseVo;
@@ -23,9 +26,7 @@ import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -295,4 +296,39 @@ public class WxParamUtil {
 		greenRecyclingRecord.setOrderNo(orderNo);
 		return greenRecyclingRecord;
 	}
+
+	public static void findPlatformGoodsImg(List<PlatformAppGoodsDTO> platformAppGoodsList, List<WxAppGoodsImgVo> wxAppGoodsImgVoList) {
+		for (PlatformAppGoodsDTO item : platformAppGoodsList) {
+			WxAppGoodsImgVo wxAppGoodsImgVo = wxAppGoodsImgVoList.stream().filter(wxImg ->
+				1 == wxImg.getType() && wxImg.getPid().equals(item.getId()) ||
+					2 == wxImg.getType() && wxImg.getPid().equals(item.getBrandId()) && StringUtils.hasText(wxImg.getBrandItem()) && wxImg.getBrandItem().equals(item.getBrandItem()) ||
+					3 == wxImg.getType() && wxImg.getPid().equals(item.getBrandId())
+			).min(Comparator.comparing(WxAppGoodsImgVo::getType)).orElse(null);
+			if (wxAppGoodsImgVo == null) {
+				continue;
+			}
+			item.setUrl(wxAppGoodsImgVo.getUrl());
+		}
+	}
+
+	public static void findSingletonPlatformGoodsImg(PlatformAppGoodsDetailDTO appGoodsDetailDTO, List<WxAppGoodsImgVo> wxAppGoodsImgVoList) {
+		WxAppGoodsImgVo wxAppGoodsImgVo = wxAppGoodsImgVoList.stream().filter(wxImg ->
+			1 == wxImg.getType() && wxImg.getPid().equals(appGoodsDetailDTO.getId()) ||
+				2 == wxImg.getType() && wxImg.getPid().equals(appGoodsDetailDTO.getBrandId()) && StringUtils.hasText(wxImg.getBrandItem()) && wxImg.getBrandItem().equals(appGoodsDetailDTO.getBrandItem()) ||
+				3 == wxImg.getType() && wxImg.getPid().equals(appGoodsDetailDTO.getBrandId())
+		).min(Comparator.comparing(WxAppGoodsImgVo::getType)).orElse(null);
+		if (Objects.isNull(wxAppGoodsImgVo)) {
+			return;
+		}
+		if (wxAppGoodsImgVo.getType().equals(NumberEnum.ONE.number)) {
+			List<String> mainImageUrlList = wxAppGoodsImgVoList.stream().filter(wxImg -> wxImg.getType().equals(NumberEnum.ONE.number)).map(WxAppGoodsImgVo::getUrl).collect(Collectors.toList());
+			appGoodsDetailDTO.setMainImageUrl(mainImageUrlList);
+			appGoodsDetailDTO.setDetailsImageUrl(mainImageUrlList);
+		} else {
+			appGoodsDetailDTO.setMainImageUrl(Collections.singletonList(wxAppGoodsImgVo.getUrl()));
+			List<String> detailsImageUrlList = wxAppGoodsImgVoList.stream().map(WxAppGoodsImgVo::getUrl).collect(Collectors.toList());
+			appGoodsDetailDTO.setDetailsImageUrl(detailsImageUrlList.size() > 3 ? detailsImageUrlList.subList(0, 3) : detailsImageUrlList);
+		}
+	}
+
 }

+ 6 - 0
blade-service/blade-user/pom.xml

@@ -44,6 +44,12 @@
             <version>2.8.2.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-sales-part-api</artifactId>
+            <version>2.8.2.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>

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

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
+import org.springblade.common.constant.PlatformConstant;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tenant.annotation.NonDS;
@@ -357,6 +358,12 @@ public class UserClient implements IUserClient {
 		return service.getUserInfoByPhone(phone);
 	}
 
+	@Override
+	public User getPlatformUserByPhone(String mobile) {
+		return service.getOne(new LambdaQueryWrapper<User>().eq(User::getPhone, mobile).eq(User::getIsDeleted, 0)
+			.eq(User::getUserType, UserEnum.WECHAT.getCategory()).eq(User::getTenantId, PlatformConstant.PLATFORM_CODE).last("limit 1"));
+	}
+
 	/**
 	 * 获取用户
 	 * @param user

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

@@ -23,6 +23,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
+import org.springblade.client.entity.CorpsDesc;
+import org.springblade.client.feign.ICorpsDescClient;
 import org.springblade.common.constant.PlatformConstant;
 import org.springblade.common.constant.TenantConstant;
 import org.springblade.common.enums.NumberEnum;
@@ -39,6 +41,9 @@ import org.springblade.core.tool.constant.BladeConstant;
 import org.springblade.core.tool.jackson.JsonUtil;
 import org.springblade.core.tool.support.Kv;
 import org.springblade.core.tool.utils.*;
+import org.springblade.salesPart.entity.PjCorpsDesc;
+import org.springblade.salesPart.feign.IPJCorpClient;
+import org.springblade.salesPart.platform.entity.TireUserCompany;
 import org.springblade.system.cache.DictCache;
 import org.springblade.system.cache.ParamCache;
 import org.springblade.system.cache.SysCache;
@@ -75,10 +80,19 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 	private static final String GUEST_NAME = "guest";
 
 	private final IUserDeptService userDeptService;
+
 	private final IUserOauthService userOauthService;
+
 	private final ISysClient sysClient;
+
+	private final ICorpsDescClient corpsDescClient;
+
 	private final BladeTenantProperties tenantProperties;
 
+	private final IPJCorpClient pjCorpClient;
+
+
+
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public boolean submit(User user) {
@@ -558,6 +572,10 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 		if (Objects.isNull(otherCompanyUser)) {
 			return null;
 		}
+		PjCorpsDesc corpsDesc = pjCorpClient.getPjCorpDataByUser(otherCompanyUser.getId(), otherCompanyUser.getTenantId(), phone);
+		if (Objects.isNull(corpsDesc)) {
+			return null;
+		}
 		Date nowDate = DateUtil.now();
 		otherCompanyUser.setId(null);
 		otherCompanyUser.setCreateTime(nowDate);
@@ -577,6 +595,29 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 		userDept.setUserId(otherCompanyUser.getId());
 		userDept.setDeptId(Long.valueOf(PlatformConstant.PLATFORM_USER_DEPT));
 		userDeptService.save(userDept);
+		CorpsDesc insertPlatformCorpsDesc = new CorpsDesc();
+		insertPlatformCorpsDesc.setCname(corpsDesc.getCname());
+		insertPlatformCorpsDesc.setCode(String.valueOf(corpsDesc.getId()));
+		insertPlatformCorpsDesc.setTel(corpsDesc.getTel());
+		insertPlatformCorpsDesc.setAttn(Objects.isNull(corpsDesc.getPjCorpsAttn()) ? null : corpsDesc.getPjCorpsAttn().getCname());
+		insertPlatformCorpsDesc.setTenantId(PlatformConstant.PLATFORM_CODE);
+		boolean success = corpsDescClient.insertCorpsDataByUser(insertPlatformCorpsDesc);
+		if (!success) {
+			log.error("新增平台用户失败");
+			return null;
+		}
+		List<TireUserCompany> userCompanyList = userList.stream().filter(e -> !e.getTenantId().equals(PlatformConstant.PLATFORM_CODE)).map(e -> {
+			TireUserCompany tireUserCompany = new TireUserCompany();
+			tireUserCompany.setPlatformUserId(otherCompanyUser.getId());
+			tireUserCompany.setCompanyTenantId(e.getTenantId());
+			tireUserCompany.setCompanyUserId(e.getId());
+			return tireUserCompany;
+		}).collect(Collectors.toList());
+		boolean insertSuccess = pjCorpClient.insertUserCompanyList(userCompanyList);
+		if (!insertSuccess) {
+			log.error("新增平台用户失败");
+			return null;
+		}
 		return buildUserInfo(otherCompanyUser, UserEnum.WECHAT);
 	}