Forráskód Böngészése

工厂客户、商品管理、新增工厂用户接口

liyuan 3 hónapja
szülő
commit
c820ca25b2
22 módosított fájl, 1443 hozzáadás és 21 törlés
  1. 10 1
      blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/customer/entity/FcCustomerDesc.java
  2. 48 0
      blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/customer/vo/FcCustomerDescVo.java
  3. 13 0
      blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/price/dto/ProductLaunchDto.java
  4. 219 0
      blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/price/entity/ProductLaunch.java
  5. 14 0
      blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/price/vo/ProductLaunchVo.java
  6. 60 12
      blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/inventory/entity/PjStockDesc.java
  7. 6 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
  8. 169 2
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/controller/FcCustomerDescController.java
  9. 297 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/impl/FcCustomerDescServiceImpl.java
  10. 15 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/mapper/FcCustomerDescMapper.java
  11. 103 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/mapper/FcCustomerDescMapper.xml
  12. 30 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/service/FcCustomerDescService.java
  13. 78 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/controller/ProductLaunchController.java
  14. 69 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/impl/ProductLaunchServiceImpl.java
  15. 10 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/mapper/ProductLaunchMapper.java
  16. 45 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/mapper/ProductLaunchMapper.xml
  17. 54 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/service/ProductLaunchService.java
  18. 1 4
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/goods/controller/BrandDescController.java
  19. 84 2
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/inventory/controller/StockDescController.java
  20. 76 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/inventory/impl/StockDescServiceImpl.java
  21. 7 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/inventory/mapper/StockDescMapper.xml
  22. 35 0
      blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/inventory/service/IStockDescService.java

+ 10 - 1
blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/customer/entity/FcCustomerDesc.java

@@ -14,7 +14,6 @@ public class FcCustomerDesc implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 
-
 	/**
 	 * 主键ID
 	 */
@@ -119,4 +118,14 @@ public class FcCustomerDesc implements Serializable {
 	 * 客户状态
 	 */
 	private String checkStatus;
+
+	/**
+	 * 品牌
+	 */
+	private String brandId;
+
+	/**
+	 * 品牌
+	 */
+	private String brandName;
 }

+ 48 - 0
blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/customer/vo/FcCustomerDescVo.java

@@ -1,13 +1,61 @@
 package com.gubersail.dealer.admin.api.fc.customer.vo;
 
+import com.gubersail.dealer.admin.api.corps.entity.PjCorpsAddr;
+import com.gubersail.dealer.admin.api.corps.entity.PjCorpsAttn;
+import com.gubersail.dealer.admin.api.corps.entity.PjCorpsFiles;
 import com.gubersail.dealer.admin.api.fc.customer.entity.FcCustomerDesc;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 /**
  * @author Rain
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
 public class FcCustomerDescVo extends FcCustomerDesc {
+
+
+	/**
+	 * 客户类别id
+	 */
+	private String corpsTypeId;
+
+	/**
+	 * 客户类别名称
+	 */
+	private String corpsTypeName;
+
+	/**
+	 * 客户附件
+	 */
+	private List<PjCorpsFiles> corpsFilesList;
+
+	/**
+	 *客户类别
+	 */
+	private List<Long> typeList;
+
+	/**
+	 * 所属公司
+	 */
+	private List<String> strTenantId;
+
+
+	/**
+	 * 客户联系人
+	 */
+	private List<PjCorpsAttn> corpsAttnList;
+
+	/**
+	 * 客户地址
+	 */
+	private List<PjCorpsAddr> corpsAddrList;
+
+	/**
+	 * 创建日期
+	 */
+	private List<String> createTimeList;
+
 }

+ 13 - 0
blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/price/dto/ProductLaunchDto.java

@@ -0,0 +1,13 @@
+package com.gubersail.dealer.admin.api.fc.price.dto;
+
+import com.gubersail.dealer.admin.api.fc.price.entity.ProductLaunch;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author Rain
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProductLaunchDto extends ProductLaunch {
+}

+ 219 - 0
blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/price/entity/ProductLaunch.java

@@ -0,0 +1,219 @@
+package com.gubersail.dealer.admin.api.fc.price.entity;
+
+import lombok.Data;
+import org.springblade.core.secure.BladeUser;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * @author Rain
+ */
+@Data
+public class ProductLaunch {
+
+	/**
+	 * 主键ID
+	 */
+	private Long id;
+
+	/**
+	 * 租户ID
+	 */
+	private String tenantId;
+
+	/**
+	 * 创建人
+	 */
+	private Long createUser;
+
+	/**
+	 * 创建部门
+	 */
+	private Long createDept;
+
+	/**
+	 * 创建时间
+	 */
+	private Date createTime;
+
+	/**
+	 * 修改人
+	 */
+	private Long updateUser;
+
+	/**
+	 * 修改时间
+	 */
+	private Date updateTime;
+
+	/**
+	 * 是否已删除(0否 1是)
+	 */
+	private Integer isDeleted;
+
+	/**
+	 * 备注
+	 */
+	private String remarks;
+
+	/**
+	 * 状态
+	 * 0 保存
+	 * 1 提交
+	 */
+	private String status;
+
+	/**
+	 * 所属公司ID
+	 */
+	private Long salesCompanyId;
+
+	/**
+	 * 所属公司名称
+	 */
+	private String salesCompanyName;
+
+	/**
+	 * 名称
+	 */
+	@NotNull(message = "名称不能为null")
+	@NotBlank(message = "名称不能为空")
+	private String cname;
+
+	/**
+	 * 规格型号
+	 */
+	@NotNull(message = "规格型号不能为null")
+	@NotBlank(message = "规格型号不能为空")
+	private String specificationAndModel;
+
+	/**
+	 * 库存
+	 */
+	private BigDecimal inventory;
+
+	/**
+	 * 是否启用(0:禁用 1:启用)
+	 */
+	private Integer upAndDownShelves;
+
+	/**
+	 * 商品ID
+	 */
+	private Long goodsId;
+
+	/**
+	 * 售价1
+	 */
+	@NotNull(message = "售价1不能为null")
+	private BigDecimal priceOne;
+
+	/**
+	 * 售价2
+	 */
+	@NotNull(message = "售价2不能为null")
+	private BigDecimal priceTwo;
+
+	/**
+	 * 售价3
+	 */
+	@NotNull(message = "售价3不能为null")
+	private BigDecimal priceThree;
+
+	/**
+	 * 售价4
+	 */
+	@NotNull(message = "售价4不能为null")
+	private BigDecimal priceFour;
+
+	/**
+	 * 0本地库,1共享库
+	 */
+	private Integer billType;
+
+	/**
+	 * 来源ID
+	 */
+	private Long sourceId;
+
+	/**
+	 * 来源公司ID
+	 */
+	private Long sourceCompanyId;
+
+	/**
+	 * 共享公司
+	 */
+	private String sharedCompany;
+
+	/**
+	 * 品牌ID
+	 */
+	@NotNull(message = "品牌不能为null")
+	private Long brandId;
+
+	/**
+	 * 品牌名称
+	 */
+	private String brandName;
+
+	/**
+	 * 是否共享(0共享,1取消共享)
+	 */
+	private Integer whetherShare;
+
+	/**
+	 * 详情文本
+	 */
+	private String detailsText;
+
+	/**
+	 * 花纹
+	 */
+	@NotNull(message = "花纹不能为null")
+	@NotBlank(message = "花纹不能为空")
+	private String brandItem;
+
+	/**
+	 * 产地
+	 */
+	private String placeProduction;
+
+	/**
+	 * 防爆(0否,1是)
+	 */
+	private Integer explosionProof;
+
+	/**
+	 * 原厂
+	 */
+	private String originalFactory;
+
+	/**
+	 * 自修补
+	 */
+	private String selfRecovery;
+
+	/**
+	 * 版本
+	 */
+	private Integer version;
+
+
+	public void setUserAndDept(BladeUser bladeUser){
+		if (this.id == null) {
+			this.createUser = bladeUser.getUserId();
+			this.createDept = Long.valueOf(bladeUser.getDeptId());
+			this.createTime = new Date();
+			this.version = 1;
+			return;
+		}
+		this.updateUser = bladeUser.getUserId();
+		this.updateTime = new Date();
+		this.version += 1;
+	}
+
+}

