24282 2 éve
szülő
commit
ee4139e173
20 módosított fájl, 931 hozzáadás és 3 törlés
  1. 5 1
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/product/service/impl/ProductServiceImpl.java
  2. 63 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/controller/ServiceContractController.java
  3. 7 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/dto/GetServiceContractPageDto.java
  4. 143 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/po/ServiceContract.java
  5. 52 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/po/ServiceContractProduct.java
  6. 31 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/vo/ServiceContractProductVo.java
  7. 29 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/vo/ServiceContractVo.java
  8. 16 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/mapper/ServiceContractMapper.java
  9. 5 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/mapper/ServiceContractMapper.xml
  10. 16 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/mapper/ServiceContractProductMapper.java
  11. 5 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/mapper/ServiceContractProductMapper.xml
  12. 16 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/service/ServiceContractProductService.java
  13. 27 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/service/ServiceContractService.java
  14. 20 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/service/impl/ServiceContractProductServiceImpl.java
  15. 196 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/service/impl/ServiceContractServiceImpl.java
  16. 92 0
      bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/utils/CodeEnum.java
  17. 58 0
      bladex-saas-project/saas-generator/pom.xml
  18. 71 0
      bladex-saas-project/saas-generator/src/main/java/com/fly/generator/CodeGenerator.java
  19. 72 0
      bladex-tool/blade-starter-mybatis/src/main/java/org/springblade/core/mp/base/BaseSelectDto.java
  20. 7 2
      bladex-tool/blade-starter-mybatis/src/main/java/org/springblade/core/mp/base/BasicsEntity.java

+ 5 - 1
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/product/service/impl/ProductServiceImpl.java

@@ -87,7 +87,11 @@ public class ProductServiceImpl extends BasicsServiceImpl<ProductMapper, Product
                     continue;
                 }
                 //筛选出主图
-                List<String> mainIcons = attachments.stream().filter(obj -> obj.getBusiType() == AttachmentConstant.BusiType.MIAN_IMAG).map(Attachment::getPath).collect(Collectors.toList());
+                List<String> mainIcons = attachments.stream()
+                        .filter(obj -> obj.getBusiType() == AttachmentConstant.BusiType.MIAN_IMAG)
+                        .map(Attachment::getPath)
+                        .collect(Collectors.toList());
+
                 if (CollectionUtils.isNotEmpty(mainIcons)) {
                     product.setMainIcon(mainIcons.get(0));
                 }

+ 63 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/controller/ServiceContractController.java

@@ -0,0 +1,63 @@
+package com.fjhx.service.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.service.entity.dto.GetServiceContractPageDto;
+import com.fjhx.service.entity.po.ServiceContract;
+import com.fjhx.service.entity.vo.ServiceContractVo;
+import com.fjhx.service.service.ServiceContractService;
+import org.springblade.core.tool.api.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 服务合同 前端控制器
+ * </p>
+ *
+ * @author zlj
+ * @since 2023-02-17
+ */
+@RestController
+@RequestMapping("/serviceContract")
+public class ServiceContractController {
+
+    @Autowired
+    private ServiceContractService serviceContractService;
+
+    /**
+     * 分页
+     */
+    @PostMapping("/page")
+    public R getPage(@RequestBody GetServiceContractPageDto dto) {
+        Page<ServiceContractVo> page = serviceContractService.getPage(dto);
+        return R.data(page);
+    }
+
+    /**
+     * 添加
+     */
+    @PostMapping("/add")
+    public R add(@RequestBody ServiceContractVo serviceContractVo) {
+        serviceContractService.add(serviceContractVo);
+        return R.success();
+    }
+
+    /**
+     * 标记
+     */
+    @PostMapping("/edit")
+    public R edit(@RequestBody ServiceContractVo serviceContractVo) {
+        serviceContractService.edit(serviceContractVo);
+        return R.success();
+    }
+
+    @PostMapping("/detail")
+    public R detail(@RequestBody ServiceContract serviceContract) {
+        ServiceContractVo result = serviceContractService.getDetail(serviceContract.getId());
+        return R.success(result);
+    }
+
+}

