From 73e54a23d1e5dec148741af321282a93a82bb02d Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期一, 20 一月 2025 21:47:07 +0800 Subject: [PATCH] 管理端:企业列表相关接口 --- ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java | 117 ++++++++++++++++ pom.xml | 7 ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java | 33 ++++ ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/page/BeanUtils.java | 2 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java | 4 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/vo/MgtCompanyVO.java | 2 ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/excel/MgtCompanyExcel.java | 39 +++++ ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/dto/MgtCompanyDTO.java | 114 ++++++++++++++++ ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/Company.java | 3 ruoyi-api/ruoyi-api-company/pom.xml | 4 ruoyi-modules/ruoyi-company/pom.xml | 4 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java | 11 + ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/CompanyService.java | 29 ++++ 13 files changed, 364 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 92f26fb..0d1b5aa 100644 --- a/pom.xml +++ b/pom.xml @@ -41,6 +41,7 @@ <tomcat.version>9.0.96</tomcat.version> <logback.version>1.2.13</logback.version> <spring-framework.version>5.3.39</spring-framework.version> + <fastexcel.version>1.0.0</fastexcel.version> </properties> <!-- 依赖声明 --> @@ -305,7 +306,11 @@ <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>2.1.0</version> </dependency> - + <dependency> + <groupId>cn.idev.excel</groupId> + <artifactId>fastexcel</artifactId> + <version>${fastexcel.version}</version> + </dependency> </dependencies> </dependencyManagement> diff --git a/ruoyi-api/ruoyi-api-company/pom.xml b/ruoyi-api/ruoyi-api-company/pom.xml index c32bcc8..f4251b2 100644 --- a/ruoyi-api/ruoyi-api-company/pom.xml +++ b/ruoyi-api/ruoyi-api-company/pom.xml @@ -31,6 +31,10 @@ <groupId>com.ruoyi</groupId> <artifactId>ruoyi-common-swagger</artifactId> </dependency> + <dependency> + <groupId>cn.idev.excel</groupId> + <artifactId>fastexcel</artifactId> + </dependency> </dependencies> </project> diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/Company.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/Company.java index 6ad6142..064229c 100644 --- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/Company.java +++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/Company.java @@ -32,6 +32,9 @@ /** 区域代码 */ private String districtCode; + /**所在区域(省市区)*/ + private String area; + /** 经营地址 */ private String businessAddress; diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java index da29d4c..d27e813 100644 --- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java +++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/User.java @@ -31,6 +31,10 @@ /** 更新时间 */ private LocalDateTime updateTime; + /** 创建人 */ + private Long createBy; + /** 更新人 */ + private Long updateBy; /** 是否删除 */ @TableLogic diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/dto/MgtCompanyDTO.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/dto/MgtCompanyDTO.java new file mode 100644 index 0000000..9bc681e --- /dev/null +++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/dto/MgtCompanyDTO.java @@ -0,0 +1,114 @@ +package com.ruoyi.company.api.domain.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @author mitao + * @date 2025/1/20 + */ +@Data +@Schema(name = "企业数据传输对象") +public class MgtCompanyDTO { + /** 主键 */ + @Schema(description = "主键", example = "1") + private Long id; + + /** 公司名称 */ + @Schema(description = "公司名称", example = "某某科技有限公司") + @NotBlank(message = "公司名称不能为空") + private String companyName; + + /** 统一社会信用代码 */ + @Schema(description = "统一社会信用代码", example = "913100000000123") + @NotBlank(message = "统一社会信用代码不能为空") + private String socialCode; + + /** 省份代码 */ + @Schema(description = "省份代码", example = "01") + @NotBlank(message = "省份代码不能为空") + private String provinceCode; + + /** 城市代码 */ + @Schema(description = "城市代码", example = "020") + @NotBlank(message = "城市代码不能为空") + private String cityCode; + + /** 区域代码 */ + @Schema(description = "区域代码", example = "003") + private String districtCode; + + @Schema(description = "所在区域(省市区)") + @NotBlank(message = "所在区域(省市区)不能为空") + private String area; + + /** 经营地址 */ + @Schema(description = "经营地址", example = "北京市海淀区") + @NotBlank(message = "经营地址不能为空") + private String businessAddress; + + /** 身份证正面照片 */ + @Schema(description = "身份证正面照片 URL", example = "https://example.com/idcard-front.jpg") + @NotBlank(message = "身份证正面照片不能为空") + private String idCardFrontUrl; + + /** 身份证反面照片 */ + @Schema(description = "身份证反面照片 URL", example = "https://example.com/idcard-back.jpg") + @NotBlank(message = "身份证反面照片不能为空") + private String idCardBackUrl; + + /** 法人姓名 */ + @Schema(description = "法人姓名", example = "张三") + @NotBlank(message = "法人姓名不能为空") + private String legalPersonName; + + /** 身份证号码 */ + @Schema(description = "身份证号码", example = "110101199001012345") + @NotBlank(message = "身份证号码不能为空") + private String idCardNumber; + + /** 营业执照照片 */ + @Schema(description = "营业执照照片 URL", example = "https://example.com/business-license.jpg") + @NotBlank(message = "营业执照照片不能为空") + private String businessLicenseUrl; + + /** 资质类目:1-再生资源回收备案资质 2-家电拆解资质 3-报废机动车回收拆解资质 4-危险废物经营许可证 0-其他证书 */ + @Schema(description = "资质类目", example = "1", allowableValues = {"0", "1", "2", "3", "4"}) + private Integer category; + + /** 拆解企业资质证书图片地址 */ + @Schema(description = "拆解企业资质证书图片地址 URL", example = "https://example.com/certificate.jpg") + private String certificateUrl; + + /** 联系人姓名 */ + @Schema(description = "联系人姓名", example = "李四") + @NotBlank(message = "联系人姓名不能为空") + private String contactName; + + /** 联系人手机号 */ + @Schema(description = "联系人手机号", example = "13800138000") + @NotBlank(message = "联系人手机号不能为空") + private String contactPhone; + + /** 联系人邮箱 */ + @Schema(description = "联系人邮箱", example = "example@example.com") + @NotBlank(message = "联系人邮箱不能为空") + private String email; + + /** 账号 */ + @Schema(description = "登录账号") + @NotBlank(message = "账号不能为空") + private String accountName; + + /** 手机号 */ + @Schema(description = "绑定手机号") + @NotBlank(message = "手机号不能为空") + private String phone; + + @Schema(description = "登录密码") + @NotBlank(message = "登录密码不能为空") + private String password; + +} diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/excel/MgtCompanyExcel.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/excel/MgtCompanyExcel.java new file mode 100644 index 0000000..5682961 --- /dev/null +++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/excel/MgtCompanyExcel.java @@ -0,0 +1,39 @@ +package com.ruoyi.company.api.domain.excel; + +import cn.idev.excel.annotation.ExcelProperty; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author mitao + * @date 2025/1/20 + */ +@Data +public class MgtCompanyExcel { + + /** 公司名称 */ + @ExcelProperty(value = "公司名称") + private String companyName; + + @ExcelProperty(value = "法人") + private String legalPersonName; + + @ExcelProperty(value = "统一社会信用代码") + private String socialCode; + + @ExcelProperty(value = "经营地址") + private String businessAddress; + + @ExcelProperty(value = "联系人") + private String contactName; + + @ExcelProperty(value = "联系人方式") + private String contactPhone; + + @ExcelProperty(value = "注册时间") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDateTime createTime; + +} diff --git a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/vo/MgtCompanyVO.java b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/vo/MgtCompanyVO.java index 1ed888b..1c53167 100644 --- a/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/vo/MgtCompanyVO.java +++ b/ruoyi-api/ruoyi-api-company/src/main/java/com/ruoyi/company/api/domain/vo/MgtCompanyVO.java @@ -1,6 +1,5 @@ package com.ruoyi.company.api.domain.vo; -import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @@ -15,7 +14,6 @@ @Schema(name = "管理端企业信息",description = "管理端企业信息") public class MgtCompanyVO { /** 主键 */ - @TableId @Schema(description = "主键", example = "1") private Long id; diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/page/BeanUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/page/BeanUtils.java index 76f0fdb..5f5efd4 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/page/BeanUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/page/BeanUtils.java @@ -47,7 +47,7 @@ if (list == null || list.size() == 0) { return CollUtils.emptyList(); } - return copyToList(list, clazz); + return copyList(list, clazz); } public static <R, T> List<T> copyList(List<R> list, Class<T> clazz, Convert<R, T> convert) { diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java index 5ae8d14..4433951 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java +++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java @@ -1,8 +1,10 @@ package com.ruoyi.common.security.config; -import java.util.TimeZone; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; + +import java.util.TimeZone; /** * 系统配置 @@ -19,4 +21,11 @@ { return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault()); } + @Bean + public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { + return builder -> { + // Long 会自动转换成 String + builder.serializerByType(Long.class, ToStringSerializer.instance); + }; + } } diff --git a/ruoyi-modules/ruoyi-company/pom.xml b/ruoyi-modules/ruoyi-company/pom.xml index 58dac60..90543e2 100644 --- a/ruoyi-modules/ruoyi-company/pom.xml +++ b/ruoyi-modules/ruoyi-company/pom.xml @@ -88,6 +88,10 @@ <artifactId>ruoyi-api-company</artifactId> </dependency> + <dependency> + <groupId>cn.idev.excel</groupId> + <artifactId>fastexcel</artifactId> + </dependency> </dependencies> <build> diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java index cdd92d2..2dd08dd 100644 --- a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java +++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/controller/management/MgtCompanyController.java @@ -2,6 +2,7 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDTO; +import com.ruoyi.company.api.domain.dto.MgtCompanyDTO; import com.ruoyi.company.api.domain.query.MgtCompanyQuery; import com.ruoyi.company.api.domain.vo.MgtCompanyVO; import com.ruoyi.company.service.CompanyService; @@ -10,11 +11,16 @@ import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; 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; + +import javax.validation.Valid; +import java.io.IOException; /** * @author mitao @@ -38,5 +44,32 @@ public R<MgtCompanyVO> queryCompanyDetail(@Parameter(name = "id",description = "企业id",required = true) @PathVariable Long id) { return R.ok(companyService.queryCompanyDetail(id)); } + @Operation(summary = "新增企业") + @PostMapping("/save") + public R<?> saveCompany(@Valid @RequestBody MgtCompanyDTO dto) { + companyService.saveCompany(dto); + return R.ok(); + } + @Operation(summary = "编辑企业") + @PostMapping("/edit") + public R<?> editCompany(@Valid @RequestBody MgtCompanyDTO dto) { + companyService.editCompany(dto); + return R.ok(); + } + @Operation(summary = "删除企业") + @DeleteMapping("/{id}") + public R<?> deleteCompany(@Parameter(name = "id",description = "企业id",required = true) @PathVariable Long id) { + companyService.deleteCompany(id); + return R.ok(); + } + @Operation(summary = "导出") + @PostMapping("/export") + public void export(@RequestBody MgtCompanyQuery query){ + try { + companyService.export(query); + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/CompanyService.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/CompanyService.java index 31db036..32d2b8c 100644 --- a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/CompanyService.java +++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/CompanyService.java @@ -3,8 +3,12 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.page.PageDTO; import com.ruoyi.company.api.domain.Company; +import com.ruoyi.company.api.domain.dto.MgtCompanyDTO; import com.ruoyi.company.api.domain.query.MgtCompanyQuery; import com.ruoyi.company.api.domain.vo.MgtCompanyVO; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; public interface CompanyService extends IService<Company> { /** @@ -20,4 +24,29 @@ * @return */ MgtCompanyVO queryCompanyDetail(Long id); + + /** + * 新增企业 + * @param dto + * @return + */ + void saveCompany(MgtCompanyDTO dto); + + /** + * 编辑企业 + * @param dto + */ + void editCompany(MgtCompanyDTO dto); + + /** + * 删除企业 + * @param id + */ + void deleteCompany(Long id); + + /** + * 导出 + * @param query + */ + void export(MgtCompanyQuery query) throws IOException; } diff --git a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java index 917df53..66a9f29 100644 --- a/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java +++ b/ruoyi-modules/ruoyi-company/src/main/java/com/ruoyi/company/service/impl/CompanyServiceImpl.java @@ -1,12 +1,17 @@ package com.ruoyi.company.service.impl; +import cn.idev.excel.FastExcel; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.page.BeanUtils; import com.ruoyi.common.core.page.PageDTO; import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.company.api.domain.Company; import com.ruoyi.company.api.domain.User; +import com.ruoyi.company.api.domain.dto.MgtCompanyDTO; +import com.ruoyi.company.api.domain.excel.MgtCompanyExcel; import com.ruoyi.company.api.domain.query.MgtCompanyQuery; import com.ruoyi.company.api.domain.vo.MgtCompanyVO; import com.ruoyi.company.mapper.CompanyMapper; @@ -14,13 +19,19 @@ import com.ruoyi.company.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.List; import java.util.Objects; @Service @RequiredArgsConstructor public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> implements CompanyService { private final UserService userService; + private final HttpServletResponse response; /** * 获取企业列表 * @param query @@ -59,4 +70,110 @@ } return mgtCompanyVO; } + + /** + * 新增企业 + * @param dto + * @return + */ + @Transactional(rollbackFor = Exception.class) + @Override + public void saveCompany(MgtCompanyDTO dto) { + Long accountCount = userService.lambdaQuery().eq(User::getAccountName, dto.getAccountName()).count(); + if (accountCount > 0) { + throw new ServiceException("账户名重复"); + } + //添加用户信息 + User user = BeanUtils.copyBean(dto, User.class); + user.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); + userService.save(user); + // TODO 校验身份证信息 + Company company = BeanUtils.copyBean(dto, Company.class); + company.setUserId(user.getUserId()); + //根据公司名称查询数据库 + Long count = this.lambdaQuery().eq(Company::getCompanyName, company.getCompanyName()).count(); + if (count > 0) { + throw new ServiceException("该公司账号已存在"); + } + this.save(company); + } + + /** + * 编辑企业 + * @param dto + */ + @Override + public void editCompany(MgtCompanyDTO dto) { + if (Objects.isNull(dto.getId())){ + throw new ServiceException("企业id不能为空"); + } + //查询企业 + Company company = this.getById(dto.getId()); + if (Objects.isNull(company)) { + throw new ServiceException("该企业不存在"); + } + //查询企业账号 + User user = userService.getById(company.getUserId()); + if (Objects.isNull(user)) { + throw new ServiceException("该企业账号不存在"); + } + Long accountCount = userService.lambdaQuery().ne(User::getUserId, user.getUserId()).eq(User::getAccountName, dto.getAccountName()).count(); + if (accountCount > 0) { + throw new ServiceException("账户名重复"); + } + //用户信息 + User userUpd = BeanUtils.copyBean(dto, User.class); + userUpd.setPassword(SecurityUtils.encryptPassword(dto.getPassword())); + userUpd.setUserId(user.getUserId()); + userUpd.setUpdateBy(SecurityUtils.getUserId()); + userService.updateById(userUpd); + //根据公司名称查询数据库 + Long count = this.lambdaQuery().ne(Company::getId,dto.getId()).eq(Company::getCompanyName, company.getCompanyName()).count(); + if (count > 0) { + throw new ServiceException("该公司账号已存在"); + } + Company companyUpd = BeanUtils.copyBean(dto, Company.class); + companyUpd.setId(company.getId()); + this.updateById(companyUpd); + } + + /** + * 删除企业 + * @param id + */ + @Override + public void deleteCompany(Long id) { + //查询企业 + Company company = this.getById(id); + if (Objects.isNull(company)) { + throw new ServiceException("删除失败,该企业不存在"); + } + //删除企业账号 + userService.removeById(company.getUserId()); + + //删除企业信息 + this.removeById(id); + + } + + @Override + public void export(MgtCompanyQuery query) throws IOException { + List<Company> list = this.lambdaQuery() + .like(StringUtils.isNotBlank(query.getCompanyInfo()), Company::getCompanyName, query.getCompanyInfo()) + .like(StringUtils.isNotBlank(query.getCompanyInfo()), Company::getSocialCode, query.getCompanyInfo()) + .like(StringUtils.isNotBlank(query.getLegalPersonInfo()), Company::getLegalPersonName, query.getLegalPersonInfo()) + .like(StringUtils.isNotBlank(query.getLegalPersonInfo()), Company::getIdCardNumber, query.getLegalPersonInfo()) + .like(StringUtils.isNotBlank(query.getContactInfo()), Company::getContactName, query.getContactInfo()) + .like(StringUtils.isNotBlank(query.getContactInfo()), Company::getContactPhone, query.getContactInfo()).list(); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding + + ("utf-8"); + String fileName = URLEncoder.encode("企业信息导出数据", "UTF-8").replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + + FastExcel.write(response.getOutputStream(), MgtCompanyExcel.class) + .sheet("企业信息导出数据") + .doWrite(BeanUtils.copyList(list, MgtCompanyExcel.class)); + } } -- Gitblit v1.7.1