From 350f7aa6654f63c1792dc403e624c4aa583bd0de Mon Sep 17 00:00:00 2001 From: whj <1070107765@qq.com> Date: 星期五, 09 九月 2022 15:34:04 +0800 Subject: [PATCH] 门店管理 --- ycl-common/src/main/java/com/ycl/mapper/store/UmsStoreInfoMapper.java | 16 ++ ycl-platform/src/main/java/com/ycl/controller/store/UmsStoreInfoController.java | 115 ++++++++++++++ ycl-common/src/main/java/com/ycl/vo/store/StoreInfoExcelVo.java | 41 +++++ ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java | 5 ycl-common/src/main/java/com/ycl/service/store/UmsStoreInfoService.java | 33 ++++ ycl-common/src/main/java/com/ycl/utils/ExcelUtils.java | 23 ++ ycl-common/src/main/java/com/ycl/vo/store/UmsStoreInfoParam.java | 44 +++++ ycl-common/src/main/java/com/ycl/service/store/impl/UmsStoreInfoServiceImpl.java | 70 ++++++++ ycl-common/src/main/java/com/ycl/dto/UmsStoreInfoParam.java | 45 +++++ ycl-common/src/main/resources/mapper/store/UmsStoreInfoMapper.xml | 17 ++ ycl-common/src/main/java/com/ycl/entity/store/UmsStoreInfo.java | 58 +++++++ pom.xml | 6 12 files changed, 472 insertions(+), 1 deletions(-) diff --git a/pom.xml b/pom.xml index 58b221b..c2b7558 100644 --- a/pom.xml +++ b/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> diff --git a/ycl-common/src/main/java/com/ycl/dto/UmsStoreInfoParam.java b/ycl-common/src/main/java/com/ycl/dto/UmsStoreInfoParam.java new file mode 100644 index 0000000..c59103d --- /dev/null +++ b/ycl-common/src/main/java/com/ycl/dto/UmsStoreInfoParam.java @@ -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; +} diff --git a/ycl-common/src/main/java/com/ycl/entity/store/UmsStoreInfo.java b/ycl-common/src/main/java/com/ycl/entity/store/UmsStoreInfo.java new file mode 100644 index 0000000..c9d0ff0 --- /dev/null +++ b/ycl-common/src/main/java/com/ycl/entity/store/UmsStoreInfo.java @@ -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; + + +} diff --git a/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java b/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java index 8e9c1b5..9ff7bd4 100644 --- a/ycl-common/src/main/java/com/ycl/enums/common/ResultCode.java +++ b/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; diff --git a/ycl-common/src/main/java/com/ycl/mapper/store/UmsStoreInfoMapper.java b/ycl-common/src/main/java/com/ycl/mapper/store/UmsStoreInfoMapper.java new file mode 100644 index 0000000..3f4a578 --- /dev/null +++ b/ycl-common/src/main/java/com/ycl/mapper/store/UmsStoreInfoMapper.java @@ -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> { + +} diff --git a/ycl-common/src/main/java/com/ycl/service/store/UmsStoreInfoService.java b/ycl-common/src/main/java/com/ycl/service/store/UmsStoreInfoService.java new file mode 100644 index 0000000..1aa8e05 --- /dev/null +++ b/ycl-common/src/main/java/com/ycl/service/store/UmsStoreInfoService.java @@ -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); +} diff --git a/ycl-common/src/main/java/com/ycl/service/store/impl/UmsStoreInfoServiceImpl.java b/ycl-common/src/main/java/com/ycl/service/store/impl/UmsStoreInfoServiceImpl.java new file mode 100644 index 0000000..b1e0e3d --- /dev/null +++ b/ycl-common/src/main/java/com/ycl/service/store/impl/UmsStoreInfoServiceImpl.java @@ -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); + } + } +} diff --git a/ycl-common/src/main/java/com/ycl/utils/ExcelUtils.java b/ycl-common/src/main/java/com/ycl/utils/ExcelUtils.java new file mode 100644 index 0000000..6bc76f5 --- /dev/null +++ b/ycl-common/src/main/java/com/ycl/utils/ExcelUtils.java @@ -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; + } +} diff --git a/ycl-common/src/main/java/com/ycl/vo/store/StoreInfoExcelVo.java b/ycl-common/src/main/java/com/ycl/vo/store/StoreInfoExcelVo.java new file mode 100644 index 0000000..7f1d346 --- /dev/null +++ b/ycl-common/src/main/java/com/ycl/vo/store/StoreInfoExcelVo.java @@ -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; +} diff --git a/ycl-common/src/main/java/com/ycl/vo/store/UmsStoreInfoParam.java b/ycl-common/src/main/java/com/ycl/vo/store/UmsStoreInfoParam.java new file mode 100644 index 0000000..9e924d0 --- /dev/null +++ b/ycl-common/src/main/java/com/ycl/vo/store/UmsStoreInfoParam.java @@ -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; +} diff --git a/ycl-common/src/main/resources/mapper/store/UmsStoreInfoMapper.xml b/ycl-common/src/main/resources/mapper/store/UmsStoreInfoMapper.xml new file mode 100644 index 0000000..64cc4a4 --- /dev/null +++ b/ycl-common/src/main/resources/mapper/store/UmsStoreInfoMapper.xml @@ -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> diff --git a/ycl-platform/src/main/java/com/ycl/controller/store/UmsStoreInfoController.java b/ycl-platform/src/main/java/com/ycl/controller/store/UmsStoreInfoController.java new file mode 100644 index 0000000..30bfe30 --- /dev/null +++ b/ycl-platform/src/main/java/com/ycl/controller/store/UmsStoreInfoController.java @@ -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(); + } + } +} + -- Gitblit v1.8.0