+ 7 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/dto/GetServiceContractPageDto.java

@@ -0,0 +1,7 @@
+package com.fjhx.service.entity.dto;
+
+import org.springblade.core.mp.base.BaseSelectDto;
+
+public class GetServiceContractPageDto extends BaseSelectDto {
+
+}

+ 143 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/po/ServiceContract.java

@@ -0,0 +1,143 @@
+package com.fjhx.service.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.mp.base.BasicsEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 服务合同
+ * </p>
+ *
+ * @author zlj
+ * @since 2023-02-17
+ */
+@Getter
+@Setter
+@TableName("t_erp_service_contract")
+public class ServiceContract extends BasicsEntity {
+
+    /**
+     * 合同编号
+     */
+    private String code;
+
+    /**
+     * 合同进度
+     */
+    private Byte progress;
+
+    /**
+     * 合同状态 1已完成 2未完成 3作废
+     */
+    private Byte status;
+
+    /**
+     * 归属公司(企业id)
+     */
+    private String companyId;
+
+    /**
+     * 客户id
+     */
+    private String customerId;
+
+    /**
+     * 客户
+     */
+    private String customerName;
+
+    /**
+     * 国家id
+     */
+    private String countryId;
+
+    /**
+     * 国家名称
+     */
+    private String countryName;
+
+    /**
+     * 州/区
+     */
+    private String stateDistrict;
+
+    /**
+     * 国家级联id
+     */
+    private String countryLinkId;
+
+    /**
+     * 国家级联名称
+     */
+    private String countryLinkName;
+
+    /**
+     * 邮政编码
+     */
+    private String postalCode;
+
+    /**
+     * 信息地址
+     */
+    private String fullAddress;
+
+    /**
+     * 客户联系人id
+     */
+    private String customerContactPersonId;
+
+    /**
+     * 客户联系人名称
+     */
+    private String customerContactPersonName;
+
+    /**
+     * 客户联系人电话
+     */
+    private String customerContactPersonPhone;
+
+    /**
+     * 其他信息
+     */
+    private String otherInformation;
+
+    /**
+     * 服务内容
+     */
+    private String serviceContent;
+
+    /**
+     * 服务费用
+     */
+    private BigDecimal serviceAmount;
+
+    /**
+     * 产品合计金额
+     */
+    private BigDecimal productTotalAmount;
+
+    /**
+     * 合同金额
+     */
+    private BigDecimal contractAmount;
+
+    /**
+     * 收款账户id
+     */
+    private String companyBankId;
+
+    /**
+     * 其他条款
+     */
+    private String otherTerms;
+
+    /**
+     * 已到账
+     */
+    private BigDecimal accountReceived;
+
+}

+ 52 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/po/ServiceContractProduct.java