+ 14 - 0
blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/fc/price/vo/ProductLaunchVo.java

@@ -0,0 +1,14 @@
+package com.gubersail.dealer.admin.api.fc.price.vo;
+
+import com.gubersail.dealer.admin.api.fc.price.entity.ProductLaunch;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author Rain
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ProductLaunchVo extends ProductLaunch {
+
+}

+ 60 - 12
blade-service-api/gubersail-dealer-admin-api/src/main/java/com/gubersail/dealer/admin/api/inventory/entity/PjStockDesc.java

@@ -4,8 +4,10 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
@@ -30,7 +32,7 @@ public class PjStockDesc implements Serializable {
 	 * 租户id
 	 */
 	@ApiModelProperty(value = "租户id")
-	private String tenantId = AuthUtil.getTenantId();
+	private String tenantId;
 	;
 	/**
 	 * 创建人
@@ -61,7 +63,6 @@ public class PjStockDesc implements Serializable {
 	 * 是否已删除(0 否 1是)
 	 */
 	@ApiModelProperty(value = "是否已删除(0 否 1是)")
-
 	private Integer isDeleted;
 	/**
 	 * 备注
@@ -70,6 +71,8 @@ public class PjStockDesc implements Serializable {
 	private String remarks;
 	/**
 	 * 订单状态
+	 * 1 提交
+	 * 0 保存
 	 */
 	@ApiModelProperty(value = "订单状态")
 	private String status;
@@ -143,16 +146,7 @@ public class PjStockDesc implements Serializable {
 	 */
 	@ApiModelProperty(value = "结余数量")
 	private BigDecimal balanceQuantity;
-	/**
-	 * 结余数量(融资)
-	 */
-	@ApiModelProperty(value = "结余数量(融资)")
-	private BigDecimal balanceQuantityFinancing;
-	/**
-	 * 结余数量(自有)
-	 */
-	@ApiModelProperty(value = "结余数量(自有)")
-	private BigDecimal balanceQuantityHave;
+
 	/**
 	 * 所属公司id
 	 */
@@ -224,4 +218,58 @@ public class PjStockDesc implements Serializable {
 	private BigDecimal rebateInventoryAmount;
 
 
+	/**
+	 * 售价1
+	 */
+	@NotNull(message = "售价1不能为null")
+	private BigDecimal priceOne;
+
+	/**
+	 * 售价2
+	 */
+	@NotNull(message = "售价2不能为null")
+	private BigDecimal priceTwo;
+
+	/**
+	 * 售价3
+	 */
+	@NotNull(message = "售价3不能为null")
+	private BigDecimal priceThree;
+
+	/**
+	 * 售价4
+	 */
+	@NotNull(message = "售价4不能为null")
+	private BigDecimal priceFour;
+
+	/**
+	 * u9商品id
+	 */
+	private Long u9GoodsId;
+
+	/**
+	 * u9库存id
+	 */
+	private Long u9StockId;
+
+	/**
+	 * 是否启用
+	 * 0 否 1是
+	 */
+	private Integer upAndDownShelves;
+
+
+	public void setUserAndDept(BladeUser bladeUser){
+		if (this.id == null) {
+			this.createUser = bladeUser.getUserId();
+			this.createDept = Long.valueOf(bladeUser.getDeptId());
+			this.createTime = new Date();
+			this.version = 1;
+			return;
+		}
+		this.updateUser = bladeUser.getUserId();
+		this.updateTime = new Date();
+		this.version += 1;
+	}
+
 }

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

@@ -457,4 +457,10 @@ public class UserController {
 		return userSearchClient.listByRole(SysCache.getRoleIds(AuthUtil.getTenantId(), "业务员"));
 	}
 
+
+	@GetMapping("/factoryUserList")
+	public R<List<User>> factoryUserList() {
+		return userSearchClient.listByRole(SysCache.getRoleIds(AuthUtil.getTenantId(), "用户"));
+	}
+
 }

+ 169 - 2
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/controller/FcCustomerDescController.java

@@ -1,16 +1,183 @@
 package com.gubersail.admin.fc.customer.controller;
 
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.gubersail.admin.corp.service.ICorpsAddrService;
+import com.gubersail.admin.corp.service.ICorpsAttnService;
+import com.gubersail.admin.corp.service.ICorpsTypeDescService;
+import com.gubersail.admin.corp.service.ICorpsTypeService;
+import com.gubersail.admin.fc.customer.service.FcCustomerDescService;
+import com.gubersail.dealer.admin.api.corps.entity.PjCorpsAddr;
+import com.gubersail.dealer.admin.api.corps.entity.PjCorpsAttn;
+import com.gubersail.dealer.admin.api.corps.entity.PjCorpsType;
+import com.gubersail.dealer.admin.api.corps.entity.PjCorpsTypeDesc;
+import com.gubersail.dealer.admin.api.fc.customer.entity.FcCustomerDesc;
+import com.gubersail.dealer.admin.api.fc.customer.vo.FcCustomerDescVo;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springblade.common.annotation.RepeatSubmit;
+import org.springblade.common.enums.CommonEnum;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.api.R;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author Rain
  */
 @RestController
 @RequestMapping("/fc/customer/")
+@AllArgsConstructor
 public class FcCustomerDescController {
 
+	private final FcCustomerDescService corpsDescService;
+
+	private final ICorpsTypeService corpsTypeService;
+
+	private final ICorpsTypeDescService corpsTypeDescService;
+
+	private final ICorpsAttnService corpsAttnService;
+
+	private final ICorpsAddrService corpsAddrService;
+
+
+
+
+	/**
+	 * 分页
+	 */
+	@GetMapping("/list")
+	public R<IPage<FcCustomerDescVo>> list(FcCustomerDescVo corpsDesc, Query query) {
+		corpsDesc.setIsDeleted(0);
+		corpsDesc.setTenantId(SecureUtil.getTenantId());
+		IPage<FcCustomerDescVo> pages = corpsDescService.selectCorpsDescPage(Condition.getPage(query), corpsDesc);
+		if (!CollectionUtils.isEmpty(pages.getRecords())) {
+			List<Long> corpsIds = pages.getRecords().stream().map(FcCustomerDescVo::getId).collect(Collectors.toList());
+			List<PjCorpsTypeDesc> pjCorpsTypeDescList = corpsTypeDescService.list(new LambdaQueryWrapper<PjCorpsTypeDesc>()
+				.in(PjCorpsTypeDesc::getCorpId, corpsIds));
+			List<PjCorpsType> pjCorpsTypeList = new ArrayList<>();
+			if (!pjCorpsTypeDescList.isEmpty()) {
+				List<Long> typeIdList = pjCorpsTypeDescList.stream().map(PjCorpsTypeDesc::getCorpTypeId).collect(Collectors.toList());
+				if (!typeIdList.isEmpty()) {
+					pjCorpsTypeList = corpsTypeService.list(new LambdaQueryWrapper<PjCorpsType>().in(PjCorpsType::getId, typeIdList).eq(PjCorpsType::getIsDeleted, 0));
+				}
+			}
+			for (FcCustomerDescVo item : pages.getRecords()) {
+				if (!pjCorpsTypeList.isEmpty()) {
+					List<Long> typeIds = pjCorpsTypeDescList.stream()
+						.filter(e -> e.getCorpId().equals(item.getId())).map(PjCorpsTypeDesc::getCorpTypeId)
+						.collect(Collectors.toList());
+					List<PjCorpsType> pjCorpsTypes = pjCorpsTypeList.stream()
+						.filter(e -> e.getCorpType().equals(item.getCorpType()) && typeIds.contains(e.getId()))
+						.collect(Collectors.toList());
+					if (!pjCorpsTypes.isEmpty()) {
+						String typeName = pjCorpsTypes.stream().map(PjCorpsType::getCname).collect(Collectors.joining(","));
+						item.setCorpsTypeName(typeName);
+					}
+				}
+			}
+		}
+		return R.data(pages);
+	}
+
+
+	/**
+	 * 修改 客户详情
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入corpsDesc")
+	@Transactional(rollbackFor = Exception.class)
+	public R update(@Valid @RequestBody FcCustomerDescVo corpsDesc) {
+		if (corpsDesc.getId() == null) {
+			return R.data(500, "请选择要删除的数据", "error");
+		}
+		List<PjCorpsAttn> corpsAttnList = corpsAttnService.list(new LambdaQueryWrapper<PjCorpsAttn>()
+			.in(PjCorpsAttn::getPid, corpsDesc.getId()));
+		if (!corpsAttnList.isEmpty()) {
+			List<Long> attnIds = corpsAttnList.stream().map(PjCorpsAttn::getId).collect(Collectors.toList());
+			corpsAttnService.removeByIds(attnIds);
+		}
+		List<PjCorpsAddr> corpsAddrList = corpsAddrService.list(new LambdaQueryWrapper<PjCorpsAddr>()
+			.in(PjCorpsAddr::getPid, corpsDesc.getId()));
+		if (!corpsAddrList.isEmpty()) {
+			List<Long> addrIds = corpsAddrList.stream().map(PjCorpsAddr::getId).collect(Collectors.toList());
+			corpsAddrService.removeByIds(addrIds);
+		}
+		//删除客户详情,增加校验
+		FcCustomerDesc desc = corpsDescService.getById(corpsDesc.getId());
+		List<String> typeList = Arrays.stream(desc.getCorpType().split(",")).collect(Collectors.toList());
+		if (typeList.size() <= 1) {
+			corpsDesc.setIsDeleted(1);
+			return R.status(corpsDescService.updateById(corpsDesc));
+		}
+
+		List<Long> typeIdList = corpsTypeService.list(new LambdaQueryWrapper<PjCorpsType>()
+			.eq(PjCorpsType::getCorpType, corpsDesc.getCorpType())
+			.eq(PjCorpsType::getTenantId, AuthUtil.getTenantId())
+			.eq(PjCorpsType::getIsDeleted, 0)
+		).stream().map(PjCorpsType::getId).collect(Collectors.toList());
+
+		corpsTypeDescService.remove(new LambdaQueryWrapper<PjCorpsTypeDesc>()
+			.eq(PjCorpsTypeDesc::getCorpId, corpsDesc.getId())
+			.in(PjCorpsTypeDesc::getCorpTypeId, typeIdList)
+		);
+
+		typeList.remove(corpsDesc.getCorpType());
+		desc.setCorpType(String.join(",", typeList));
+		boolean status = corpsDescService.updateById(corpsDesc);
+		return R.status(status);
+	}
+
+
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入corpsDesc")
+	@RepeatSubmit
+	public R submit(@Valid @RequestBody FcCustomerDescVo corpsDesc) {
+		if (StringUtils.isNotBlank(corpsDesc.getTenantId())) {
+			corpsDesc.setTenantId(SecureUtil.getTenantId());
+		}
+		if (CommonEnum.ADOPT.info.equals(corpsDesc.getCheckStatus())) {
+			if (Objects.isNull(corpsDesc.getSalesmanId())) {
+				return R.fail("请为客户维护业务员");
+			}
+		}
+		return corpsDescService.submit(corpsDesc);
+	}
+
+
+	@GetMapping("/detail")
+	public R<FcCustomerDescVo> detail(FcCustomerDesc corpsDesc) {
+		FcCustomerDescVo detail = corpsDescService.getMessageById(corpsDesc);
+		return R.data(detail);
+	}
 
 
+	/**
+	 * 启用禁用
+	 */
+	@GetMapping("/updateEnableOrNot")
+	@RepeatSubmit
+	public R updateEnableOrNot(FcCustomerDesc corpsDesc) {
+		if (corpsDesc.getId() == null) {
+			return R.fail(500, "请选择数据");
+		}
+		boolean status = corpsDescService.updateById(corpsDesc);
+		return R.status(status);
+	}
 
 }

+ 297 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/impl/FcCustomerDescServiceImpl.java

@@ -1,14 +1,311 @@
 package com.gubersail.admin.fc.customer.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gubersail.admin.corp.mapper.CorpsAddrMapper;
+import com.gubersail.admin.corp.mapper.CorpsAttnMapper;
+import com.gubersail.admin.corp.mapper.CorpsFilesMapper;
+import com.gubersail.admin.corp.mapper.CorpsTypeDescMapper;
+import com.gubersail.admin.corp.service.ICorpsTypeService;
 import com.gubersail.admin.fc.customer.mapper.FcCustomerDescMapper;
 import com.gubersail.admin.fc.customer.service.FcCustomerDescService;
+import com.gubersail.dealer.admin.api.corps.entity.*;
 import com.gubersail.dealer.admin.api.fc.customer.entity.FcCustomerDesc;
+import com.gubersail.dealer.admin.api.fc.customer.vo.FcCustomerDescVo;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.system.feign.ISysClient;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
+
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author Rain
  */
 @Service
+@AllArgsConstructor
 public class FcCustomerDescServiceImpl extends ServiceImpl<FcCustomerDescMapper, FcCustomerDesc> implements FcCustomerDescService {
+
+	private final ICorpsTypeService corpsTypeService;
+
+	private final ISysClient sysClient;
+
+	private final CorpsAttnMapper corpsAttnMapper;
+
+	private final CorpsAddrMapper corpsAddrMapper;
+
+	private final CorpsFilesMapper corpsFilesMapper;
+
+	private final CorpsTypeDescMapper corpsTypeDescMapper;
+
+
+	@Override
+	public IPage<FcCustomerDescVo> selectCorpsDescPage(IPage<FcCustomerDescVo> page, FcCustomerDescVo corpsDesc) {
+		if (StringUtils.isNotBlank(corpsDesc.getCorpsTypeId())) {
+			Long corpsTypeId = Long.parseLong(corpsDesc.getCorpsTypeId());
+			List<Long> corpsTypeIdList = new ArrayList<>();
+			corpsTypeService.selectChildById(corpsTypeId, corpsTypeIdList);
+			corpsTypeIdList.add(corpsTypeId);
+			corpsDesc.setTypeList(corpsTypeIdList);
+		} else if (StringUtils.isNotBlank(corpsDesc.getCorpsTypeName())) {
+			LambdaQueryWrapper<PjCorpsType> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+			lambdaQueryWrapper.eq(PjCorpsType::getCname, corpsDesc.getCorpsTypeName());
+			lambdaQueryWrapper.eq(PjCorpsType::getIsDeleted, 0);
+			lambdaQueryWrapper.eq(PjCorpsType::getTenantId, SecureUtil.getTenantId());
+			List<PjCorpsType> corpsTypeList = corpsTypeService.list(lambdaQueryWrapper);
+			if (!CollectionUtils.isEmpty(corpsTypeList)) {
+				List<Long> corpsTypeIdList = new ArrayList<>();
+				corpsTypeList.forEach(item -> {
+					corpsTypeService.selectChildById(item.getId(), corpsTypeIdList);
+					corpsTypeIdList.add(item.getId());
+				});
+				corpsDesc.setTypeList(corpsTypeIdList);
+			}
+		}
+		corpsDesc.setTenantId(AuthUtil.getTenantId());
+		corpsDesc.setIsDeleted(0);
+		corpsDesc.setStrTenantId(Arrays.asList(AuthUtil.getDeptId().split(",")));
+		corpsDesc.setSalesCompanyId(Long.parseLong(AuthUtil.getDeptId()));
+		return page.setRecords(baseMapper.selectCorpsDescPage(page, corpsDesc));
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R submit(FcCustomerDescVo corpsDesc) {
+		Long userId = SecureUtil.getUserId();
+		Date date = new Date();
+		List<FcCustomerDesc> pjCorpsDesc = baseMapper.selectList(new LambdaQueryWrapper<FcCustomerDesc>()
+			.eq(FcCustomerDesc::getTenantId, AuthUtil.getTenantId())
+			.eq(FcCustomerDesc::getIsDeleted, 0)
+			.eq(FcCustomerDesc::getSalesCompanyId, AuthUtil.getTenantId())
+			.eq(FcCustomerDesc::getCname, corpsDesc.getCname()));
+		if (corpsDesc.getId() == null) {
+			if (!pjCorpsDesc.isEmpty()) {
+				throw new RuntimeException("客户" + corpsDesc.getCname() + "已存在,请勿重复添加!");
+			}
+			corpsDesc.setTenantId(SecureUtil.getTenantId());
+			corpsDesc.setCreateDept(Long.valueOf(SecureUtil.getDeptId()));
+			corpsDesc.setCreateTime(date);
+			corpsDesc.setCreateUser(userId);
+			corpsDesc.setSalesCompanyId(Long.valueOf(AuthUtil.getDeptId()));
+			corpsDesc.setSalesCompanyName(sysClient.getDept(Long.valueOf(AuthUtil.getDeptId())).getData().getFullName());
+			corpsDesc.setEnableOrNot(1);
+			baseMapper.insert(corpsDesc);
+		} else {
+			List<Long> ids = pjCorpsDesc.stream().map(FcCustomerDesc::getId).collect(Collectors.toList());
+			if (!pjCorpsDesc.isEmpty() && !ids.contains(corpsDesc.getId())) {
+				throw new RuntimeException("客户" + corpsDesc.getCname() + "已存在,请勿重复添加!");
+			}
+			corpsDesc.setTenantId(SecureUtil.getTenantId());
+			corpsDesc.setUpdateTime(date);
+			corpsDesc.setCreateDept(Long.valueOf(SecureUtil.getDeptId()));
+			corpsDesc.setUpdateUser(AuthUtil.getUserId());
+			baseMapper.updateById(corpsDesc);
+		}
+		Long pId = corpsDesc.getId();
+		String tenantId = corpsDesc.getTenantId();
+		//保存客户联系人信息
+		R saveOrUpdateAttn = this.saveOrUpdateAttn(corpsDesc, userId, pId, tenantId, date);
+		if (saveOrUpdateAttn.getCode() != 200) {
+			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+			return saveOrUpdateAttn;
+		}
+
+		//保存客户地址信息
+		this.saveOrUpdateAddr(corpsDesc, userId, pId, tenantId, date);
+
+		//保存客户文件信息
+		this.saveOrUpdateFiles(corpsDesc, userId, pId, tenantId, date);
+
+		//保存客户与类别对应关系
+		this.saveOrUpdateTypeDesc(corpsDesc, userId, pId, date, tenantId);
+
+		return R.data(corpsDesc);
+	}
+
+	@Override
+	public FcCustomerDescVo getMessageById(FcCustomerDesc corpsDesc) {
+		FcCustomerDescVo detail = new FcCustomerDescVo();
+		FcCustomerDesc desc = baseMapper.selectById(corpsDesc.getId());
+		if (ObjectUtils.isEmpty(desc)) {
+			return detail;
+		}
+		BeanUtils.copyProperties(desc, detail);
+		//获取客户联系人
+		detail.setCorpsAttnList(corpsAttnMapper.selectList(new QueryWrapper<PjCorpsAttn>().eq("pid", corpsDesc.getId()).eq("is_deleted", 0)));
+		//获取客户地址
+		detail.setCorpsAddrList(corpsAddrMapper.selectList(new QueryWrapper<PjCorpsAddr>().eq("pid", corpsDesc.getId()).eq("is_deleted", 0)));
+		//获取客户附件
+		detail.setCorpsFilesList(corpsFilesMapper.selectList(new QueryWrapper<PjCorpsFiles>().eq("pid", corpsDesc.getId()).eq("is_deleted", 0)));
+
+		//获取客户类别
+		List<String> longs = corpsTypeDescMapper.selectTypeId(corpsDesc.getId());
+		detail.setCorpsTypeId(String.join(",", longs));
+		StringBuilder corpsTypeName = new StringBuilder();
+		if (!ObjectUtils.isEmpty(longs)) {
+			for (String id : longs) {
+				PjCorpsType corpsType = corpsTypeService.getById(Long.parseLong(id));
+				String name = ObjectUtils.isEmpty(corpsType) ? "" : corpsType.getCname();
+				corpsTypeName.append(name).append(",");
+			}
+			String corpsName = corpsTypeName.substring(0, corpsTypeName.length() - 1);
+			detail.setCorpsTypeName(corpsName);
+		} else {
+			detail.setCorpsTypeName("");
+		}
+		return detail;
+	}
+
+
+	/**
+	 * 保存客户联系人信息
+	 *
+	 * @param corpsDesc 客户信息
+	 * @param userId    登录人id
+	 * @param pId       客户详情表id
+	 * @param tenantId  租户id
+	 * @param date      创建时间
+	 * @return
+	 */
+	public R saveOrUpdateAttn(FcCustomerDescVo corpsDesc, Long userId, Long pId, String tenantId, Date date) {
+		if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(corpsDesc.getCorpsAttnList())) {
+			String tel = corpsDesc.getCorpsAttnList().stream().map(PjCorpsAttn::getTel).filter(Objects::nonNull)
+				.distinct().collect(Collectors.joining(","));
+			List<PjCorpsAttn> pjCorpsAttnList = corpsAttnMapper.selectList(new LambdaQueryWrapper<PjCorpsAttn>()
+				.eq(PjCorpsAttn::getIsDeleted, 0)
+				.eq(PjCorpsAttn::getTenantId, AuthUtil.getTenantId())
+				.apply("find_in_set(tel,'" + tel + "')"));
+			for (PjCorpsAttn corpsAttn : corpsDesc.getCorpsAttnList()) {
+				corpsAttn.setPid(pId);
+				List<PjCorpsAttn> pjCorpsAttns = pjCorpsAttnList.stream().filter(e -> e.getTel().equals(corpsAttn.getTel()))
+					.collect(Collectors.toList());
+				if (corpsAttn.getId() == null) {
+					if (!pjCorpsAttns.isEmpty()) {
+						throw new RuntimeException("手机号:" + corpsAttn.getTel() + "已存在,请勿重复添加");
+					}
+					corpsAttn.setTenantId(tenantId);
+					corpsAttn.setCreateTime(date);
+					corpsAttn.setCreateUser(userId);
+					corpsAttnMapper.insert(corpsAttn);
+				} else {
+					List<Long> ids = pjCorpsAttns.stream().map(PjCorpsAttn::getId).collect(Collectors.toList());
+					if (!pjCorpsAttns.isEmpty() && !ids.contains(corpsAttn.getId())) {
+						throw new RuntimeException("手机号" + corpsAttn.getTel() + "已存在,请勿重复添加!");
+					}
+					corpsAttn.setTenantId(tenantId);
+					corpsAttn.setUpdateTime(date);
+					corpsAttn.setUpdateUser(userId);
+					corpsAttnMapper.updateById(corpsAttn);
+				}
+			}
+		}
+		return R.success("success");
+	}
+
+	/**
+	 * 保存客户文件信息
+	 *
+	 * @param corpsDesc 客户信息
+	 * @param userId    登录人id
+	 * @param pId       客户详情表id
+	 * @param tenantId  租户id
+	 * @param date      创建时间
+	 * @return
+	 */
+	public void saveOrUpdateFiles(FcCustomerDescVo corpsDesc, Long userId, Long pId, String tenantId, Date date) {
+		if (!CollectionUtils.isEmpty(corpsDesc.getCorpsFilesList())) {
+			corpsDesc.getCorpsFilesList().forEach(files -> {
+				files.setPid(pId);
+				files.setTenantId(tenantId);
+				if (files.getId() == null) {
+					files.setCreateTime(date);
+					files.setCreateUser(userId);
+					corpsFilesMapper.insert(files);
+				} else {
+					files.setUpdateTime(date);
+					files.setUpdateUser(userId);
+					corpsFilesMapper.updateById(files);
+				}
+			});
+		}
+	}
+
+	/**
+	 * 保存客户地址信息
+	 *
+	 * @param corpsDesc 客户信息
+	 * @param userId    登录人id
+	 * @param pId       客户详情表id
+	 * @param tenantId  租户id
+	 * @param date      创建时间
+	 * @return
+	 */
+	public void saveOrUpdateAddr(FcCustomerDescVo corpsDesc, Long userId, Long pId, String tenantId, Date date) {
+		if (!CollectionUtils.isEmpty(corpsDesc.getCorpsAddrList())) {
+			long count = corpsDesc.getCorpsAddrList().stream().filter(e -> "1".equals(e.getDefaultAddres())).count();
+			if (count != 1) {
+				throw new RuntimeException("默认地址唯一");
+			}
+			corpsDesc.getCorpsAddrList().forEach(addr -> {
+				addr.setPid(pId);
+				addr.setTenantId(tenantId);
+				if (addr.getId() == null) {
+					addr.setCreateTime(date);
+					addr.setCreateUser(userId);
+					corpsAddrMapper.insert(addr);
+				} else {
+					addr.setUpdateTime(date);
+					addr.setUpdateUser(userId);
+					corpsAddrMapper.updateById(addr);
+				}
+			});
+		}
+	}
+
+	/**
+	 * 保护客户与类别对应信息
+	 *
+	 * @param corpsDesc 客户信息
+	 * @param userId    登录人id
+	 * @param pId       客户详情表id
+	 * @param date      创建时间
+	 * @return
+	 */
+	public void saveOrUpdateTypeDesc(FcCustomerDescVo corpsDesc, Long userId, Long pId, Date date, String tenantId) {
+		if (StringUtils.isNotBlank(corpsDesc.getCorpsTypeId())) {
+			corpsTypeDescMapper.delete(new QueryWrapper<PjCorpsTypeDesc>().eq("corp_id", corpsDesc.getId()));
+			List<String> list = Arrays.asList(corpsDesc.getCorpsTypeId().split(","));
+			list.forEach(item -> {
+				PjCorpsTypeDesc typeDesc = corpsTypeDescMapper.selectOne(new QueryWrapper<PjCorpsTypeDesc>().eq("corp_id", pId)
+					.eq("corp_type_id", item));
+				if (typeDesc != null) {
+					typeDesc.setCorpTypeId(Long.valueOf(item));
+					typeDesc.setCorpId(corpsDesc.getId());
+					typeDesc.setUpdateTime(date);
+					typeDesc.setUpdateUser(userId);
+					corpsTypeDescMapper.updateById(typeDesc);
+				} else {
+					PjCorpsTypeDesc corpsTypeDesc = new PjCorpsTypeDesc();
+					corpsTypeDesc.setCorpId(corpsDesc.getId());
+					corpsTypeDesc.setCorpTypeId(Long.valueOf(item));
+					corpsTypeDesc.setCreateUser(userId);
+					corpsTypeDesc.setCreateTime(date);
+					corpsTypeDesc.setTenantId(tenantId);
+					corpsTypeDescMapper.insert(corpsTypeDesc);
+				}
+			});
+		}
+	}
+
 }

+ 15 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/mapper/FcCustomerDescMapper.java

@@ -1,10 +1,25 @@
 package com.gubersail.admin.fc.customer.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.gubersail.dealer.admin.api.fc.customer.entity.FcCustomerDesc;
+import com.gubersail.dealer.admin.api.fc.customer.vo.FcCustomerDescVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author Rain
  */
 public interface FcCustomerDescMapper extends BaseMapper<FcCustomerDesc> {
+
+
+	/**
+	 * 查询客户信息
+	 *
+	 * @param page      分页参数
+	 * @param corpsDesc 查询参数
+	 * @return 客户信息
+	 */
+	List<FcCustomerDescVo> selectCorpsDescPage(IPage page, @Param("corpsDesc") FcCustomerDescVo corpsDesc);
 }

+ 103 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/mapper/FcCustomerDescMapper.xml

@@ -0,0 +1,103 @@
+<?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="com.gubersail.admin.fc.customer.mapper.FcCustomerDescMapper">
+
+    <resultMap id="CustomerResultMap" type="com.gubersail.dealer.admin.api.fc.customer.entity.FcCustomerDesc">
+        <id property="id" column="id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="createUser" column="create_user"/>
+        <result property="createDept" column="create_dept"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateUser" column="update_user"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="isDeleted" column="is_deleted"/>
+        <result property="remarks" column="remarks"/>
+        <result property="status" column="status"/>
+        <result property="enableOrNot" column="enable_or_not"/>
+        <result property="cname" column="cname"/>
+        <result property="tel" column="tel"/>
+        <result property="priceSystem" column="price_system"/>
+        <result property="corpType" column="corp_type"/>
+        <result property="salesmanId" column="salesman_id"/>
+        <result property="salesmanName" column="salesman_name"/>
+        <result property="salesCompanyId" column="sales_company_id"/>
+        <result property="salesCompanyName" column="sales_company_name"/>
+        <result property="initials" column="initials"/>
+        <result property="checkStatus" column="check_status"/>
+    </resultMap>
+
+
+    <select id="selectCorpsDescPage" resultType="com.gubersail.dealer.admin.api.fc.customer.vo.FcCustomerDescVo">
+        select
+        *
+        from
+        fc_customer_desc
+        where
+        is_deleted = '0'
+        <if test="corpsDesc.id!=null">
+            and id = #{corpsDesc.id}
+        </if>
+        <if test="corpsDesc.isDeleted!=null">
+            and is_deleted = #{corpsDesc.isDeleted}
+        </if>
+        <if test="corpsDesc.salesCompanyId != null">
+            and sales_company_id  = #{corpsDesc.salesCompanyId}
+        </if>
+        <if test="corpsDesc.corpType!=null and corpsDesc.corpType != ''">
+            and corp_type like CONCAT(CONCAT('%', #{corpsDesc.corpType}), '%')
+        </if>
+        <if test="corpsDesc.checkStatus != null and corpsDesc.checkStatus != ''">
+            and check_status = #{corpsDesc.checkStatus}
+        </if>
+        <if test="corpsDesc.cname!=null and corpsDesc.cname != ''">
+            and (cname like CONCAT(CONCAT('%', #{corpsDesc.cname}), '%') or tel like CONCAT(CONCAT('%', #{corpsDesc.cname}), '%'))
+        </if>
+        <if test="corpsDesc.salesmanId != null">
+            and (salesman_id = #{corpsDesc.salesmanId} or salesman_id is null)
+        </if>
+        <if test="corpsDesc.salesmanName != null and corpsDesc.salesmanName != ''">
+            and salesman_name like CONCAT(CONCAT('%', #{corpsDesc.salesmanName}), '%')
+        </if>
+        <if test="corpsDesc.tel!=null and corpsDesc.tel != ''">
+            and tel like CONCAT(CONCAT('%', #{corpsDesc.tel}), '%')
+        </if>
+        <if test="corpsDesc.createTimeList !=null and corpsDesc.createTimeList[0] != '' and corpsDesc.createTimeList[0] != null">
+            AND create_time &gt;= #{corpsDesc.createTimeList[0]}
+        </if>
+        <if test="corpsDesc.createTimeList !=null and corpsDesc.createTimeList[1] != '' and corpsDesc.createTimeList[1] != null">
+            AND create_time &lt;= #{corpsDesc.createTimeList[1]}
+        </if>
+        <if test="corpsDesc.tenantId!=null and corpsDesc.tenantId != ''">
+            and tenant_id = #{corpsDesc.tenantId}
+        </if>
+        <if test="corpsDesc.createUser!=null and corpsDesc.createUser != ''">
+            and create_user = #{corpsDesc.createUser}
+        </if>
+        <if test="corpsDesc.updateUser!=null and corpsDesc.updateUser != ''">
+            and update_user = #{corpsDesc.updateUser}
+        </if>
+        <if test="corpsDesc.status!=null and corpsDesc.status != ''">
+            and status = #{corpsDesc.status}
+        </if>
+        <if test="corpsDesc.enableOrNot != null">
+            and enable_or_not = #{corpsDesc.enableOrNot}
+        </if>
+        <if test='corpsDesc.typeList !=null and corpsDesc.typeList.size>0'>
+            and id in (
+            SELECT
+            DISTINCT
+            corp_id
+            FROM
+            pjpf_corps_type_desc
+            WHERE
+            status = 0
+            AND corp_type_id in
+            <foreach collection="corpsDesc.typeList" index="index" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+            )
+        </if>
+    </select>
+
+</mapper>

+ 30 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/customer/service/FcCustomerDescService.java

@@ -1,10 +1,40 @@
 package com.gubersail.admin.fc.customer.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gubersail.dealer.admin.api.fc.customer.entity.FcCustomerDesc;
+import com.gubersail.dealer.admin.api.fc.customer.vo.FcCustomerDescVo;
+import org.springblade.core.tool.api.R;
+
+import javax.validation.Valid;
 
 /**
  * @author Rain
  */
 public interface FcCustomerDescService extends IService<FcCustomerDesc> {
+
+	/**
+	 * 查询工厂客户信息
+	 *
+	 * @param page      分页
+	 * @param corpsDesc 参数
+	 * @return 结果
+	 */
+	IPage<FcCustomerDescVo> selectCorpsDescPage(IPage<FcCustomerDescVo> page, FcCustomerDescVo corpsDesc);
+
+	/**
+	 * 保存客户信息
+	 *
+	 * @param corpsDesc 参数
+	 * @return 结果
+	 */
+	R submit(@Valid FcCustomerDescVo corpsDesc);
+
+	/**
+	 * 获取客户信息
+	 *
+	 * @param corpsDesc 参数
+	 * @return 结果
+	 */
+	FcCustomerDescVo getMessageById(FcCustomerDesc corpsDesc);
 }

+ 78 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/controller/ProductLaunchController.java

@@ -0,0 +1,78 @@
+package com.gubersail.admin.fc.price.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.gubersail.admin.fc.price.service.ProductLaunchService;
+import com.gubersail.dealer.admin.api.fc.price.entity.ProductLaunch;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @author Rain
+ */
+@RestController
+@RequestMapping("/fc/price/")
+@AllArgsConstructor
+public class ProductLaunchController {
+
+    private final ProductLaunchService productLaunchService;
+
+
+
+    /**
+     * 分页 配件批发产品上架
+     */
+    @GetMapping("/list")
+    public R<IPage<ProductLaunch>> list(ProductLaunch productLaunch, Query query) {
+        LambdaQueryWrapper<ProductLaunch> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(ProductLaunch::getTenantId, AuthUtil.getTenantId())
+                .eq(ProductLaunch::getIsDeleted, 0)
+                .eq(Objects.nonNull(productLaunch.getBrandId()), ProductLaunch::getBrandId, productLaunch.getBrandId())
+                .like(StringUtils.hasText(productLaunch.getBrandItem()), ProductLaunch::getBrandItem, productLaunch.getBrandItem())
+                .eq(Objects.nonNull(productLaunch.getBillType()), ProductLaunch::getBillType, productLaunch.getBillType())
+                .eq(Objects.nonNull(productLaunch.getExplosionProof()), ProductLaunch::getExplosionProof, productLaunch.getExplosionProof())
+                .eq(Objects.nonNull(productLaunch.getOriginalFactory()), ProductLaunch::getOriginalFactory, productLaunch.getOriginalFactory())
+                .eq(Objects.nonNull(productLaunch.getSelfRecovery()), ProductLaunch::getSelfRecovery, productLaunch.getSelfRecovery())
+                .like(StringUtils.hasText(productLaunch.getSpecificationAndModel()), ProductLaunch::getSpecificationAndModel, productLaunch.getSpecificationAndModel())
+                .eq(Objects.nonNull(productLaunch.getUpAndDownShelves()), ProductLaunch::getUpAndDownShelves, productLaunch.getUpAndDownShelves())
+                .like(StringUtils.hasText(productLaunch.getCname()), ProductLaunch::getCname, productLaunch.getCname());
+        lambdaQueryWrapper.eq(ProductLaunch::getSalesCompanyId, AuthUtil.getDeptId());
+        IPage<ProductLaunch> pages = productLaunchService.page(Condition.getPage(query), lambdaQueryWrapper);
+        return R.data(pages);
+    }
+
+    @PostMapping("/submitProduct")
+    public R submitProduct(@RequestBody @Valid ProductLaunch productLaunch) {
+        return productLaunchService.submitProduct(productLaunch);
+    }
+
+    @PostMapping("/saveProduct")
+    public R saveProduct(@RequestBody ProductLaunch productLaunch) {
+        return productLaunchService.saveProduct(productLaunch);
+    }
+
+    @PostMapping("/disabledProduct")
+    public R disabledProduct(@RequestParam("id") Long id) {
+        return productLaunchService.disabledProduct(id);
+    }
+
+    @PostMapping("/revokeProduct")
+    public R revokeProduct(@RequestParam("id") Long id) {
+        return productLaunchService.revokeProduct(id);
+    }
+
+    @PostMapping("/deleteProduct")
+    public R deleteProduct(@RequestBody List<Long> ids) {
+        return productLaunchService.deleteProduct(ids);
+    }
+
+}

+ 69 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/impl/ProductLaunchServiceImpl.java

@@ -0,0 +1,69 @@
+package com.gubersail.admin.fc.price.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gubersail.admin.fc.price.mapper.ProductLaunchMapper;
+import com.gubersail.admin.fc.price.service.ProductLaunchService;
+import com.gubersail.dealer.admin.api.fc.price.entity.ProductLaunch;
+import lombok.AllArgsConstructor;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+@Service
+@AllArgsConstructor
+public class ProductLaunchServiceImpl extends ServiceImpl<ProductLaunchMapper, ProductLaunch> implements ProductLaunchService {
+
+
+	@Override
+	public R submitProduct(ProductLaunch productLaunch) {
+		BladeUser bladeUser = AuthUtil.getUser();
+		productLaunch.setUserAndDept(bladeUser);
+		productLaunch.setTenantId(bladeUser.getTenantId());
+		return null;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R saveProduct(ProductLaunch productLaunch) {
+		BladeUser bladeUser = AuthUtil.getUser();
+		productLaunch.setUserAndDept(bladeUser);
+		productLaunch.setTenantId(bladeUser.getTenantId());
+		return R.status(this.saveOrUpdate(productLaunch));
+	}
+
+	@Override
+	public R disabledProduct(Long id) {
+		ProductLaunch productLaunch = new ProductLaunch();
+		productLaunch.setId(id);
+		productLaunch.setUpAndDownShelves(0);
+		productLaunch.setUpdateTime(new Date());
+		productLaunch.setUpdateUser(AuthUtil.getUserId());
+		return R.status(baseMapper.updateById(productLaunch) > 0);
+	}
+
+	@Override
+	public R revokeProduct(Long id) {
+		ProductLaunch productLaunch = new ProductLaunch();
+		productLaunch.setId(id);
+		productLaunch.setStatus("0");
+		productLaunch.setUpdateTime(new Date());
+		productLaunch.setUpdateUser(AuthUtil.getUserId());
+		return R.status(baseMapper.updateById(productLaunch) > 0);
+	}
+
+	@Override
+	public R deleteProduct(List<Long> ids) {
+		ProductLaunch productLaunch = new ProductLaunch();
+		// baseMapper.update(, new LambdaQueryWrapper<>().in(ProductLaunch::getId, ids));
+		return null;
+	}
+}

+ 10 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/mapper/ProductLaunchMapper.java

@@ -0,0 +1,10 @@
+package com.gubersail.admin.fc.price.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gubersail.dealer.admin.api.fc.price.entity.ProductLaunch;
+
+/**
+ * @author Rain
+ */
+public interface ProductLaunchMapper extends BaseMapper<ProductLaunch> {
+}

+ 45 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/mapper/ProductLaunchMapper.xml

@@ -0,0 +1,45 @@
+<?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="com.gubersail.admin.fc.price.mapper.ProductLaunchMapper">
+
+    <resultMap id="productResultMap" type="com.gubersail.dealer.admin.api.fc.price.entity.ProductLaunch">
+        <id property="id" column="id"/>
+        <result property="tenantId" column="tenant_id"/>
+        <result property="createUser" column="create_user"/>
+        <result property="createDept" column="create_dept"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateUser" column="update_user"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="isDeleted" column="is_deleted"/>
+        <result property="remarks" column="remarks"/>
+        <result property="status" column="status"/>
+        <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="upAndDownShelves" column="up_and_down_shelves"/>
+        <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="billType" column="bill_type"/>
+        <result property="sourceId" column="source_id"/>
+        <result property="sourceCompanyId" column="source_company_id"/>
+        <result property="sharedCompany" column="shared_company"/>
+        <result property="brandId" column="brand_id"/>
+        <result property="brandName" column="brand_name"/>
+        <result property="whetherShare" column="whether_share"/>
+        <result property="detailsText" column="details_text"/>
+        <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="version" column="version"/>
+    </resultMap>
+
+
+</mapper>

+ 54 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/fc/price/service/ProductLaunchService.java

@@ -0,0 +1,54 @@
+package com.gubersail.admin.fc.price.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gubersail.dealer.admin.api.fc.price.entity.ProductLaunch;
+import org.springblade.core.tool.api.R;
+
+import java.util.List;
+
+/**
+ * @author Rain
+ */
+public interface ProductLaunchService extends IService<ProductLaunch> {
+
+    /**
+     * 提交产品
+     *
+     * @param productLaunch 参数
+     * @return 解雇
+     */
+    R submitProduct(ProductLaunch productLaunch);
+
+    /**
+     * 保存产品
+     *
+     * @param productLaunch 参数
+     * @return 结果
+     */
+    R saveProduct(ProductLaunch productLaunch);
+
+    /**
+     * 禁用客户
+     *
+     * @param id id
+     * @return 结果
+     */
+    R disabledProduct(Long id);
+
+
+    /**
+     * 撤销客户状态从提价到保存
+     *
+     * @param id id
+     * @return 结果
+     */
+    R revokeProduct(Long id);
+
+    /**
+     * 删除客户
+     *
+     * @param ids id
+     * @return 结果
+     */
+    R deleteProduct(List<Long> ids);
+}

+ 1 - 4
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/goods/controller/BrandDescController.java

@@ -279,13 +279,10 @@ public class BrandDescController extends BladeController {
 		LambdaQueryWrapper<PjBrandDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
 		lambdaQueryWrapper.eq(PjBrandDesc::getTenantId, AuthUtil.getTenantId())
 			.eq(PjBrandDesc::getIsDeleted, 0)
-			.eq(PjBrandDesc::getType, brandDesc.getType())
+			.eq(PjBrandDesc::getType, "PP")
 			.eq(ObjectUtils.isNotNull(brandDesc.getWhetherIntegral()), PjBrandDesc::getWhetherIntegral, brandDesc.getWhetherIntegral())
 			.like(ObjectUtils.isNotEmpty(brandDesc.getCname()), PjBrandDesc::getCname, brandDesc.getCname())
 			.orderByDesc(PjBrandDesc::getSort);
-		if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("老板")) {
-			lambdaQueryWrapper.eq(PjBrandDesc::getSalesCompanyId, AuthUtil.getDeptId());//公司
-		}
 		List<PjBrandDesc> list = brandDescService.list(lambdaQueryWrapper);
 		list.forEach(e -> {
 			if (0 == e.getEnableOrNot()) {

+ 84 - 2
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/inventory/controller/StockDescController.java

@@ -1,10 +1,34 @@
 package com.gubersail.admin.inventory.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.gubersail.admin.inventory.service.IStockDescService;
+import com.gubersail.dealer.admin.api.fc.price.entity.ProductLaunch;
+import com.gubersail.dealer.admin.api.inventory.entity.PjStockDesc;
+import com.gubersail.dealer.admin.api.inventory.vo.PjStockDescVo;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springblade.core.boot.ctrl.BladeController;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
@@ -17,4 +41,62 @@ import org.springframework.web.bind.annotation.RestController;
 public class StockDescController extends BladeController {
 
 
+	private IStockDescService stockDescService;
+
+
+	/**
+	 * 分页 配件批发库存表
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入stockDesc")
+	public R<IPage<PjStockDescVo>> list(PjStockDescVo stockDesc, Query query) {
+		BladeUser bladeUser = AuthUtil.getUser();
+		LambdaQueryWrapper<PjStockDesc> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(PjStockDesc::getTenantId, bladeUser.getTenantId())
+			.eq(PjStockDesc::getIsDeleted, 0)
+			.eq(PjStockDesc::getSalesCompanyId, bladeUser.getDeptId())
+			.like(ObjectUtil.isNotEmpty(stockDesc.getCode()), PjStockDesc::getCode, stockDesc.getCode())
+			.like(ObjectUtil.isNotEmpty(stockDesc.getTypeNo()), PjStockDesc::getTypeNo, stockDesc.getTypeNo())
+			.eq(ObjectUtil.isNotEmpty(stockDesc.getStorageId()), PjStockDesc::getStorageId, stockDesc.getStorageId())
+			.like(ObjectUtil.isNotEmpty(stockDesc.getStorageName()), PjStockDesc::getStorageName, stockDesc.getStorageName())
+			.eq(ObjectUtil.isNotEmpty(stockDesc.getBrandId()), PjStockDesc::getBrandId, stockDesc.getBrandId())
+			.eq(ObjectUtil.isNotEmpty(stockDesc.getBrandName()), PjStockDesc::getBrandName, stockDesc.getBrandName())
+			.eq(ObjectUtil.isNotEmpty(stockDesc.getGoodsTypeId()), PjStockDesc::getGoodsTypeId, stockDesc.getGoodsTypeId())
+			.like(ObjectUtil.isNotEmpty(stockDesc.getDot()), PjStockDesc::getDot, stockDesc.getDot());
+		lambdaQueryWrapper.like(StringUtils.hasText(stockDesc.getCname()),  PjStockDesc::getCname, stockDesc.getCname());
+		lambdaQueryWrapper.orderByDesc(PjStockDesc::getBalanceQuantity);
+		IPage<PjStockDesc> pages = stockDescService.page(Condition.getPage(query), lambdaQueryWrapper);
+		IPage<PjStockDescVo> pagesVo = new Page<>();
+		pagesVo.setSize(pages.getSize());
+		pagesVo.setCurrent(pages.getCurrent());
+		pagesVo.setTotal(pages.getTotal());
+		if (!CollectionUtils.isEmpty(pages.getRecords())) {
+			pagesVo.setRecords(pages.getRecords().stream().map(item -> BeanUtil.copy(item, PjStockDescVo.class)).collect(Collectors.toList()));
+		}
+		return R.data(pagesVo);
+	}
+
+
+	@PostMapping("/submitGoodsStock")
+	public R submitGoodsStock(@RequestBody @Valid PjStockDesc stockDesc) {
+		return stockDescService.submitGoodsStock(stockDesc);
+	}
+
+	@PostMapping("/saveGoodsStock")
+	public R saveGoodsStock(@RequestBody PjStockDesc stockDesc) {
+		return stockDescService.saveGoodsStock(stockDesc);
+	}
+
+	@PostMapping("/disabledGoodsStock")
+	public R disabledGoodsStock(@RequestBody PjStockDesc stockDesc) {
+		return stockDescService.disabledGoodsStock(stockDesc);
+	}
+
+	@PostMapping("/revokeGoodsStock")
+	public R revokeGoodsStock(@RequestParam("id") Long id) {
+		return stockDescService.revokeGoodsStock(id);
+	}
+
+
 }

+ 76 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/inventory/impl/StockDescServiceImpl.java

@@ -5,8 +5,17 @@ import com.gubersail.admin.inventory.mapper.StockDescMapper;
 import com.gubersail.admin.inventory.service.IStockDescService;
 import com.gubersail.dealer.admin.api.inventory.entity.PjStockDesc;
 import lombok.AllArgsConstructor;
+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.api.R;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
+import java.util.Objects;
 
 
 /**
@@ -17,5 +26,72 @@ import org.springframework.stereotype.Service;
 public class StockDescServiceImpl extends ServiceImpl<StockDescMapper, PjStockDesc> implements IStockDescService {
 
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R submitGoodsStock(PjStockDesc stockDesc) {
+		R<String> verifyResult = this.verifyVersion(stockDesc);
+		if (verifyResult != null) {
+			return verifyResult;
+		}
+		BladeUser bladeUser = AuthUtil.getUser();
+		if (Objects.nonNull(stockDesc.getId())) {
+			PjStockDesc srcStock = this.getById(stockDesc.getId());
+			if (!stockDesc.getVersion().equals(srcStock.getVersion())) {
+				return R.fail(601, "数据已被其他用户更新,请刷新后重试");
+			}
+		}
+		stockDesc.setTenantId(bladeUser.getTenantId());
+		stockDesc.setUserAndDept(bladeUser);
+		stockDesc.setStatus(CommonEnum.ONE.info);
+		return R.status(this.saveOrUpdate(stockDesc));
+	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public R saveGoodsStock(PjStockDesc stockDesc) {
+		R<String> verifyResult = this.verifyVersion(stockDesc);
+		if (verifyResult != null) {
+			return verifyResult;
+		}
+		BladeUser bladeUser = AuthUtil.getUser();
+		stockDesc.setTenantId(bladeUser.getTenantId());
+		stockDesc.setUserAndDept(bladeUser);
+		stockDesc.setStatus(CommonEnum.ZERO.info);
+		return R.status(this.saveOrUpdate(stockDesc));
+	}
+
+	@Override
+	public R disabledGoodsStock(PjStockDesc stockDesc) {
+		R<String> verifyResult = this.verifyVersion(stockDesc);
+		if (verifyResult != null) {
+			return verifyResult;
+		}
+		BladeUser bladeUser = AuthUtil.getUser();
+		PjStockDesc updateDesc = new PjStockDesc();
+		updateDesc.setId(stockDesc.getId());
+		updateDesc.setUpAndDownShelves(stockDesc.getUpAndDownShelves());
+		updateDesc.setUserAndDept(bladeUser);
+		return R.status(this.updateById(updateDesc));
+	}
+
+	@Override
+	public R revokeGoodsStock(Long id) {
+		BladeUser bladeUser = AuthUtil.getUser();
+		PjStockDesc updateDesc = new PjStockDesc();
+		updateDesc.setId(id);
+		updateDesc.setStatus(CommonEnum.ZERO.info);
+		updateDesc.setUserAndDept(bladeUser);
+		return R.status(this.updateById(updateDesc));
+	}
+
+	private R<String> verifyVersion (PjStockDesc stockDesc) {
+		if (Objects.isNull(stockDesc.getId())) {
+			return null;
+		}
+		PjStockDesc srcStock = this.getById(stockDesc.getId());
+		if (!stockDesc.getVersion().equals(srcStock.getVersion())) {
+			return R.fail(601, "数据已被其他用户更新,请刷新后重试");
+		}
+		return null;
+	}
 }

+ 7 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/inventory/mapper/StockDescMapper.xml

@@ -29,6 +29,13 @@
         <result column="sales_company_name" property="salesCompanyName"/>
         <result column="goods_type_name" property="goodsTypeName"/>
         <result column="version" property="version"/>
+        <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="u9GoodsId" column="u9_goods_id"/>
+        <result property="u9StockId" column="u9_stock_id"/>
+        <result property="upAndDownShelves" column="up_and_down_shelves"/>
     </resultMap>
 
 

+ 35 - 0
blade-service/gubersail-dealer-admin/src/main/java/com/gubersail/admin/inventory/service/IStockDescService.java

@@ -2,6 +2,9 @@ package com.gubersail.admin.inventory.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gubersail.dealer.admin.api.inventory.entity.PjStockDesc;
+import org.springblade.core.tool.api.R;
+
+import javax.validation.Valid;
 
 
 /**
@@ -10,4 +13,36 @@ import com.gubersail.dealer.admin.api.inventory.entity.PjStockDesc;
 public interface IStockDescService extends IService<PjStockDesc> {
 
 
+	/**
+	 * 提交库存
+	 *
+	 * @param stockDesc 参数
+	 * @return 结果
+	 */
+	R submitGoodsStock(PjStockDesc stockDesc);
+
+
+	/**
+	 * 保存库存
+	 *
+	 * @param stockDesc 参数
+	 * @return 结果
+	 */
+	R saveGoodsStock(PjStockDesc stockDesc);
+
+	/**
+	 * 禁用启用
+	 *
+	 * @param stockDesc 参数
+	 * @return 结果
+	 */
+	R disabledGoodsStock(PjStockDesc stockDesc);
+
+	/**
+	 * 撤销库存
+	 *
+	 * @param id id
+	 * @return 结果
+	 */
+	R revokeGoodsStock(Long id);
 }