联调同步。

master
Tom Li 2 weeks ago
parent f0be49f93a
commit 87ad513219
  1. 4
      src/main/java/org/springblade/modules/jinchao/constant/ContactConst.java
  2. 2
      src/main/java/org/springblade/modules/jinchao/constant/ProductConst.java
  3. 13
      src/main/java/org/springblade/modules/jinchao/controller/ContactController.java
  4. 3
      src/main/java/org/springblade/modules/jinchao/controller/CustomerController.java
  5. 75
      src/main/java/org/springblade/modules/jinchao/controller/ProductController.java
  6. 11
      src/main/java/org/springblade/modules/jinchao/controller/ProductObjController.java
  7. 16
      src/main/java/org/springblade/modules/jinchao/mapper/CustomerMapper.xml
  8. 3
      src/main/java/org/springblade/modules/jinchao/mapper/ProductMapper.java
  9. 5
      src/main/java/org/springblade/modules/jinchao/pojo/entity/ProductObjEntity.java
  10. 12
      src/main/java/org/springblade/modules/jinchao/pojo/vo/ProductVO.java
  11. 13
      src/main/java/org/springblade/modules/jinchao/service/IProductService.java
  12. 9
      src/main/java/org/springblade/modules/jinchao/service/impl/CustomerServiceImpl.java
  13. 61
      src/main/java/org/springblade/modules/jinchao/service/impl/ProductServiceImpl.java
  14. 8
      src/main/java/org/springblade/modules/jinchao/wrapper/ProductWrapper.java

@ -12,7 +12,7 @@ public interface ContactConst {
*/
Integer TYPE_SECONDARY = 2;
String DICT_1 = "dict_1";
String DICT_CUSTOMER_COUNTRY = "customer_country";
String DICT_2 = "dict_2";
String DICT_CUSTOMER_FROM_TYPE = "customer_from_type";
}

@ -10,5 +10,5 @@ public interface ProductConst {
/**
* 特定价格
*/
Integer TYPE_PRICE_CUS = 2;
Integer TYPE_PRICE_CUSTOM = 2;
}

@ -41,6 +41,7 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.jinchao.constant.ContactConst;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -55,6 +56,7 @@ import org.springblade.core.excel.util.ExcelUtil;
import java.util.Map;
import java.util.List;
import java.util.Objects;
import jakarta.servlet.http.HttpServletResponse;
@ -146,10 +148,16 @@ public class ContactController extends BladeController {
@ApiOperationSupport(order = 7)
@Operation(summary = "逻辑删除", description = "传入ids")
public R remove(@Parameter(description = "主键集合", required = true) @RequestParam String ids) {
return R.status(service.deleteLogic(Func.toLongList(ids)));
List<Long> listIds = Func.toLongList(ids);
listIds.forEach(id -> {
ContactEntity c = service.getById(id);
if (Objects.equals(ContactConst.TYPE_MAIN, c.getContactType())) {
R.fail("客户的第一个联系人不允许删除.");
}
});
return R.status(service.deleteLogic(listIds));
}
/**
* 导出数据
*/
@ -166,5 +174,4 @@ public class ContactController extends BladeController {
List<ContactExcel> list = service.exportContact(queryWrapper);
ExcelUtil.export(response, "[客户联系人]数据" + DateUtil.time(), "[客户联系人]数据表", list, ContactExcel.class);
}
}