@@ -0,0 +1,52 @@
+package com.fjhx.service.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import org.springblade.core.mp.base.BasicsEntity;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 服务合同产品关联
+ * </p>
+ *
+ * @author zlj
+ * @since 2023-02-17
+ */
+@Getter
+@Setter
+@TableName("t_erp_service_contract_product")
+public class ServiceContractProduct extends BasicsEntity {
+
+    /**
+     * 服务合同id
+     */
+    private String serviceContractId;
+
+    /**
+     * 产品id
+     */
+    private String productId;
+
+    /**
+     * 单价
+     */
+    private BigDecimal unitPrice;
+
+    /**
+     * 数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 小计
+     */
+    private BigDecimal subtotal;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 31 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/vo/ServiceContractProductVo.java

@@ -0,0 +1,31 @@
+package com.fjhx.service.entity.vo;
+
+import com.fjhx.service.entity.po.ServiceContractProduct;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class ServiceContractProductVo extends ServiceContractProduct {
+
+    /**
+     * 产品主图
+     */
+    private String mainIcon;
+
+    /**
+     * 产品名称(中文)
+     */
+    private String nameChinese;
+
+    /**
+     * 产品型号(中文)
+     */
+    private String productModelChinese;
+
+    /**
+     * 采购/销售单位
+     */
+    private String unit;
+
+}

+ 29 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/entity/vo/ServiceContractVo.java

@@ -0,0 +1,29 @@
+package com.fjhx.service.entity.vo;
+
+import com.fjhx.service.entity.po.ServiceContract;
+import com.fjhx.service.entity.po.ServiceContractProduct;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class ServiceContractVo extends ServiceContract {
+
+    /**
+     * 归属公司名称
+     */
+    private String companyName;
+
+    /**
+     * 创建人id
+     */
+    private String createUserName;
+
+    /**
+     * 服务合同产品关联列表
+     */
+    private List<? extends ServiceContractProduct> serviceContractProductList;
+
+}

+ 16 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/mapper/ServiceContractMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.service.mapper;
+
+import com.fjhx.service.entity.po.ServiceContract;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 服务合同 Mapper 接口
+ * </p>
+ *
+ * @author zlj
+ * @since 2023-02-17
+ */
+public interface ServiceContractMapper extends BaseMapper<ServiceContract> {
+
+}

+ 5 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/mapper/ServiceContractMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.service.mapper.ServiceContractMapper">
+
+</mapper>

+ 16 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/mapper/ServiceContractProductMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.service.mapper;
+
+import com.fjhx.service.entity.po.ServiceContractProduct;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 服务合同产品关联 Mapper 接口
+ * </p>
+ *
+ * @author zlj
+ * @since 2023-02-17
+ */
+public interface ServiceContractProductMapper extends BaseMapper<ServiceContractProduct> {
+
+}

+ 5 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/mapper/ServiceContractProductMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.service.mapper.ServiceContractProductMapper">
+
+</mapper>

+ 16 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/service/ServiceContractProductService.java

@@ -0,0 +1,16 @@
+package com.fjhx.service.service;
+
+import com.fjhx.service.entity.po.ServiceContractProduct;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * <p>
+ * 服务合同产品关联 服务类
+ * </p>
+ *
+ * @author zlj
+ * @since 2023-02-17
+ */
+public interface ServiceContractProductService extends BaseService<ServiceContractProduct> {
+
+}

+ 27 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/service/ServiceContractService.java

@@ -0,0 +1,27 @@
+package com.fjhx.service.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.service.entity.dto.GetServiceContractPageDto;
+import com.fjhx.service.entity.po.ServiceContract;
+import com.fjhx.service.entity.vo.ServiceContractVo;
+import org.springblade.core.mp.base.BaseService;
+
+/**
+ * <p>
+ * 服务合同 服务类
+ * </p>
+ *
+ * @author zlj
+ * @since 2023-02-17
+ */
+public interface ServiceContractService extends BaseService<ServiceContract> {
+
+    Page<ServiceContractVo> getPage(GetServiceContractPageDto dto);
+
+    void add(ServiceContractVo serviceContractVo);
+
+    void edit(ServiceContractVo serviceContractVo);
+
+    ServiceContractVo getDetail(String id);
+
+}

+ 20 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/service/impl/ServiceContractProductServiceImpl.java

@@ -0,0 +1,20 @@
+package com.fjhx.service.service.impl;
+
+import com.fjhx.service.entity.po.ServiceContractProduct;
+import com.fjhx.service.mapper.ServiceContractProductMapper;
+import com.fjhx.service.service.ServiceContractProductService;
+import org.springblade.core.mp.base.BasicsServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 服务合同产品关联 服务实现类
+ * </p>
+ *
+ * @author zlj
+ * @since 2023-02-17
+ */
+@Service
+public class ServiceContractProductServiceImpl extends BasicsServiceImpl<ServiceContractProductMapper, ServiceContractProduct> implements ServiceContractProductService {
+
+}

+ 196 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/service/service/impl/ServiceContractServiceImpl.java

@@ -0,0 +1,196 @@
+package com.fjhx.service.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.common.attachment.IAttachmentApi;
+import com.fjhx.company.entity.Company;
+import com.fjhx.company.service.ICompanyService;
+import com.fjhx.product.entity.Product;
+import com.fjhx.product.service.IProductService;
+import com.fjhx.service.entity.dto.GetServiceContractPageDto;
+import com.fjhx.service.entity.po.ServiceContract;
+import com.fjhx.service.entity.po.ServiceContractProduct;
+import com.fjhx.service.entity.vo.ServiceContractProductVo;
+import com.fjhx.service.entity.vo.ServiceContractVo;
+import com.fjhx.service.mapper.ServiceContractMapper;
+import com.fjhx.service.service.ServiceContractProductService;
+import com.fjhx.service.service.ServiceContractService;
+import com.fjhx.utils.CodeEnum;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.springblade.common.constant.AttachmentConstant;
+import org.springblade.core.mp.base.BasicsEntity;
+import org.springblade.core.mp.base.BasicsServiceImpl;
+import org.springblade.core.mp.utils.PageUtil;
+import org.springblade.system.attachment.entity.Attachment;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 服务合同 服务实现类
+ * </p>
+ *
+ * @author zlj
+ * @since 2023-02-17
+ */
+@Service
+public class ServiceContractServiceImpl extends BasicsServiceImpl<ServiceContractMapper, ServiceContract> implements ServiceContractService {
+
+    @Autowired
+    private IUserClient userClient;
+
+    @Autowired
+    private ServiceContractProductService serviceContractProductService;
+
+    @Autowired
+    private ICompanyService companyService;
+
+    @Autowired
+    private IProductService productService;
+
+    @Autowired
+    private IAttachmentApi iAttachmentApi;
+
+    @Override
+    public Page<ServiceContractVo> getPage(GetServiceContractPageDto dto) {
+
+        Wrapper<ServiceContract> wrapper = Wrappers.<ServiceContract>lambdaQuery()
+                .select(BasicsEntity::getId,
+                        ServiceContract::getCompanyId,
+                        ServiceContract::getCode,
+                        ServiceContract::getProgress,
+                        BasicsEntity::getCreateTime,
+                        BasicsEntity::getCreateUser,
+                        ServiceContract::getCustomerName,
+                        ServiceContract::getCustomerContactPersonName,
+                        ServiceContract::getStatus,
+                        ServiceContract::getContractAmount,
+                        ServiceContract::getAccountReceived
+                )
+                .and(ObjectUtil.isNotEmpty(dto.getKeyword()), q -> q.like(ServiceContract::getCode, dto.getKeyword()))
+                .orderByDesc(BasicsEntity::getCreateTime);
+
+        Page<ServiceContractVo> page = PageUtil.toPage(page(dto.getPage(), wrapper), ServiceContractVo.class);
+        List<ServiceContractVo> records = page.getRecords();
+
+        if (records.size() == 0) {
+            return page;
+        }
+
+        // 归属公司id列表
+        List<String> companyIdList = records.stream().map(ServiceContract::getCompanyId).collect(Collectors.toList());
+        Map<String, String> companyMap = companyService.listByIds(companyIdList)
+                .stream().collect(Collectors.toMap(BasicsEntity::getId, Company::getNameChinese));
+
+        // 用户id列表
+        List<String> createUserIdList = records.stream().map(BasicsEntity::getCreateUser).collect(Collectors.toList());
+        Map<String, User> userMap = userClient.userInfoByIdsToMap(createUserIdList);
+
+        for (ServiceContractVo record : records) {
+            record.setCompanyName(companyMap.get(record.getCompanyId()));
+
+            User user = userMap.get(record.getCreateUser());
+            if (ObjectUtil.isNotEmpty(user)) {
+                record.setCreateUserName(user.getRealName());
+            }
+        }
+
+        return page;
+    }
+
+    @Override
+    public void add(ServiceContractVo serviceContractVo) {
+        serviceContractVo.setCode(CodeEnum.SERVICE_CONTRACT.getCode());
+        serviceContractVo.setCreate();
+        serviceContractVo.setAccountReceived(BigDecimal.ZERO);
+        save(serviceContractVo);
+
+        List<? extends ServiceContractProduct> serviceContractProductList = serviceContractVo.getServiceContractProductList();
+        if (ObjectUtil.isNotEmpty(serviceContractProductList)) {
+            return;
+        }
+        for (ServiceContractProduct serviceContractProduct : serviceContractProductList) {
+            serviceContractProduct.setServiceContractId(serviceContractVo.getId());
+        }
+        serviceContractProductService.saveBatch(BeanUtil.copyToList(serviceContractProductList, ServiceContractProduct.class));
+    }
+
+    @Override
+    public void edit(ServiceContractVo serviceContractVo) {
+        serviceContractVo.setUpdate();
+        updateById(serviceContractVo);
+    }
+
+    @Override
+    public ServiceContractVo getDetail(String id) {
+
+        ServiceContractVo serviceContractVo = BeanUtil.copyProperties(getById(id), ServiceContractVo.class);
+
+        // 服务合同产品关联
+        List<ServiceContractProductVo> serviceContractVos = BeanUtil.copyToList(
+                serviceContractProductService.list(Wrappers.<ServiceContractProduct>lambdaQuery()
+                        .eq(ServiceContractProduct::getServiceContractId, id)),
+                ServiceContractProductVo.class);
+
+        // 获取产品map
+        Map<String, Product> productMap = getProductMapByProductId(serviceContractVos);
+
+        // 赋值产品信息
+        for (ServiceContractProductVo contractVo : serviceContractVos) {
+            String productId = contractVo.getProductId();
+            Product product = productMap.get(productId);
+            if (product != null) {
+                contractVo.setMainIcon(product.getMainIcon());
+                contractVo.setNameChinese(product.getNameChinese());
+                contractVo.setProductModelChinese(product.getProductModelChinese());
+                contractVo.setUnit(product.getUnit());
+            }
+        }
+
+        // 赋值服务合同产品关联列表
+        serviceContractVo.setServiceContractProductList(serviceContractVos);
+        return serviceContractVo;
+    }
+
+    /**
+     * 获取产品map
+     */
+    private Map<String, Product> getProductMapByProductId(List<ServiceContractProductVo> serviceContractVos) {
+        List<String> productIdList = serviceContractVos.stream().map(ServiceContractProduct::getProductId).collect(Collectors.toList());
+        List<Product> productList = productService.listByIds(productIdList);
+
+        // 获取主图
+        Map<String, List<Attachment>> attachmentMap = iAttachmentApi.getByBusiIdsToMap(productIdList);
+        if (MapUtils.isNotEmpty(attachmentMap)) {
+            for (Product product : productList) {
+                List<Attachment> attachments = attachmentMap.get(product.getId());
+                if (CollectionUtils.isEmpty(attachments)) {
+                    continue;
+                }
+                // 筛选出主图
+                List<String> mainIcons = attachments.stream()
+                        .filter(obj -> obj.getBusiType() == AttachmentConstant.BusiType.MIAN_IMAG)
+                        .map(Attachment::getPath)
+                        .collect(Collectors.toList());
+
+                if (CollectionUtils.isNotEmpty(mainIcons)) {
+                    product.setMainIcon(mainIcons.get(0));
+                }
+            }
+        }
+
+        return productList.stream().collect(Collectors.toMap(BasicsEntity::getId, item -> item));
+    }
+
+}

+ 92 - 0
bladex-saas-project/saas-business-tradeerp/src/main/java/com/fjhx/utils/CodeEnum.java

@@ -0,0 +1,92 @@
+package com.fjhx.utils;
+
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fjhx.service.service.ServiceContractService;
+
+import java.util.Date;
+import java.util.Map;
+
+public enum CodeEnum {
+
+    // 供应商
+    SERVICE_CONTRACT("S", null, "code", 5, ServiceContractService.class),
+
+    ;
+
+    CodeEnum(String prefix, String dateFormat, String codeFieldName, Integer length, Class<? extends IService<?>> serviceCls) {
+        this.prefix = prefix;
+        this.dateFormat = dateFormat;
+        this.length = length;
+        this.codeFieldName = codeFieldName;
+        this.service = SpringUtil.getBean(serviceCls);
+    }
+
+    // 编码前缀
+    private final String prefix;
+    // 编码加日期规则
+    private final String dateFormat;
+    // 长度
+    private final Integer length;
+    // 编码字段名
+    private final String codeFieldName;
+    // service
+    private final IService<?> service;
+
+    /**
+     * 获取键值对
+     */
+    public String getCode() {
+        String itemPrefix;
+
+        if (ObjectUtil.isNotEmpty(dateFormat)) {
+            Date date = new Date();
+            String format = DateUtil.format(date, dateFormat);
+            itemPrefix = prefix + format;
+        } else {
+            itemPrefix = prefix;
+        }
+
+        Object obj = service.query()
+                .likeRight(codeFieldName, itemPrefix)
+                .orderByDesc(codeFieldName)
+                .last("limit 1")
+                .one();
+
+        if (obj == null) {
+            return itemPrefix + autoGenericCode(length, 0);
+        }
+
+        Map<String, Object> map = Convert.toMap(String.class, Object.class, obj);
+
+        String code = Convert.toStr(map.get(codeFieldName));
+        Integer codeNum = Convert.toInt(code.substring(itemPrefix.length()));
+        Assert.notEmpty(codeNum, "自定义编码与系统编码生成规则冲突,暂时无法生成编码,请联系管理员");
+
+        return itemPrefix + autoGenericCode(length, codeNum);
+    }
+
+    /**
+     * 获取键值对
+     */
+    public String getCode(String code) {
+        if (ObjectUtil.isNotEmpty(code)) {
+            Integer count = service.query().eq(codeFieldName, code).count();
+            Assert.eqZero(count, "编码已存在");
+            return code;
+        } else {
+            return getCode();
+        }
+    }
+
+    /**
+     * 不够位数的在前面补0,保留num的长度位数字
+     */
+    private static String autoGenericCode(int length, Integer codeNum) {
+        return String.format("%0" + length + "d", codeNum + 1);
+    }
+
+}

+ 58 - 0
bladex-saas-project/saas-generator/pom.xml

@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>BladeX-Saas-Project</artifactId>
+        <groupId>com.fjhx</groupId>
+        <version>2.8.2.RELEASE</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>saas-generator</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+    </properties>
+
+    <dependencies>
+
+        <!-- mysql数据库驱动 -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.31</version>
+        </dependency>
+
+        <!-- myBatis-plus代码自动生成工具 -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+            <version>3.5.3.1</version>
+        </dependency>
+
+        <!-- mybatis-plus -->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.3.1</version>
+        </dependency>
+
+        <!-- myBatis-plus代码自动生成模板引擎 -->
+        <dependency>
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity-engine-core</artifactId>
+            <version>2.3</version>
+        </dependency>
+
+        <!-- hutool -->
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.8.11</version>
+        </dependency>
+
+    </dependencies>
+
+</project>

+ 71 - 0
bladex-saas-project/saas-generator/src/main/java/com/fly/generator/CodeGenerator.java

@@ -0,0 +1,71 @@
+package com.fly.generator;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.ConstVal;
+import com.baomidou.mybatisplus.generator.fill.Column;
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.mp.base.BasicsServiceImpl;
+
+public class CodeGenerator {
+
+
+    // 表名
+    private static final String tableName = "t_erp_service_contract_product";
+
+    public static void main(String[] args) {
+        // userDir
+        String userDir = System.getProperty("user.dir");
+        // 项目路径
+        String url = userDir + "\\BladeX-Saas-Project\\saas-business-tradeerp\\src\\main\\java\\";
+        // 模块名称
+        String moduleName = tableName.replace("t_erp_", "").split("_")[0];
+
+        // 代码生成
+        FastAutoGenerator.create(
+                        "jdbc:mysql://139.9.184.42:3306/bladex?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true",
+                        "root",
+                        "Fjhx@pwd123"
+                )
+                .globalConfig(builder -> builder
+                        // 设置作者
+                        .author("zlj")
+                        // 指定输出目录
+                        .outputDir(url)
+                        // 禁止打开输出目录
+                        .disableOpenDir()
+                )
+                .packageConfig(builder -> builder
+                        // 设置父包名
+                        .parent("com.fjhx")
+                        // 模块名称
+                        .moduleName(moduleName)
+                        .xml("mapper")
+                )
+                .strategyConfig(builder -> builder
+                        // 设置需要生成的表名
+                        .addInclude(tableName)
+                        .addTablePrefix("t_erp_")
+                        // entity
+                        .entityBuilder()
+                        .enableLombok()
+                        .disableSerialVersionUID()
+                        .superClass("org.springblade.core.mp.base.BasicsEntity")
+                        .addIgnoreColumns("id", "create_user", "create_time", "update_user", "update_time")
+                        .versionPropertyName("version")
+                        .addTableFills(new Column("version", FieldFill.INSERT))
+
+                        // service
+                        .serviceBuilder()
+                        .convertServiceFileName(entityName -> entityName + ConstVal.SERVICE)
+                        .superServiceClass(BaseService.class)
+                        .superServiceImplClass(BasicsServiceImpl.class)
+
+                        // controller
+                        .controllerBuilder()
+                        .enableRestStyle()
+                )
+                .execute();
+    }
+
+}

+ 72 - 0
bladex-tool/blade-starter-mybatis/src/main/java/org/springblade/core/mp/base/BaseSelectDto.java

@@ -0,0 +1,72 @@
+package org.springblade.core.mp.base;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Getter
+@Setter
+public class BaseSelectDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 页数
+     */
+    private Integer pageNum;
+
+    /**
+     * 每页条数
+     */
+    private Integer pageSize;
+
+    /**
+     * 关键字查询
+     */
+    private String keyword;
+
+    /**
+     * 通用开始时间
+     */
+    private String beginTime;
+
+    /**
+     * 通用结束时间
+     */
+    private String endTime;
+
+    /**
+     * 返回分页实体
+     */
+    public <T> Page<T> getPage() {
+        return new Page<>(getPageNum(), getPageSize());
+    }
+
+    public Integer getPageNum() {
+        return ObjectUtil.defaultIfNull(pageNum, 1);
+    }
+
+    public Integer getPageSize() {
+        return ObjectUtil.defaultIfNull(pageSize, 10);
+    }
+
+    public Date getBeginTime() {
+        if (ObjectUtil.isEmpty(beginTime)) {
+            return null;
+        }
+        return DateUtil.beginOfDay(DateUtil.parse(beginTime));
+    }
+
+    public Date getEndTime() {
+        if (ObjectUtil.isEmpty(endTime)) {
+            return null;
+        }
+        return DateUtil.endOfDay(DateUtil.parse(endTime));
+    }
+
+}

+ 7 - 2
bladex-tool/blade-starter-mybatis/src/main/java/org/springblade/core/mp/base/BasicsEntity.java

@@ -72,8 +72,12 @@ public abstract class BasicsEntity implements Serializable {
      * 赋值创建时间和创建人
      */
     public void setCreate() {
-        setCreateTime(new Date());
-        setCreateUser(AuthUtil.getUserIdStr());
+        Date date = new Date();
+        String userIdStr = AuthUtil.getUserIdStr();
+        setCreateTime(date);
+        setCreateUser(userIdStr);
+        setUpdateTime(date);
+        setUpdateUser(userIdStr);
     }
 
     /**
@@ -83,4 +87,5 @@ public abstract class BasicsEntity implements Serializable {
         setUpdateTime(new Date());
         setUpdateUser(AuthUtil.getUserIdStr());
     }
+
 }