diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmSupplierInfoController.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmSupplierInfoController.java new file mode 100644 index 00000000..707b0988 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/controller/CrmSupplierInfoController.java @@ -0,0 +1,116 @@ +package org.dromara.oa.crm.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.oa.crm.domain.vo.CrmSupplierInfoVo; +import org.dromara.oa.crm.domain.bo.CrmSupplierInfoBo; +import org.dromara.oa.crm.service.ICrmSupplierInfoService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 供应商信息 + * 前端访问路由地址为:/oa/crm/crmSupplierInfo + * + * @author Yinq + * @date 2025-11-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/crm/crmSupplierInfo") +public class CrmSupplierInfoController extends BaseController { + + private final ICrmSupplierInfoService crmSupplierInfoService; + + /** + * 查询供应商信息列表 + */ + @SaCheckPermission("oa/crm:crmSupplierInfo:list") + @GetMapping("/list") + public TableDataInfo list(CrmSupplierInfoBo bo, PageQuery pageQuery) { + return crmSupplierInfoService.queryPageList(bo, pageQuery); + } + + /** + * 导出供应商信息列表 + */ + @SaCheckPermission("oa/crm:crmSupplierInfo:export") + @Log(title = "供应商信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(CrmSupplierInfoBo bo, HttpServletResponse response) { + List list = crmSupplierInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "供应商信息", CrmSupplierInfoVo.class, response); + } + + /** + * 获取供应商信息详细信息 + * + * @param supplierId 主键 + */ + @SaCheckPermission("oa/crm:crmSupplierInfo:query") + @GetMapping("/{supplierId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable("supplierId") Long supplierId) { + return R.ok(crmSupplierInfoService.queryById(supplierId)); + } + + /** + * 新增供应商信息 + */ + @SaCheckPermission("oa/crm:crmSupplierInfo:add") + @Log(title = "供应商信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody CrmSupplierInfoBo bo) { + return toAjax(crmSupplierInfoService.insertByBo(bo)); + } + + /** + * 修改供应商信息 + */ + @SaCheckPermission("oa/crm:crmSupplierInfo:edit") + @Log(title = "供应商信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody CrmSupplierInfoBo bo) { + return toAjax(crmSupplierInfoService.updateByBo(bo)); + } + + /** + * 删除供应商信息 + * + * @param supplierIds 主键串 + */ + @SaCheckPermission("oa/crm:crmSupplierInfo:remove") + @Log(title = "供应商信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{supplierIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable("supplierIds") Long[] supplierIds) { + return toAjax(crmSupplierInfoService.deleteWithValidByIds(List.of(supplierIds), true)); + } + + /** + * 下拉框查询供应商信息列表 + */ + @GetMapping("/getCrmSupplierInfoList") + public R> getCrmSupplierInfoList(CrmSupplierInfoBo bo) { + List list = crmSupplierInfoService.queryList(bo); + return R.ok(list); + } + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmSupplierInfo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmSupplierInfo.java new file mode 100644 index 00000000..af9fc8b0 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/CrmSupplierInfo.java @@ -0,0 +1,178 @@ +package org.dromara.oa.crm.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 供应商信息对象 crm_supplier_info + * + * @author Yinq + * @date 2025-11-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("crm_supplier_info") +public class CrmSupplierInfo extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 供应商ID + */ + @TableId(value = "supplier_id", type = IdType.AUTO) + private Long supplierId; + + /** + * 供应商名称 + */ + private String supplierName; + + /** + * 助记名称 + */ + private String mnemonicName; + + /** + * 供应商类型(1企业 2个体户 3其他) + */ + private String supplierType; + + /** + * 注册资本(万元) + */ + private BigDecimal registeredCapital; + + /** + * 成立日期 + */ + private Date establishmentDate; + + /** + * 经营范围 + */ + private String businessScope; + + /** + * 主营行业 + */ + private String mainIndustry; + + /** + * 法定代表人 + */ + private String legalRepresentative; + + /** + * 营业执照号码 + */ + private String businessLicenseNumber; + + /** + * 税号 + */ + private String taxNumber; + + /** + * 开户银行 + */ + private String bankAccountOpening; + + /** + * 银行账号 + */ + private String bankNumber; + + /** + * 注册地址 + */ + private String registeredAddress; + + /** + * 经营地址 + */ + private String businessAddress; + + /** + * 联系人 + */ + private String contactPerson; + + /** + * 联系电话 + */ + private String contactPhone; + + /** + * 联系手机 + */ + private String contactMobile; + + /** + * 联系邮箱 + */ + private String contactEmail; + + /** + * 传真 + */ + private String contactFax; + + /** + * 网址 + */ + private String website; + + /** + * 归属人员ID + */ + private Long ownerId; + + /** + * 详细地址 + */ + private String detailedAddress; + + /** + * 附件ID + */ + private String ossId; + + /** + * 备注 + */ + private String remark; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + /** + * 删除标志(0代表存在 1代表删除) + */ + @TableLogic + private String delFlag; + + + /** + * 归属人员名称 + */ + @TableField(exist = false) + private String ownerName; + + /** + * 归属人员部门名称 + */ + @TableField(exist = false) + private String ownerDeptName; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmSupplierInfoBo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmSupplierInfoBo.java new file mode 100644 index 00000000..4d8b903b --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/bo/CrmSupplierInfoBo.java @@ -0,0 +1,158 @@ +package org.dromara.oa.crm.domain.bo; + +import org.dromara.oa.crm.domain.CrmSupplierInfo; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 供应商信息业务对象 crm_supplier_info + * + * @author Yinq + * @date 2025-11-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = CrmSupplierInfo.class, reverseConvertGenerate = false) +public class CrmSupplierInfoBo extends BaseEntity { + + /** + * 供应商ID + */ + @NotNull(message = "供应商ID不能为空", groups = { EditGroup.class }) + private Long supplierId; + + /** + * 供应商名称 + */ + private String supplierName; + + /** + * 助记名称 + */ + private String mnemonicName; + + /** + * 供应商类型(1企业 2个体户 3其他) + */ + private String supplierType; + + /** + * 注册资本(万元) + */ + private BigDecimal registeredCapital; + + /** + * 成立日期 + */ + private Date establishmentDate; + + /** + * 经营范围 + */ + private String businessScope; + + /** + * 主营行业 + */ + private String mainIndustry; + + /** + * 法定代表人 + */ + private String legalRepresentative; + + /** + * 营业执照号码 + */ + private String businessLicenseNumber; + + /** + * 税号 + */ + private String taxNumber; + + /** + * 开户银行 + */ + private String bankAccountOpening; + + /** + * 银行账号 + */ + private String bankNumber; + + /** + * 注册地址 + */ + private String registeredAddress; + + /** + * 经营地址 + */ + private String businessAddress; + + /** + * 联系人 + */ + private String contactPerson; + + /** + * 联系电话 + */ + private String contactPhone; + + /** + * 联系手机 + */ + private String contactMobile; + + /** + * 联系邮箱 + */ + private String contactEmail; + + /** + * 传真 + */ + private String contactFax; + + /** + * 网址 + */ + private String website; + + /** + * 归属人员ID + */ + private Long ownerId; + + /** + * 详细地址 + */ + private String detailedAddress; + + /** + * 附件ID + */ + private String ossId; + + /** + * 备注 + */ + private String remark; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmSupplierInfoVo.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmSupplierInfoVo.java new file mode 100644 index 00000000..e76123f4 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/domain/vo/CrmSupplierInfoVo.java @@ -0,0 +1,209 @@ +package org.dromara.oa.crm.domain.vo; + +import java.math.BigDecimal; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.oa.crm.domain.CrmSupplierInfo; +import cn.idev.excel.annotation.ExcelIgnore; +import cn.idev.excel.annotation.ExcelIgnoreUnannotated; +import cn.idev.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.resource.api.domain.RemoteFile; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + + +/** + * 供应商信息视图对象 crm_supplier_info + * + * @author Yinq + * @date 2025-11-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = CrmSupplierInfo.class) +public class CrmSupplierInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 供应商ID + */ + @ExcelProperty(value = "供应商ID") + private Long supplierId; + + /** + * 供应商名称 + */ + @ExcelProperty(value = "供应商名称") + private String supplierName; + + /** + * 助记名称 + */ + @ExcelProperty(value = "助记名称") + private String mnemonicName; + + /** + * 供应商类型(1企业 2个体户 3其他) + */ + @ExcelProperty(value = "供应商类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "supplier_type") + private String supplierType; + + /** + * 注册资本(万元) + */ + @ExcelProperty(value = "注册资本", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "万=元") + private BigDecimal registeredCapital; + + /** + * 成立日期 + */ + @ExcelProperty(value = "成立日期") + private Date establishmentDate; + + /** + * 经营范围 + */ + @ExcelProperty(value = "经营范围") + private String businessScope; + + /** + * 主营行业 + */ + @ExcelProperty(value = "主营行业") + private String mainIndustry; + + /** + * 法定代表人 + */ + @ExcelProperty(value = "法定代表人") + private String legalRepresentative; + + /** + * 营业执照号码 + */ + @ExcelProperty(value = "营业执照号码") + private String businessLicenseNumber; + + /** + * 税号 + */ + @ExcelProperty(value = "税号") + private String taxNumber; + + /** + * 开户银行 + */ + @ExcelProperty(value = "开户银行") + private String bankAccountOpening; + + /** + * 银行账号 + */ + @ExcelProperty(value = "银行账号") + private String bankNumber; + + /** + * 注册地址 + */ + @ExcelProperty(value = "注册地址") + private String registeredAddress; + + /** + * 经营地址 + */ + @ExcelProperty(value = "经营地址") + private String businessAddress; + + /** + * 联系人 + */ + @ExcelProperty(value = "联系人") + private String contactPerson; + + /** + * 联系电话 + */ + @ExcelProperty(value = "联系电话") + private String contactPhone; + + /** + * 联系手机 + */ + @ExcelProperty(value = "联系手机") + private String contactMobile; + + /** + * 联系邮箱 + */ + @ExcelProperty(value = "联系邮箱") + private String contactEmail; + + /** + * 传真 + */ + @ExcelProperty(value = "传真") + private String contactFax; + + /** + * 网址 + */ + @ExcelProperty(value = "网址") + private String website; + + /** + * 归属人员ID + */ + @ExcelProperty(value = "归属人员ID") + private Long ownerId; + + /** + * 详细地址 + */ + @ExcelProperty(value = "详细地址") + private String detailedAddress; + + /** + * 附件ID + */ + @ExcelProperty(value = "附件ID") + private String ossId; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 激活标识(1是 0否) + */ + @ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "active_flag") + private String activeFlag; + + /** + * 归属人员名称(从 sys_user 关联得到,不落库) + */ + @ExcelProperty(value = "归属人员名称") + private String ownerName; + + /** + * 附件信息 + */ + @ExcelIgnore + private List attachmentList; + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmSupplierInfoMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmSupplierInfoMapper.java new file mode 100644 index 00000000..4e76a100 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/mapper/CrmSupplierInfoMapper.java @@ -0,0 +1,113 @@ +package org.dromara.oa.crm.mapper; + +import java.util.List; +import java.util.Collection; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.oa.crm.domain.CrmSupplierInfo; +import org.dromara.oa.crm.domain.vo.CrmSupplierInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 供应商信息Mapper接口 + * + * @author Yinq + * @date 2025-11-05 + */ +public interface CrmSupplierInfoMapper extends BaseMapperPlus { + + /** + * 查询供应商信息列表 + * + * @param page 分页 + * @param queryWrapper 条件 + * @return 供应商信息集合 + */ + public Page selectCustomCrmSupplierInfoVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 查询供应商信息列表 + * + * @param queryWrapper 条件 + * @return 供应商信息集合 + */ + public List selectCustomCrmSupplierInfoVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); + + /** + * 根据ID查询供应商信息详情 + * + * @param supplierId 主键ID + * @return 供应商信息对象 + */ + CrmSupplierInfoVo selectCustomCrmSupplierInfoVoById(@Param("supplierId") Long supplierId); + + /** + * 根据ID列表批量查询供应商信息 + * + * @param ids ID集合 + * @return 供应商信息集合 + */ + List selectCustomCrmSupplierInfoVoByIds(@Param("ids") Collection ids); + + /** + * 统计供应商信息记录数 + * + * @param queryWrapper 查询条件 + * @return 记录总数 + */ + Long countCustomCrmSupplierInfo(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + /** + * 分页查询供应商信息(自定义条件) + * + * @param page 分页对象 + * @param queryWrapper 查询条件 + * @return 分页结果 + */ + Page selectCustomCrmSupplierInfoVoPage(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + /** + * 批量插入供应商信息 + * + * @param list 供应商信息对象集合 + * @return 影响行数 + */ + int batchInsertCrmSupplierInfo(@Param("list") List list); + + /** + * 批量更新供应商信息 + * + * @param list 供应商信息对象集合 + * @return 影响行数 + */ + int batchUpdateCrmSupplierInfo(@Param("list") List list); + + /** + * 根据自定义条件删除供应商信息 + * + * @param queryWrapper 删除条件 + * @return 影响行数 + */ + int deleteCustomCrmSupplierInfo(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + /** + * 根据ID列表批量删除供应商信息 + * + * @param ids ID集合 + * @return 影响行数 + */ + int deleteCustomCrmSupplierInfoByIds(@Param("ids") Collection ids); + + /** + * 检查供应商信息是否存在 + * + * @param queryWrapper 查询条件 + * @return 是否存在 + */ + Boolean existsCrmSupplierInfo(@Param(Constants.WRAPPER) Wrapper queryWrapper); + + +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmSupplierInfoService.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmSupplierInfoService.java new file mode 100644 index 00000000..bf525dbd --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/ICrmSupplierInfoService.java @@ -0,0 +1,69 @@ +package org.dromara.oa.crm.service; + +import org.dromara.oa.crm.domain.CrmSupplierInfo; +import org.dromara.oa.crm.domain.vo.CrmSupplierInfoVo; +import org.dromara.oa.crm.domain.bo.CrmSupplierInfoBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 供应商信息Service接口 + * + * @author Yinq + * @date 2025-11-05 + */ +public interface ICrmSupplierInfoService { + + /** + * 查询供应商信息 + * + * @param supplierId 主键 + * @return 供应商信息 + */ + CrmSupplierInfoVo queryById(Long supplierId); + + /** + * 分页查询供应商信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 供应商信息分页列表 + */ + TableDataInfo queryPageList(CrmSupplierInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的供应商信息列表 + * + * @param bo 查询条件 + * @return 供应商信息列表 + */ + List queryList(CrmSupplierInfoBo bo); + + /** + * 新增供应商信息 + * + * @param bo 供应商信息 + * @return 是否新增成功 + */ + Boolean insertByBo(CrmSupplierInfoBo bo); + + /** + * 修改供应商信息 + * + * @param bo 供应商信息 + * @return 是否修改成功 + */ + Boolean updateByBo(CrmSupplierInfoBo bo); + + /** + * 校验并批量删除供应商信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmSupplierInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmSupplierInfoServiceImpl.java new file mode 100644 index 00000000..484b634e --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmSupplierInfoServiceImpl.java @@ -0,0 +1,217 @@ +package org.dromara.oa.crm.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.stereotype.Service; +import org.dromara.oa.crm.domain.bo.CrmSupplierInfoBo; +import org.dromara.oa.crm.domain.vo.CrmSupplierInfoVo; +import org.dromara.oa.crm.domain.CrmSupplierInfo; +import org.dromara.oa.crm.mapper.CrmSupplierInfoMapper; +import org.dromara.oa.crm.service.ICrmSupplierInfoService; +import org.dromara.resource.api.RemoteFileService; +import org.dromara.resource.api.domain.RemoteFile; + +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.Collections; +import java.util.Set; +import java.util.LinkedHashSet; +import java.util.HashMap; +import java.util.Map.Entry; +import java.util.stream.Collectors; + +/** + * 供应商信息Service业务层处理 + * + * @author Yinq + * @date 2025-11-05 + */ +@RequiredArgsConstructor +@Service +public class CrmSupplierInfoServiceImpl implements ICrmSupplierInfoService { + + private final CrmSupplierInfoMapper baseMapper; + @DubboReference(mock = "true") + private RemoteFileService remoteFileService; + + /** + * 查询供应商信息 + * + * @param supplierId 主键 + * @return 供应商信息 + */ + @Override + public CrmSupplierInfoVo queryById(Long supplierId){ + CrmSupplierInfoVo vo = baseMapper.selectVoById(supplierId); + fillAttachmentInfo(Collections.singletonList(vo)); + return vo; + } + + /** + * 分页查询供应商信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 供应商信息分页列表 + */ + @Override + public TableDataInfo queryPageList(CrmSupplierInfoBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + fillAttachmentInfo(result.getRecords()); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的供应商信息列表 + * + * @param bo 查询条件 + * @return 供应商信息列表 + */ + @Override + public List queryList(CrmSupplierInfoBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + List list = baseMapper.selectVoList(lqw); + fillAttachmentInfo(list); + return list; + } + + private MPJLambdaWrapper buildQueryWrapper(CrmSupplierInfoBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(CrmSupplierInfo.class) + .selectAll(CrmSupplierInfo.class) +// // 左连接 sys_user 表获取归属人员名称 +// .selectAs(SysUser::getNickName, CrmSupplierInfo::getOwnerName) +// .leftJoin(SysUser.class, SysUser::getUserId, CrmSupplierInfo::getOwnerId) + .eq(CrmSupplierInfo::getDelFlag, "0") + .like(StringUtils.isNotBlank(bo.getSupplierName()), CrmSupplierInfo::getSupplierName, bo.getSupplierName()) + .like(StringUtils.isNotBlank(bo.getMnemonicName()), CrmSupplierInfo::getMnemonicName, bo.getMnemonicName()) + .eq(StringUtils.isNotBlank(bo.getSupplierType()), CrmSupplierInfo::getSupplierType, bo.getSupplierType()) + .eq(bo.getRegisteredCapital() != null, CrmSupplierInfo::getRegisteredCapital, bo.getRegisteredCapital()) + .eq(bo.getEstablishmentDate() != null, CrmSupplierInfo::getEstablishmentDate, bo.getEstablishmentDate()) + .eq(StringUtils.isNotBlank(bo.getBusinessScope()), CrmSupplierInfo::getBusinessScope, bo.getBusinessScope()) + .eq(StringUtils.isNotBlank(bo.getMainIndustry()), CrmSupplierInfo::getMainIndustry, bo.getMainIndustry()) + .eq(StringUtils.isNotBlank(bo.getLegalRepresentative()), CrmSupplierInfo::getLegalRepresentative, bo.getLegalRepresentative()) + .eq(StringUtils.isNotBlank(bo.getBusinessLicenseNumber()), CrmSupplierInfo::getBusinessLicenseNumber, bo.getBusinessLicenseNumber()) + .eq(StringUtils.isNotBlank(bo.getTaxNumber()), CrmSupplierInfo::getTaxNumber, bo.getTaxNumber()) + .eq(StringUtils.isNotBlank(bo.getBankAccountOpening()), CrmSupplierInfo::getBankAccountOpening, bo.getBankAccountOpening()) + .eq(StringUtils.isNotBlank(bo.getBankNumber()), CrmSupplierInfo::getBankNumber, bo.getBankNumber()) + .eq(StringUtils.isNotBlank(bo.getRegisteredAddress()), CrmSupplierInfo::getRegisteredAddress, bo.getRegisteredAddress()) + .eq(StringUtils.isNotBlank(bo.getBusinessAddress()), CrmSupplierInfo::getBusinessAddress, bo.getBusinessAddress()) + .eq(StringUtils.isNotBlank(bo.getContactPerson()), CrmSupplierInfo::getContactPerson, bo.getContactPerson()) + .eq(StringUtils.isNotBlank(bo.getContactPhone()), CrmSupplierInfo::getContactPhone, bo.getContactPhone()) + .eq(StringUtils.isNotBlank(bo.getContactMobile()), CrmSupplierInfo::getContactMobile, bo.getContactMobile()) + .eq(StringUtils.isNotBlank(bo.getContactEmail()), CrmSupplierInfo::getContactEmail, bo.getContactEmail()) + .eq(StringUtils.isNotBlank(bo.getContactFax()), CrmSupplierInfo::getContactFax, bo.getContactFax()) + .eq(StringUtils.isNotBlank(bo.getWebsite()), CrmSupplierInfo::getWebsite, bo.getWebsite()) + .eq(bo.getOwnerId() != null, CrmSupplierInfo::getOwnerId, bo.getOwnerId()) + .eq(StringUtils.isNotBlank(bo.getDetailedAddress()), CrmSupplierInfo::getDetailedAddress, bo.getDetailedAddress()) + .eq(StringUtils.isNotBlank(bo.getOssId()), CrmSupplierInfo::getOssId, bo.getOssId()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), CrmSupplierInfo::getActiveFlag, bo.getActiveFlag()); + return lqw; + } + + private void fillAttachmentInfo(List voList) { + if (voList == null || voList.isEmpty()) { + return; + } + Set ossIdSet = new LinkedHashSet<>(); + Map> voOssMapping = new HashMap<>(); + for (CrmSupplierInfoVo vo : voList) { + if (vo == null || StringUtils.isBlank(vo.getOssId())) { + continue; + } + List ids = List.of(StringUtils.split(vo.getOssId(), ",")); + if (ids.isEmpty()) { + continue; + } + voOssMapping.put(vo, ids); + ossIdSet.addAll(ids); + } + if (ossIdSet.isEmpty()) { + return; + } + try { + List files = remoteFileService.selectByIds(String.join(",", ossIdSet)); + Map fileMap = files.stream() + .filter(item -> item.getOssId() != null) + .collect(Collectors.toMap(RemoteFile::getOssId, item -> item, (a, b) -> a)); + for (Entry> entry : voOssMapping.entrySet()) { + List voFiles = entry.getValue().stream() + .map(id -> { + if (!StringUtils.isNumeric(id)) { + return null; + } + Long key = Long.parseLong(id); + return fileMap.get(key); + }) + .filter(item -> item != null) + .collect(Collectors.toList()); + entry.getKey().setAttachmentList(voFiles); + } + } catch (Exception ignored) { + // 远程文件服务异常时忽略附件 + } + } + + /** + * 新增供应商信息 + * + * @param bo 供应商信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(CrmSupplierInfoBo bo) { + CrmSupplierInfo add = MapstructUtils.convert(bo, CrmSupplierInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setSupplierId(add.getSupplierId()); + } + return flag; + } + + /** + * 修改供应商信息 + * + * @param bo 供应商信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(CrmSupplierInfoBo bo) { + CrmSupplierInfo update = MapstructUtils.convert(bo, CrmSupplierInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(CrmSupplierInfo entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除供应商信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmSupplierInfoMapper.xml b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmSupplierInfoMapper.xml new file mode 100644 index 00000000..b67e1875 --- /dev/null +++ b/ruoyi-modules/ruoyi-oa/src/main/resources/mapper/oa/crm/CrmSupplierInfoMapper.xml @@ -0,0 +1,319 @@ + + + + + + + + + + + + + + + + + + + + + + + insert into crm_supplier_info( + tenant_id, + + supplier_name, + + mnemonic_name, + + supplier_type, + + registered_capital, + + establishment_date, + + business_scope, + + main_industry, + + legal_representative, + + business_license_number, + + tax_number, + + bank_account_opening, + + bank_number, + + registered_address, + + business_address, + + contact_person, + + contact_phone, + + contact_mobile, + + contact_email, + + contact_fax, + + website, + + owner_id, + + detailed_address, + + oss_id, + + remark, + + active_flag, + + del_flag, + + create_dept, + + create_by, + + create_time, + + update_by, + + update_time + + ) + values + + ( + #{item.tenantId}, + + #{item.supplierName}, + + #{item.mnemonicName}, + + #{item.supplierType}, + + #{item.registeredCapital}, + + #{item.establishmentDate}, + + #{item.businessScope}, + + #{item.mainIndustry}, + + #{item.legalRepresentative}, + + #{item.businessLicenseNumber}, + + #{item.taxNumber}, + + #{item.bankAccountOpening}, + + #{item.bankNumber}, + + #{item.registeredAddress}, + + #{item.businessAddress}, + + #{item.contactPerson}, + + #{item.contactPhone}, + + #{item.contactMobile}, + + #{item.contactEmail}, + + #{item.contactFax}, + + #{item.website}, + + #{item.ownerId}, + + #{item.detailedAddress}, + + #{item.ossId}, + + #{item.remark}, + + #{item.activeFlag}, + + #{item.delFlag}, + + #{item.createDept}, + + #{item.createBy}, + + #{item.createTime}, + + #{item.updateBy}, + + #{item.updateTime} + + ) + + + + + + + update crm_supplier_info + + + tenant_id = #{item.tenantId}, + + + supplier_name = #{item.supplierName}, + + + mnemonic_name = #{item.mnemonicName}, + + + supplier_type = #{item.supplierType}, + + + registered_capital = #{item.registeredCapital}, + + + establishment_date = #{item.establishmentDate}, + + + business_scope = #{item.businessScope}, + + + main_industry = #{item.mainIndustry}, + + + legal_representative = #{item.legalRepresentative}, + + + business_license_number = #{item.businessLicenseNumber}, + + + tax_number = #{item.taxNumber}, + + + bank_account_opening = #{item.bankAccountOpening}, + + + bank_number = #{item.bankNumber}, + + + registered_address = #{item.registeredAddress}, + + + business_address = #{item.businessAddress}, + + + contact_person = #{item.contactPerson}, + + + contact_phone = #{item.contactPhone}, + + + contact_mobile = #{item.contactMobile}, + + + contact_email = #{item.contactEmail}, + + + contact_fax = #{item.contactFax}, + + + website = #{item.website}, + + + owner_id = #{item.ownerId}, + + + detailed_address = #{item.detailedAddress}, + + + oss_id = #{item.ossId}, + + + remark = #{item.remark}, + + + active_flag = #{item.activeFlag}, + + + del_flag = #{item.delFlag}, + + + create_dept = #{item.createDept}, + + + create_by = #{item.createBy}, + + + create_time = #{item.createTime}, + + + update_by = #{item.updateBy}, + + + update_time = #{item.updateTime} + + + where supplier_id = #{item.supplierId} + + + + + + delete from crm_supplier_info + ${ew.getCustomSqlSegment} + + + + + delete from crm_supplier_info + where supplier_id in + + #{id} + + + + + + + +