@ -115,7 +115,6 @@ public class CustomerController extends BladeController {
return R.data(pages);
}
/**
* [客户] 新增
*/
@ -156,11 +155,9 @@ public class CustomerController extends BladeController {
return R.status(service.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/
@IsAdmin
@GetMapping("/export-customer")
@ApiOperationSupport(order = 9)
@Operation(summary = "导出数据", description = "传入customer")

@ -37,7 +37,6 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.Func;
import org.springblade.modules.jinchao.constant.BaseCol;
import org.springblade.modules.jinchao.constant.ProductConst;
import org.springblade.modules.jinchao.pojo.vo.ProductVO;
import org.springframework.web.bind.annotation.*;
@ -53,7 +52,7 @@ import org.springblade.core.excel.util.ExcelUtil;
import java.util.Map;
import java.util.List;
import java.util.stream.Collectors;
import java.util.Objects;
import jakarta.servlet.http.HttpServletResponse;
@ -79,7 +78,8 @@ public class ProductController extends BladeController {
@Operation(summary = "详情", description = "传入product")
public R<ProductVO> detail(ProductEntity product) {
ProductEntity detail = service.getOne(Condition.getQueryWrapper(product));
return R.data(ProductWrapper.build().entityVO(detail));
ProductVO vo = ProductWrapper.build().entityVO(detail);
return R.data(vo);
}
/**
@ -90,7 +90,7 @@ public class ProductController extends BladeController {
@Operation(summary = "list分页", description = "传入product")
public R<IPage<ProductVO>> list(@Parameter(hidden = true) @RequestParam Map<String, Object> product,
Query query) {
return service.list(product,query);
return service.list(product, query);
}
/**
@ -100,7 +100,7 @@ public class ProductController extends BladeController {
@ApiOperationSupport(order = 3)
@Operation(summary = "page分页", description = "传入product")
public R<IPage<ProductVO>> page(ProductVO product, Query query) {
IPage<ProductVO> pages = service.selectProductPage(Condition.getPage(query), product);
IPage<org.springblade.modules.jinchao.pojo.vo.ProductVO> pages = service.selectProductPage(Condition.getPage(query), product);
return R.data(pages);
}
@ -110,9 +110,15 @@ public class ProductController extends BladeController {
@PostMapping("/save")
@ApiOperationSupport(order = 4)
@Operation(summary = "新增", description = "传入product")
public R save(@Valid @RequestBody ProductEntity product) {
product.setId(null);
return R.status(service.save(product));
public R save(@Valid @RequestBody ProductVO vo) {
vo.setId(null);
if (service.existsCode(vo.getCode())) {
return R.fail("已经存在此code");
}
if (service.existsNameCn(vo.getNameCn())) {
return R.fail("已经存在此nameCn");
}
return R.status(service.save(vo));
}
/**
@ -126,20 +132,53 @@ public class ProductController extends BladeController {
}
/**
* [产品] 新增或修改
* [产品] 单条新增或修改
*/
@PostMapping("/submit")
@ApiOperationSupport(order = 6)
@Operation(summary = "新增或修改", description = "传入product")
public R submit(@Valid @RequestBody ProductEntity product) {
return R.status(service.saveOrUpdate(product));
public R submit(@Valid @RequestBody ProductVO vo) {
if (vo.getId() == null || vo.getId() == 0L) {
if (service.existsCode(vo.getCode())) {
return R.fail("已经存在此code");
}
if (service.existsNameCn(vo.getNameCn())) {
return R.fail("已经存在此nameCn");
}
}
if (Objects.equals(vo.getBizType(), ProductConst.TYPE_PRICE_CUSTOM)) {
// 跳过
return R.fail("bizType类型错误");
}
return R.status(service.saveOrUpdate(vo));
}
@PostMapping("/submitBat")
@ApiOperationSupport(order = 6)
@Operation(summary = "批量新增或修改", description = "ProductEntity List")
public R submit(@Valid @RequestBody List<ProductEntity> products) {
return R.status(service.saveOrUpdateBatch(products));
public R submitBat(@Valid @RequestBody List<ProductVO> vos) {
if (vos != null && !vos.isEmpty()) {
for (ProductVO vo : vos) {
if (vo != null && Objects.equals(vo.getBizType(), ProductConst.TYPE_PRICE_CUSTOM)) {
// 跳过
continue;
}
if (Objects.requireNonNull(vo).getId() == null || vo.getId() == 0L) {
// 新增check
if (service.existsCode(vo.getCode())) {
return R.fail("已经存在此code");
}
if (service.existsNameCn(vo.getNameCn())) {
return R.fail("已经存在此nameCn");
}
// 新增
service.save(vo);
} else {
service.updateById(vo);
}
}
}
return R.success();
}
/**
@ -158,7 +197,8 @@ public class ProductController extends BladeController {
@GetMapping("/export-product")
@ApiOperationSupport(order = 9)
@Operation(summary = "导出数据", description = "传入product")
public void exportProduct(@Parameter(hidden = true) @RequestParam Map<String, Object> product, BladeUser bladeUser, HttpServletResponse response) {
public void exportProduct(@Parameter(hidden = true) @RequestParam Map<String, Object> product,
BladeUser bladeUser, HttpServletResponse response) {
QueryWrapper<ProductEntity> queryWrapper = Condition.getQueryWrapper(product, ProductEntity.class);
//if (!AuthUtil.isAdministrator()) {
// queryWrapper.lambda().eq(Product::getTenantId, bladeUser.getTenantId());
@ -167,4 +207,11 @@ public class ProductController extends BladeController {
List<ProductExcel> list = service.exportProduct(queryWrapper);
ExcelUtil.export(response, "[产品]数据" + DateUtil.time(), "[产品]数据表", list, ProductExcel.class);
}
@PostMapping("/oneKeyMatch")
@ApiOperationSupport(order = 10)
@Operation(summary = "一键匹配", description = "")
public R oneKeyMatch(@Parameter(description = "一键匹配", required = true) @Valid @RequestBody List<ProductVO> list) {
return service.oneKeyMatch(list);
}
}

@ -140,6 +140,16 @@ public class ProductObjController extends BladeController {
return R.status(productObjService.saveOrUpdate(productObj));
}
/**
* [产品实物] 批量新增或修改
*/
@PostMapping("/submitBat")
@ApiOperationSupport(order = 6)
@Operation(summary = "批量新增或修改", description = "传入productObj")
public R submitBat(@Valid @RequestBody List<ProductObjEntity> productObjs) {
return R.status(productObjService.saveOrUpdateBatch(productObjs));
}
/**
* [产品实物] 删除
*/
@ -150,7 +160,6 @@ public class ProductObjController extends BladeController {
return R.status(productObjService.deleteLogic(Func.toLongList(ids)));
}
/**
* 导出数据
*/

@ -45,8 +45,8 @@
c.company_name AS company_name,
c.country AS country,
c.from_type AS from_type,
c.address_1 AS address_1,
c.address_2 AS address_2,
c.address1 AS address1,
c.address2 AS address2,
c.create_user AS create_user,
c.create_time AS create_time,
c.create_dept AS create_dept,
@ -59,22 +59,22 @@
AND u.is_deleted = 0
WHERE c.is_deleted = 0
<if test="q.companyName != null and q.companyName != ''">
AND (c.company_name LIKE CONCAT('%', ${q.companyName}, '%'))
AND (c.company_name LIKE CONCAT('%', #{q.companyName}, '%'))
</if>
<if test="q.country != null and q.country != ''">
AND (c.country = ${q.country})
AND (c.country = #{q.country})
</if>
<if test="q.contactName != null and q.contactName != ''">
AND (ct.name LIKE CONCAT('%', ${q.contactName}, '%'))
AND (ct.name LIKE CONCAT('%', #{q.contactName}, '%'))
</if>
<if test="q.createUserName != null and q.createUserName != ''">
AND (u.real_name LIKE CONCAT('%', ${q.createUserName}, '%'))
AND (u.real_name LIKE CONCAT('%', #{q.createUserName}, '%'))
</if>
GROUP BY c.id,
c.company_name,
c.country,
c.address_1,
c.address_2,
c.address1,
c.address2,
c.status,
c.create_time,
u.real_name,

@ -26,7 +26,6 @@
package org.springblade.modules.jinchao.mapper;
import org.springblade.modules.jinchao.pojo.entity.ProductEntity;
import org.springblade.modules.jinchao.pojo.vo.ProductVO;
import org.springblade.modules.jinchao.excel.ProductExcel;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
@ -49,7 +48,7 @@ public interface ProductMapper extends BaseMapper<ProductEntity> {
* @param product 查询参数
* @return List<ProductVO>
*/
List<ProductVO> selectProductPage(IPage page, ProductVO product);
List<org.springblade.modules.jinchao.pojo.vo.ProductVO> selectProductPage(IPage page, org.springblade.modules.jinchao.pojo.vo.ProductVO product);
/**

@ -58,9 +58,9 @@ public class ProductObjEntity extends TenantEntity {
@Schema(description = "[产品]id")
private Long productId;
/**
* 中文名称
* 产品实物名称
*/
@Schema(description = "中文名称")
@Schema(description = "产品实物名称")
private String name;
/**
* 规格
@ -77,5 +77,4 @@ public class ProductObjEntity extends TenantEntity {
*/
@Schema(description = "备注")
private String remark;
}

@ -28,9 +28,7 @@ package org.springblade.modules.jinchao.pojo.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springblade.modules.jinchao.constant.ProductConst;
import org.springblade.modules.jinchao.pojo.entity.ProductEntity;
import org.springblade.modules.jinchao.pojo.entity.ProductObjEntity;
import java.io.Serial;
@ -61,11 +59,21 @@ public class ProductVO extends ProductEntity {
*/
@Schema(description = "业务员[用户]id")
private Long saleUserId;
/**
* 业务员[用户]名称
*/
@Schema(description = "业务员[用户]名称")
private String saleUserRealName;
/**
* [客户]id
*/
@Schema(description = "[客户]id")
private Long customerId;
/**
* [客户]公司名称
*/
@Schema(description = "[客户]公司名称")
private String customerCompanyName;
/**
* 特定用户价格
*/

@ -26,16 +26,13 @@
package org.springblade.modules.jinchao.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import io.swagger.v3.oas.annotations.Parameter;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.modules.jinchao.pojo.entity.ProductEntity;
import org.springblade.modules.jinchao.pojo.vo.CustomerVO;
import org.springblade.modules.jinchao.pojo.vo.ProductVO;
import org.springblade.modules.jinchao.excel.ProductExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseService;
import org.springframework.web.bind.annotation.RequestParam;
import org.springblade.modules.jinchao.pojo.vo.ProductVO;
import java.util.List;
import java.util.Map;
@ -54,7 +51,7 @@ public interface IProductService extends BaseService<ProductEntity> {
* @param product 查询参数
* @return IPage<ProductVO>
*/
IPage<ProductVO> selectProductPage(IPage<ProductVO> page, ProductVO product);
IPage<org.springblade.modules.jinchao.pojo.vo.ProductVO> selectProductPage(IPage<org.springblade.modules.jinchao.pojo.vo.ProductVO> page, org.springblade.modules.jinchao.pojo.vo.ProductVO product);
/**
@ -67,5 +64,11 @@ public interface IProductService extends BaseService<ProductEntity> {
R<IPage<ProductVO>> list(Map<String, Object> product, Query query);
Boolean existsCode(String code);
Boolean existsNameCn(String nameCn);
void setVoValue(ProductVO vo);
R<List<ProductVO>> oneKeyMatch(List<ProductVO> list);
}

@ -50,6 +50,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* [客户] 服务实现类
@ -132,7 +133,9 @@ public class CustomerServiceImpl extends BaseServiceImpl<CustomerMapper, Custome
@Override
public IPage<CustomerVO> search(IPage<CustomerVO> page, CustomerSearch search) {
return null;
IPage<CustomerVO> pagesVo = page.setRecords(baseMapper.searchPage(page, search));
pagesVo.getRecords().stream().peek(this::setVoValue).collect(Collectors.toList());
return pagesVo;
}
@Override
@ -145,8 +148,8 @@ public class CustomerServiceImpl extends BaseServiceImpl<CustomerMapper, Custome
@Override
public void setVoValue(CustomerVO vo) {
vo.setCountryValue(dictService.getValue(ContactConst.DICT_1, vo.getCountry()));
vo.setFromTypeValue(dictService.getValue(ContactConst.DICT_2, vo.getFromType()));
vo.setCountryValue(dictService.getValue(ContactConst.DICT_CUSTOMER_COUNTRY, vo.getCountry()));
vo.setFromTypeValue(dictService.getValue(ContactConst.DICT_CUSTOMER_FROM_TYPE, vo.getFromType()));
{
ContactEntity contactF = contactService.getOne(
new QueryWrapper<ContactEntity>()

@ -35,26 +35,28 @@ import org.springblade.core.mp.support.Query;
import org.springblade.core.tool.api.R;
import org.springblade.modules.jinchao.constant.BaseCol;
import org.springblade.modules.jinchao.constant.ProductConst;
import org.springblade.modules.jinchao.mapper.BizPriceMapper;
import org.springblade.modules.jinchao.pojo.entity.BizPriceEntity;
import org.springblade.modules.jinchao.pojo.entity.CustomerEntity;
import org.springblade.modules.jinchao.pojo.entity.ProductEntity;
import org.springblade.modules.jinchao.pojo.vo.ProductVO;
import org.springblade.modules.jinchao.excel.ProductExcel;
import org.springblade.modules.jinchao.mapper.ProductMapper;
import org.springblade.modules.jinchao.pojo.vo.ProductVO;
import org.springblade.modules.jinchao.service.IBizPriceService;
import org.springblade.modules.jinchao.service.ICustomerService;
import org.springblade.modules.jinchao.service.IProductService;
import org.springblade.modules.jinchao.wrapper.ProductWrapper;
import org.springblade.modules.system.pojo.entity.User;
import org.springblade.modules.system.service.IUserService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springblade.core.mp.base.BaseServiceImpl;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@ -69,13 +71,15 @@ import java.util.stream.Collectors;
@Slf4j
public class ProductServiceImpl extends BaseServiceImpl<ProductMapper, ProductEntity> implements IProductService {
@Resource
private IUserService userService;
@Resource
private IBizPriceService bizPriceService;
@Resource
private ICustomerService customerService;
@Override
public IPage<ProductVO> selectProductPage(IPage<ProductVO> page, ProductVO product) {
public IPage<org.springblade.modules.jinchao.pojo.vo.ProductVO> selectProductPage(IPage<org.springblade.modules.jinchao.pojo.vo.ProductVO> page, org.springblade.modules.jinchao.pojo.vo.ProductVO product) {
return page.setRecords(baseMapper.selectProductPage(page, product));
}
@ -99,18 +103,27 @@ public class ProductServiceImpl extends BaseServiceImpl<ProductMapper, ProductEn
while (it.hasNext()) {
ProductVO vo = it.next();
vo.setBizType(ProductConst.TYPE_PRICE_STANDARD);
// TYPE_PRICE_CUSTOM 数据是拼接上的
long count = bizPriceService.count(
new QueryWrapper<BizPriceEntity>().eq("product_id", vo.getId())
);
if (count != 0L) {
List<BizPriceEntity> listBP = bizPriceService.listByProductId(vo.getId());
listBP.forEach(bp -> {
log.info("bp = {}",bp);
log.info("bp = {}", bp);
ProductVO vo2 = new ProductVO();
BeanUtils.copyProperties(vo, vo2);
vo2.setBizType(ProductConst.TYPE_PRICE_CUS);
vo2.setBizType(ProductConst.TYPE_PRICE_CUSTOM);
vo2.setBizPriceId(bp.getId());
BeanUtils.copyProperties(bp, vo2);
User u = userService.getById(vo2.getSaleUserId());
if (u != null) {
vo2.setSaleUserRealName(u.getRealName());
}
CustomerEntity c = customerService.getById(vo2.getCustomerId());
if (c != null) {
vo2.setCustomerCompanyName(c.getCompanyName());
}
vo2.setBizRemark("客户:" + customerService.getById(bp.getCustomerId()).getCompanyName());
it.add(vo2);
});
@ -121,8 +134,44 @@ public class ProductServiceImpl extends BaseServiceImpl<ProductMapper, ProductEn
return R.data(pagesVo);
}
@Override
public Boolean existsCode(String code) {
return baseMapper.exists(new QueryWrapper<ProductEntity>().eq("code", code));
}
@Override
public Boolean existsNameCn(String nameCn) {
return baseMapper.exists(new QueryWrapper<ProductEntity>().eq("name_cn", nameCn));
}
/**
* 不带biz价格
*
* @param vo 传入的对象已经BizType赋值了.
*/
@Override
public void setVoValue(ProductVO vo) {
if (vo != null) {
if (Objects.equals(ProductConst.TYPE_PRICE_CUSTOM, vo.getBizType())) {
}
}
}
@Override
public R<List<ProductVO>> oneKeyMatch(List<ProductVO> list) {
List<ProductVO> listNew = list.stream()
.map(vo -> {
ProductEntity pFind = getOne(new QueryWrapper<ProductEntity>().eq("name_cn", vo.getNameCn()));
if (pFind != null) {
ProductVO voNew = new ProductVO();
BeanUtils.copyProperties(pFind, voNew);
voNew.setBizType(ProductConst.TYPE_PRICE_STANDARD);
return voNew;
}
vo.setBizType(ProductConst.TYPE_PRICE_STANDARD);
return vo;
}).collect(Collectors.toList());
return R.data(listNew);
}
}

@ -28,7 +28,7 @@ package org.springblade.modules.jinchao.wrapper;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.modules.jinchao.pojo.entity.ProductEntity;
import org.springblade.modules.jinchao.pojo.vo.ProductVO;
import java.util.Objects;
/**
@ -37,15 +37,15 @@ import java.util.Objects;
* @author BladeX
* @since 2025-12-01
*/
public class ProductWrapper extends BaseEntityWrapper<ProductEntity, ProductVO> {
public class ProductWrapper extends BaseEntityWrapper<ProductEntity, org.springblade.modules.jinchao.pojo.vo.ProductVO> {
public static ProductWrapper build() {
return new ProductWrapper();
}
@Override
public ProductVO entityVO(ProductEntity product) {
ProductVO productVO = Objects.requireNonNull(BeanUtil.copyProperties(product, ProductVO.class));
public org.springblade.modules.jinchao.pojo.vo.ProductVO entityVO(ProductEntity product) {
org.springblade.modules.jinchao.pojo.vo.ProductVO productVO = Objects.requireNonNull(BeanUtil.copyProperties(product, org.springblade.modules.jinchao.pojo.vo.ProductVO.class));
//User createUser = UserCache.getUser(product.getCreateUser());
//User updateUser = UserCache.getUser(product.getUpdateUser());

Loading…
Cancel
Save