whj
2022-09-09 350f7aa6654f63c1792dc403e624c4aa583bd0de
门店管理
2个文件已修改
10个文件已添加
473 ■■■■■ 已修改文件
pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/dto/UmsStoreInfoParam.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/entity/store/UmsStoreInfo.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/mapper/store/UmsStoreInfoMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/store/UmsStoreInfoService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/service/store/impl/UmsStoreInfoServiceImpl.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/utils/ExcelUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/vo/store/StoreInfoExcelVo.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/java/com/ycl/vo/store/UmsStoreInfoParam.java 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-common/src/main/resources/mapper/store/UmsStoreInfoMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ycl-platform/src/main/java/com/ycl/controller/store/UmsStoreInfoController.java 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
        }
    }
}