pom.xml
@@ -149,6 +149,12 @@ <artifactId>jaxb-api</artifactId> <version>${jaxb-api.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.1</version> </dependency> </dependencies> </project> ycl-common/src/main/java/com/ycl/dto/UmsStoreInfoParam.java
New file @@ -0,0 +1,45 @@ package com.ycl.dto; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; import java.math.BigDecimal; @Data @NoArgsConstructor @AllArgsConstructor @Builder public class UmsStoreInfoParam { @NotBlank(message = "门店所有人不能为空") @ApiModelProperty("姓名") private String owner; @NotBlank(message = "门店名称不能为空") @ApiModelProperty("门店名称") private String storename; @NotBlank(message = "手机号不能为空") @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误") @ApiModelProperty("联系方式") private String contact; @ApiModelProperty("地址") private String storeaddr; @ApiModelProperty("照片") private String storephoto; @NotBlank(message = "身份证信息不能为空") @ApiModelProperty("身份证信息") private String idcardinfo; @ApiModelProperty("门店积分") private BigDecimal storescore; } ycl-common/src/main/java/com/ycl/entity/store/UmsStoreInfo.java
New file @@ -0,0 +1,58 @@ package com.ycl.entity.store; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.*; import java.io.Serializable; import java.math.BigDecimal; /** * <p> * * </p> * * @author lyq * @since 2022-09-08 */ @Getter @Setter @TableName("ums_store_storeinfo") @NoArgsConstructor @AllArgsConstructor @ApiModel(value = "UmsStoreStoreinfo对象", description = "") @Builder public class UmsStoreInfo implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("主键") @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("姓名") private String owner; @ApiModelProperty("门店名称") private String storename; @ApiModelProperty("联系方式") private String contact; @ApiModelProperty("地址") private String storeaddr; @ApiModelProperty("照片") private String storephoto; @ApiModelProperty("身份证信息") private String idcardinfo; @ApiModelProperty("门店积分") private BigDecimal storescore; } ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java
@@ -19,7 +19,10 @@ RECORD_SAVE_FAIL(2002, "记录保存失败"), RECORD_UPDATE_FAIL(2003, "记录更新失败"), RECORD_DELETE_FAIL(2004, "记录删除失败"), RECORD_NOT_EXISTS(2005, "记录不存在"); RECORD_NOT_EXISTS(2005, "记录不存在"), FILE_NOT_FOUND(2006, "文件不存在"), FILE_TYPE_FAIL(2007, "文件格式错误"); private long code; private String message; ycl-common/src/main/java/com/ycl/mapper/store/UmsStoreInfoMapper.java
New file @@ -0,0 +1,16 @@ package com.ycl.mapper.store; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ycl.entity.store.UmsStoreInfo; /** * <p> * Mapper 接口 * </p> * * @author lyq * @since 2022-09-08 */ public interface UmsStoreInfoMapper extends BaseMapper<UmsStoreInfo> { } ycl-common/src/main/java/com/ycl/service/store/UmsStoreInfoService.java
New file @@ -0,0 +1,33 @@ package com.ycl.service.store; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ycl.entity.store.UmsStoreInfo; import com.ycl.entity.user.UmsAdmin; import org.springframework.web.multipart.MultipartFile; /** * <p> * 服务类 * </p> * * @author lyq * @since 2022-09-08 */ public interface UmsStoreInfoService extends IService<UmsStoreInfo> { /** * 根据门店名称分页获取门店列表列表 * @param keyword 关键字 * @param pageSize 页面大小 * @param pageNum 页码 * @return 分页实体 */ Page<UmsStoreInfo> list(String keyword, Integer pageSize, Integer pageNum); /** * 读取excel文件动态加载文件 * @param file * @return */ boolean addByExcel(MultipartFile file); } ycl-common/src/main/java/com/ycl/service/store/impl/UmsStoreInfoServiceImpl.java
New file @@ -0,0 +1,70 @@ package com.ycl.service.store.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.entity.store.UmsStoreInfo; import com.ycl.enums.common.ResultCode; import com.ycl.exception.ApiException; import com.ycl.mapper.store.UmsStoreInfoMapper; import com.ycl.service.store.UmsStoreInfoService; import com.ycl.utils.ExcelUtils; import com.ycl.vo.store.StoreInfoExcelVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.util.ArrayList; import java.util.List; /** * <p> * 服务实现类 * </p> * * @author lyq * @since 2022-09-08 */ @Service @Slf4j public class UmsStoreInfoServiceImpl extends ServiceImpl<UmsStoreInfoMapper, UmsStoreInfo> implements UmsStoreInfoService { @Override public Page<UmsStoreInfo> list(String keyword, Integer pageSize, Integer pageNum) { Page<UmsStoreInfo> page = new Page<>(pageSize, pageNum); LambdaQueryWrapper<UmsStoreInfo> wrapper = new LambdaQueryWrapper<>(); if (StrUtil.isNotEmpty(keyword)) { wrapper.like(UmsStoreInfo::getStorename, keyword); } return page(page, wrapper); } @Override public boolean addByExcel(MultipartFile file) { if (file == null) { throw new ApiException(ResultCode.FILE_NOT_FOUND); } String type = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")); if (!(type.equals(".xls") || type.equals(".xlsx"))) { throw new ApiException(ResultCode.FILE_TYPE_FAIL); } try { List<StoreInfoExcelVo> datas = ExcelUtils.getExcelModelData(file.getInputStream(), StoreInfoExcelVo.class); log.info("读取到{}条数据", datas.size()); List<UmsStoreInfo> infos = new ArrayList<>(); for (StoreInfoExcelVo data : datas) { UmsStoreInfo info = new UmsStoreInfo(); BeanUtils.copyProperties(data,info); infos.add(info); } BeanUtils.copyProperties(datas,infos); saveBatch(infos); return true; } catch (Exception e) { throw new ApiException(ResultCode.FAILED); } } } ycl-common/src/main/java/com/ycl/utils/ExcelUtils.java
New file @@ -0,0 +1,23 @@ package com.ycl.utils; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.read.builder.ExcelReaderBuilder; import com.alibaba.excel.read.builder.ExcelReaderSheetBuilder; import lombok.extern.slf4j.Slf4j; import java.io.InputStream; import java.util.List; @Slf4j public class ExcelUtils { public static <T> List<T> getExcelModelData(final InputStream inputStream, Class<T> clazz) { if (null == inputStream) { throw new NullPointerException("the inputStream is null!"); } ExcelReaderBuilder result = EasyExcel.read(inputStream, clazz, null); ExcelReaderSheetBuilder sheet1 = result.sheet(); List<T> resultData = sheet1.doReadSync(); return resultData; } } ycl-common/src/main/java/com/ycl/vo/store/StoreInfoExcelVo.java
New file @@ -0,0 +1,41 @@ package com.ycl.vo.store; import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; @Data @NoArgsConstructor @AllArgsConstructor @Builder public class StoreInfoExcelVo { @ExcelProperty("姓名") @ApiModelProperty("姓名") private String owner; @ExcelProperty("门店名称") @ApiModelProperty("门店名称") private String storename; @ExcelProperty("联系方式") @ApiModelProperty("联系方式") private String contact; @ExcelProperty("地址") @ApiModelProperty("地址") private String storeaddr; @ExcelProperty("身份证信息") @ApiModelProperty("身份证信息") private String idcardinfo; @ExcelProperty("门店积分") @ApiModelProperty("门店积分") private BigDecimal storescore; } ycl-common/src/main/java/com/ycl/vo/store/UmsStoreInfoParam.java
New file @@ -0,0 +1,44 @@ package com.ycl.vo.store; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Pattern; import java.math.BigDecimal; @Data @NoArgsConstructor @AllArgsConstructor @Builder public class UmsStoreInfoParam { @NotBlank(message = "门店所有人不能为空") @ApiModelProperty("姓名") private String owner; @NotBlank(message = "门店名称不能为空") @ApiModelProperty("门店名称") private String storename; @NotBlank(message = "手机号不能为空") @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误") @ApiModelProperty("联系方式") private String contact; @ApiModelProperty("地址") private String storeaddr; @ApiModelProperty("照片") private String storephoto; @NotBlank(message = "身份证信息不能为空") @ApiModelProperty("身份证信息") private String idcardinfo; @ApiModelProperty("门店积分") private BigDecimal storescore; } ycl-common/src/main/resources/mapper/store/UmsStoreInfoMapper.xml
New file @@ -0,0 +1,17 @@ <?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.ycl.mapper.store.UmsStoreInfoMapper"> <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.ycl.entity.store.UmsStoreInfo"> <id column="id" property="id"/> <result column="owner" property="owner"/> <result column="storename" property="storename"/> <result column="contact" property="contact"/> <result column="storeaddr" property="storeaddr"/> <result column="storephoto" property="storephoto"/> <result column="idcardinfo" property="idcardinfo"/> <result column="storescore" property="storescore"/> </resultMap> </mapper> ycl-platform/src/main/java/com/ycl/controller/store/UmsStoreInfoController.java
New file @@ -0,0 +1,115 @@ package com.ycl.controller.store; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ycl.api.CommonPage; import com.ycl.api.CommonResult; import com.ycl.dto.UmsStoreInfoParam; import com.ycl.entity.store.UmsStoreInfo; import com.ycl.enums.common.ResultCode; import com.ycl.exception.ApiException; import com.ycl.service.store.UmsStoreInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.ByteArrayInputStream; import java.io.InputStream; /** * <p> * 前端控制器 * </p> * * @author lyq * @since 2022-09-08 */ @RestController @RequestMapping("/store/storeinfo") @Api(tags = "门店管理") public class UmsStoreInfoController { private UmsStoreInfoService umsStoreInfoService; @Autowired public void setUmsStoreInfoService(UmsStoreInfoService umsStoreInfoService) { this.umsStoreInfoService = umsStoreInfoService; } @ApiOperation("根据门店名称分页获取门店列表列表") @RequestMapping(value = "/list", method = RequestMethod.GET) @ResponseBody public CommonResult<CommonPage<UmsStoreInfo>> list(@RequestParam(value = "keyword", required = false) String keyword, @RequestParam(value = "pageSize", defaultValue = "5") Integer pageSize, @RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum) { Page<UmsStoreInfo> storeInfoPage = umsStoreInfoService.list(keyword, pageSize, pageNum); return CommonResult.success(CommonPage.restPage(storeInfoPage)); } @ApiOperation("根据id获取门店信息") @RequestMapping(value = "/{id}", method = RequestMethod.GET) @ResponseBody public CommonResult<UmsStoreInfo> getItem(@PathVariable Long id) { UmsStoreInfo umsStoreInfo = umsStoreInfoService.getById(id); return CommonResult.success(umsStoreInfo); } @ApiOperation(value = "添加门店信息") @RequestMapping(value = "/add", method = RequestMethod.POST) @ResponseBody public CommonResult<UmsStoreInfo> add(@Validated @RequestBody UmsStoreInfoParam umsStoreInfoParam) { UmsStoreInfo umsStoreInfo = UmsStoreInfo.builder() .owner(umsStoreInfoParam.getOwner()) .storename(umsStoreInfoParam.getStorename()) .contact(umsStoreInfoParam.getContact()) .storeaddr(umsStoreInfoParam.getStoreaddr()) .storephoto(umsStoreInfoParam.getStorephoto()) .idcardinfo(umsStoreInfoParam.getIdcardinfo()) .storescore(umsStoreInfoParam.getStorescore()).build(); boolean success = umsStoreInfoService.save(umsStoreInfo); if (success) { return CommonResult.success(null); } else { return CommonResult.failed(); } } @ApiOperation(value = "根据id删除门店信息") @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET) @ResponseBody public CommonResult delete(@PathVariable Long id) { boolean success = umsStoreInfoService.removeById(id); if (success) { return CommonResult.success(null); } else { return CommonResult.failed(); } } @ApiOperation(value = "修改门店信息") @RequestMapping(value = "/update", method = RequestMethod.GET) @ResponseBody public CommonResult update(@RequestBody UmsStoreInfo umsStoreInfo) { boolean success = umsStoreInfoService.updateById(umsStoreInfo); if (success) { return CommonResult.success(null); } else { return CommonResult.failed(); } } @ApiOperation(value = "根据excel模板批量导入门店信息") @RequestMapping(value = "/add/excel", method = RequestMethod.POST) @ResponseBody public CommonResult addByExcel(MultipartFile file) { boolean success = umsStoreInfoService.addByExcel(file); if (success) { return CommonResult.success(null); } else { return CommonResult.failed(); } } }