Bläddra i källkod

Merge branch 'wanghaicheng' of lift-manager/lift-server into develop

wanghaicheng 5 år sedan
förälder
incheckning
06f161dbc5
21 ändrade filer med 252 tillägg och 212 borttagningar
  1. 4 4
      lift-batch-service/src/main/resources/application-prod.yml
  2. 4 4
      lift-business-service/src/main/resources/application-prod.yml
  3. 1 4
      lift-common/src/main/java/cn.com.ty.lift.common/aliservice/aliyunsms/AliyunSmsUtil.java
  4. 5 5
      lift-common/src/main/java/cn.com.ty.lift.common/aliservice/constants/AliConstants.java
  5. 1 7
      lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/custom/controller/PropertyCompanyController.java
  6. 7 3
      lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/custom/service/impl/PropertyCompanyServiceImpl.java
  7. 11 0
      lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/region/dao/entity/Region.java
  8. 2 4
      lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/region/service/impl/RegionServiceImpl.java
  9. 4 4
      lift-enterprise-service/src/main/resources/application-prod.yml
  10. 4 4
      lift-push/src/main/resources/application-prod.yml
  11. 4 4
      lift-quan-service/src/main/resources/application-prod.yml
  12. 3 35
      lift-system-service/src/main/java/cn/com/ty/lift/system/faq/controller/FaqController.java
  13. 1 65
      lift-system-service/src/main/java/cn/com/ty/lift/system/faq/service/impl/FaqServiceImpl.java
  14. 1 1
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/controller/LoginController.java
  15. 4 4
      lift-system-service/src/main/resources/application-prod.yml
  16. 40 40
      upload/src/main/java/com/controller/common/CommonController.java
  17. 1 2
      upload/src/main/java/com/controller/common/RestResponse.java
  18. 132 3
      upload/src/main/java/com/controller/common/SystemConfiguration.java
  19. 17 13
      upload/src/main/java/com/controller/common/VerifyMethodInterceptor.java
  20. 5 5
      upload/src/main/resources/application-prod.yml
  21. 1 1
      upload/src/main/resources/logback-spring.xml

+ 4 - 4
lift-batch-service/src/main/resources/application-prod.yml

@@ -22,7 +22,7 @@ spring:
 #aliyun OSS服务配置信息,加载到SystemConfiguration
 aliyun:
   oss:
-    endpoint: http://oss-cn-beijing.aliyuncs.com
-    bucketName: temp15827479607
-    accessKeyId: LTAI4FkSqFZa6LH9HqAsVott
-    accessKeySecret: w7GXuh5tf1hduQuZ2AzT3a4q14BI1i
+    endpoint: http://oss-cn-hangzhou.aliyuncs.com
+    bucketName: ty-oss-file
+    accessKeyId: LTAI4G1iLTczu8JxM2En57gY
+    accessKeySecret: VHeRj3C2br87Uh447ruHsSTvYSDWeC

+ 4 - 4
lift-business-service/src/main/resources/application-prod.yml

@@ -44,7 +44,7 @@ spring:
 #aliyun OSS服务配置信息,加载到SystemConfiguration
 aliyun:
   oss:
-    endpoint: http://oss-cn-beijing.aliyuncs.com
-    bucketName: temp15827479607
-    accessKeyId: LTAI4FkSqFZa6LH9HqAsVott
-    accessKeySecret: w7GXuh5tf1hduQuZ2AzT3a4q14BI1i
+    endpoint: http://oss-cn-hangzhou.aliyuncs.com
+    bucketName: ty-oss-file
+    accessKeyId: LTAI4G1iLTczu8JxM2En57gY
+    accessKeySecret: VHeRj3C2br87Uh447ruHsSTvYSDWeC

+ 1 - 4
lift-common/src/main/java/cn.com.ty.lift.common/aliservice/aliyunsms/AliyunSmsUtil.java

@@ -40,7 +40,7 @@ public class AliyunSmsUtil {
         //设置模板编码
         request.putQueryParameter("TemplateCode", templateCode);
         //设置验证码
-        String templateParam = "{\"code\":\"" + smsCode + "\"}";
+        String templateParam = "{\"smsCode\":\"" + smsCode + "\"}";
         request.putQueryParameter("TemplateParam", templateParam);
 
         try {
@@ -50,8 +50,6 @@ public class AliyunSmsUtil {
             if(!AliConstants.STATUS_CODE_OK.equals(smsResponse.getCode())){
                return null;
             }
-        } catch (ServerException e) {
-            e.printStackTrace();
         } catch (ClientException e) {
             e.printStackTrace();
         }
@@ -62,7 +60,6 @@ public class AliyunSmsUtil {
      * 生成6位随机码
      *@author huangy
      *@return String
-     *@throws
      */
     public static String GenerateSMSCode() {
         String smsVerifyCode = "";

+ 5 - 5
lift-common/src/main/java/cn.com.ty.lift.common/aliservice/constants/AliConstants.java

@@ -24,12 +24,12 @@ public class AliConstants {
         /**
          * 密钥id
          */
-        String ACCESS_KEY_ID = "LTAI4FeGzeF8Ss7e42wzKUQg";
+        String ACCESS_KEY_ID = "LTAI4G1iLTczu8JxM2En57gY";
 
         /**
          * api secret
          */
-        String ACCESS_SECRET = "YfSlyyj3sHE8I7NI75gpmoZTDDugES";
+        String ACCESS_SECRET = "VHeRj3C2br87Uh447ruHsSTvYSDWeC";
 
         /**
          * 接口域名
@@ -49,12 +49,12 @@ public class AliConstants {
         /**
          * 短信签名
          */
-        String SIGN_NAME = "极客课堂";
+        String SIGN_NAME = "电梯管家";
 
         /**
-         * 短信模板-测试
+         * 短信模板
          */
-        String TEST_TEMPLATE_CODE = "SMS_175580242";
+        String TEMPLATE_CODE = "SMS_189016913";
 
         /**
          * 短信验证码字段

+ 1 - 7
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/custom/controller/PropertyCompanyController.java

@@ -31,7 +31,6 @@ public class PropertyCompanyController {
      *
      * @param request 客户名称或客户地址或客户邮寄地址或客户联系方式,页码,页大小,维保公司id
      * @return RestResponse
-     * @since 2019/12/3 8:51
      */
     @PostMapping("/list")
     @Validation(fields = {"mtCompanyId"})
@@ -49,9 +48,6 @@ public class PropertyCompanyController {
     @Validation(fields = {"id"})
     public RestResponse propertyCompany(@Val @RequestBody PropertyCompanyReq request) {
         PropertyCompany byId = propertyCompanyService.getById(request.getId());
-        if (byId == null) {
-            return RestResponse.success();
-        }
         return RestResponse.success(byId);
     }
 
@@ -60,7 +56,6 @@ public class PropertyCompanyController {
      *
      * @param request [客户]
      * @return RestResponse
-     * @since 2019/11/27 11:45
      */
     @PostMapping("/add")
     public RestResponse add(@RequestBody PropertyCompanyAndPropertyContactReq request) {
@@ -72,7 +67,6 @@ public class PropertyCompanyController {
      *
      * @param propertyCompany [客户]
      * @return RestResponse
-     * @since 2019/11/27 11:45
      */
     @PostMapping("/update")
     @Validation(fields = {"id"})
@@ -86,7 +80,6 @@ public class PropertyCompanyController {
      *
      * @param req [客户id]
      * @return cn.com.xwy.boot.web.dto.RestResponse
-     * @since 2019/11/27 11:46
      */
     @PostMapping("/delete")
     @Validation(fields = {"id"})
@@ -96,6 +89,7 @@ public class PropertyCompanyController {
 
     /**
      * 项目模块用,根据维保公司id查询客户公司列表
+     *
      * @param req [mtCompanyId] 维保公司id
      * @return 客户公司列表
      */

+ 7 - 3
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/custom/service/impl/PropertyCompanyServiceImpl.java

@@ -46,9 +46,13 @@ public class PropertyCompanyServiceImpl extends ServiceImpl<PropertyCompanyMappe
                         .eq(request.getMtCompanyId() != null, "mt_company_id", request.getMtCompanyId())
                         .ne("status", 0)
                         .and(request.getInfo() != null, companyQueryWrapper ->
-                                companyQueryWrapper.like("name", request.getInfo())
-                                        .or().like("address", request.getInfo())
-                                        .or().like("mailing_address", request.getInfo())));
+                                companyQueryWrapper
+                                        .like("name", request.getInfo())
+                                        .or()
+                                        .like("address", request.getInfo())
+                                        .or()
+                                        .like("mailing_address", request.getInfo()))
+                        .orderByAsc("name"));
         records.getRecords().forEach(propertyCompany -> {
             if (propertyCompany.getMailingAddress() == null) {
                 propertyCompany.setMailingAddress("未设置地址");

+ 11 - 0
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/region/dao/entity/Region.java

@@ -8,6 +8,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 
 /**
  * <p>
@@ -75,5 +76,15 @@ public class Region implements Serializable {
     @TableField("remark")
     private String remark;
 
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private LocalDateTime createTime;
 
+    /**
+     * 更新时间
+     */
+    @TableField("update_time")
+    private LocalDateTime updateTime;
 }

+ 2 - 4
lift-enterprise-service/src/main/java/cn/com/ty/lift/enterprise/region/service/impl/RegionServiceImpl.java

@@ -30,7 +30,6 @@ import java.util.Map;
 public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> implements RegionService {
     private final AreaCodeServiceImpl areaCodeService;
 
-    //分页区域列表
     public RestResponse regions(RegionReq req) {
         Page<Region> page = new Page<>(req.getPageNum(), req.getPageSize());
         //获取维保团队的区域列表
@@ -39,7 +38,8 @@ public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> impleme
                         .select("area_name areaName", "area_code areaCode", "city_code cityCode", "remark"
                                 , "province_code provinceCode", "clerk", "mt_company_id mtCompanyId"
                                 , "user_id userId", "id")
-                        .eq("mt_company_id", req.getMtCompanyId()));
+                        .eq("mt_company_id", req.getMtCompanyId())
+                        .orderByDesc("create_time"));
         //如果没有区域
         if (page.getRecords().isEmpty()) {
             return RestResponse.success();
@@ -50,8 +50,6 @@ public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> impleme
         List<Map<String, Object>> areaCodes = baseMapper.selectAreaCodes();
         List<Map<String, Object>> userInfos = baseMapper.selectUserInfo();
 
-
-
         if (records.isEmpty()) {
             return RestResponse.success();
         }

+ 4 - 4
lift-enterprise-service/src/main/resources/application-prod.yml

@@ -46,7 +46,7 @@ spring:
 #aliyun OSS服务配置信息,加载到SystemConfiguration
 aliyun:
   oss:
-    endpoint: http://oss-cn-beijing.aliyuncs.com
-    bucketName: temp15827479607
-    accessKeyId: LTAI4FkSqFZa6LH9HqAsVott
-    accessKeySecret: w7GXuh5tf1hduQuZ2AzT3a4q14BI1i
+    endpoint: http://oss-cn-hangzhou.aliyuncs.com
+    bucketName: ty-oss-file
+    accessKeyId: LTAI4G1iLTczu8JxM2En57gY
+    accessKeySecret: VHeRj3C2br87Uh447ruHsSTvYSDWeC

+ 4 - 4
lift-push/src/main/resources/application-prod.yml

@@ -44,7 +44,7 @@ spring:
 #aliyun OSS服务配置信息,加载到SystemConfiguration
 aliyun:
   oss:
-    endpoint: http://oss-cn-beijing.aliyuncs.com
-    bucketName: temp15827479607
-    accessKeyId: LTAI4FkSqFZa6LH9HqAsVott
-    accessKeySecret: w7GXuh5tf1hduQuZ2AzT3a4q14BI1i
+    endpoint: http://oss-cn-hangzhou.aliyuncs.com
+    bucketName: ty-oss-file
+    accessKeyId: LTAI4G1iLTczu8JxM2En57gY
+    accessKeySecret: VHeRj3C2br87Uh447ruHsSTvYSDWeC

+ 4 - 4
lift-quan-service/src/main/resources/application-prod.yml

@@ -22,7 +22,7 @@ spring:
 #aliyun OSS服务配置信息,加载到SystemConfiguration
 aliyun:
   oss:
-    endpoint: http://oss-cn-beijing.aliyuncs.com
-    bucketName: temp15827479607
-    accessKeyId: LTAI4FkSqFZa6LH9HqAsVott
-    accessKeySecret: w7GXuh5tf1hduQuZ2AzT3a4q14BI1i
+    endpoint: http://oss-cn-hangzhou.aliyuncs.com
+    bucketName: ty-oss-file
+    accessKeyId: LTAI4G1iLTczu8JxM2En57gY
+    accessKeySecret: VHeRj3C2br87Uh447ruHsSTvYSDWeC

+ 3 - 35
lift-system-service/src/main/java/cn/com/ty/lift/system/faq/controller/FaqController.java

@@ -12,7 +12,7 @@ import javax.validation.Valid;
 import java.util.List;
 
 /**
- * 常见问题级常见问题分类表
+ * 常见问题
  *
  * @author wang-hai-cheng
  * @since 2019/12/4
@@ -27,7 +27,6 @@ public class FaqController {
      * 获取分类及问题列表
      *
      * @return RestResponse
-     * @since 2019/12/13 10:11
      */
     @PostMapping("/child")
     public RestResponse child() {
@@ -45,7 +44,6 @@ public class FaqController {
      *
      * @param faq type和parentId
      * @return RestResponse
-     * @since 2019/11/27 10:19
      */
     @PostMapping("/list")
     public RestResponse one(@RequestBody Faq faq) {
@@ -57,11 +55,10 @@ public class FaqController {
      *
      * @param faq 新增信息
      * @return RestResponse
-     * @since 2019/11/27 10:47
      */
     @PostMapping("/add")
     public RestResponse add(@RequestBody Faq faq) {
-        return faqService.add(faq);
+        return RestResponse.success(faqService.save(faq));
     }
 
 
@@ -70,14 +67,10 @@ public class FaqController {
      *
      * @param faq 需要更新的数据
      * @return RestResponse
-     * @since 2019/11/27 10:51
      */
     @PostMapping("/update")
     public RestResponse updateOne(@Valid @RequestBody Faq faq) {
-        if (faqService.updateById(faq)) {
-            return RestResponse.success(null, "成功");
-        }
-        return RestResponse.fail();
+        return RestResponse.success(faqService.updateById(faq));
     }
 
     /**
@@ -85,34 +78,9 @@ public class FaqController {
      *
      * @param faq id 要删除的id
      * @return RestResponse
-     * @since 2019/11/27 10:51
      */
     @PostMapping("/delete")
     public RestResponse delete(@Valid @RequestBody Faq faq) {
         return faqService.delete(faq.getId());
     }
-
-    /**
-     * 排序上移一位
-     *
-     * @param faq id 需要移位的id
-     * @return cn.com.xwy.boot.web.dto.RestResponse
-     * @since 2019/11/27 10:52
-     */
-    @PostMapping("/up")
-    public RestResponse up(@Valid @RequestBody Faq faq) {
-        return faqService.serial(faq.getId(), 1);
-    }
-
-    /**
-     * 排序下移一位
-     *
-     * @param faq id 需要移位的id
-     * @return cn.com.xwy.boot.web.dto.RestResponse
-     * @since 2019/11/27 10:52
-     */
-    @PostMapping("/down")
-    public RestResponse down(@Valid @RequestBody Faq faq) {
-        return faqService.serial(faq.getId(), 0);
-    }
 }

+ 1 - 65
lift-system-service/src/main/java/cn/com/ty/lift/system/faq/service/impl/FaqServiceImpl.java

@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
-import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -34,27 +33,6 @@ public class FaqServiceImpl extends ServiceImpl<FaqMapper, Faq> implements FaqSe
         return RestResponse.success(faqs, "成功");
     }
 
-    /**
-     * 新增分类或问题或答案
-     *
-     * @since 2019/12/5 11:01
-     */
-    public RestResponse add(Faq faq) {
-        List<Faq> faqs = this.list(new QueryWrapper<Faq>()
-                .select("serial")
-                .eq("parent_id", faq.getParentId())
-                .orderByDesc("serial"));
-        if (faqs.isEmpty()) {
-            faq.setSerial(1);
-        } else {
-            faq.setSerial(faqs.get(0).getSerial() + 1);
-        }
-        if (this.save(faq)) {
-            return RestResponse.success(null, "成功");
-        }
-        return RestResponse.fail();
-    }
-
     /**
      * 删除id及id下的所有记录
      *
@@ -62,7 +40,7 @@ public class FaqServiceImpl extends ServiceImpl<FaqMapper, Faq> implements FaqSe
      * @return 操作结果
      */
     public RestResponse delete(Long id) {
-        List<Faq> faqs = this.list(new QueryWrapper<Faq>().select("id", "parent_id","serial"));
+        List<Faq> faqs = this.list(new QueryWrapper<Faq>().select("id", "parent_id", "serial"));
         removeFaqs(id, faqs);
         List<Long> ids = faqs.stream()
                 //保留序号为-1的记录
@@ -91,46 +69,4 @@ public class FaqServiceImpl extends ServiceImpl<FaqMapper, Faq> implements FaqSe
             }
         }
     }
-
-    //type 1上移 0下移
-    public RestResponse serial(Long id, Integer type) {
-        Faq byId = this.getById(id);
-        if (null == byId) {
-            return RestResponse.success();
-        }
-        List<Faq> faqs = this.list(new QueryWrapper<Faq>()
-                .eq("parent_id", byId.getParentId())
-                .eq("type", byId.getType())
-                .orderByDesc("serial"));
-        if (faqs.size() == 1) {
-            return RestResponse.success(null, "成功");
-        }
-        //type 0下移
-        //type 1上移
-        if (type == 1) {
-            faqs.sort(Comparator.comparing(Faq::getSerial));
-        }
-        if (faqs.get(0).getSerial().equals(byId.getSerial())) {
-            return RestResponse.success(null, "成功");
-        }
-        if (upOrDown(byId, faqs)) {
-            return RestResponse.success(null, "成功");
-        }
-        return RestResponse.fail();
-    }
-
-    private boolean upOrDown(Faq byId, List<Faq> faqs) {
-        Faq f = new Faq();
-        for (Faq faq : faqs) {
-            if (faq.getSerial().equals(byId.getSerial())) {
-                f.setSerial(byId.getSerial());
-                byId.setSerial(f.getSerial());
-                if (this.updateById(byId) && this.updateById(f)) {
-                    return true;
-                }
-            }
-            f = faq;
-        }
-        return false;
-    }
 }

+ 1 - 1
lift-system-service/src/main/java/cn/com/ty/lift/system/user/controller/LoginController.java

@@ -189,7 +189,7 @@ public class LoginController {
                 return RestResponse.fail(ApiConstants.RESULT_ERROR, "请一分钟后重新获取");
             }
             //校验通过获取短信验证码
-            String smsCode = AliyunSmsUtil.sendSmsCode(mobile, AliConstants.SmsConstants.TEST_TEMPLATE_CODE);
+            String smsCode = AliyunSmsUtil.sendSmsCode(mobile, AliConstants.SmsConstants.TEMPLATE_CODE);
             if (StringUtils.isNotBlank(smsCode)) {
                 //将手机号放入session中
                 request.getSession().setAttribute(AliConstants.SmsConstants.MOBILE, mobile);

+ 4 - 4
lift-system-service/src/main/resources/application-prod.yml

@@ -22,7 +22,7 @@ spring:
 #aliyun OSS服务配置信息,加载到SystemConfiguration
 aliyun:
   oss:
-    endpoint: http://oss-cn-beijing.aliyuncs.com
-    bucketName: temp15827479607
-    accessKeyId: LTAI4FkSqFZa6LH9HqAsVott
-    accessKeySecret: w7GXuh5tf1hduQuZ2AzT3a4q14BI1i
+    endpoint: http://oss-cn-hangzhou.aliyuncs.com
+    bucketName: ty-oss-file
+    accessKeyId: LTAI4G1iLTczu8JxM2En57gY
+    accessKeySecret: VHeRj3C2br87Uh447ruHsSTvYSDWeC

+ 40 - 40
upload/src/main/java/com/controller/common/CommonController.java

@@ -1,8 +1,8 @@
 package com.controller.common;
 
 import cn.com.ty.lift.common.utils.ValuePool;
-import cn.com.ty.lift.common.verify.Verify;
-import cn.hutool.core.date.DateUtil;
+import cn.com.ty.lift.common.verify.Validate;
+import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import lombok.AllArgsConstructor;
@@ -13,17 +13,21 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 
 /**
- * 文件上传接口
+ * 图片上传接口
  */
 @Slf4j
 @AllArgsConstructor
 @RestController
 @RequestMapping("common")
 public class CommonController {
-    private static final String DateInPath = "yyyy/MM/dd";
+
+    private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+
     private SystemConfiguration systemConfiguration;
 
     /**
@@ -34,29 +38,26 @@ public class CommonController {
      */
     @PostMapping("uploads")
     public RestResponse uploads(@RequestParam("files") MultipartFile[] files) {
-        Verify.notTrue(Objects.isNull(files) || files.length == 0, Verify.Upload.fileDataMissing);
+        Validate.notTrue(ArrayUtil.isEmpty(files), ValuePool.UPLOAD_DATA_MISSING);
+        Map<String, MultipartFile> fileMap = new HashMap<>();
+        //1 先解析文件格式
+        for (MultipartFile file : files) {
+            String fileName = handleFile(file);
+            fileMap.put(fileName, file);
+        }
+        //2 批量上传
         try {
-            Map<String, MultipartFile> fileMap = new HashMap<>();
-            //1 先解析文件格式
-            for (MultipartFile file : files) {
-                String fileName = handleFile(file);
-                if (StrUtil.isEmpty(fileName)) {
-                    return RestResponse.fail(Verify.Upload.fileFormatNotSupport);
-                }
-                fileMap.put(fileName, file);
-            }
-            //2 批量上传
             List<String> urls = new ArrayList<>();
             for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()) {
                 String url = systemConfiguration.build().putObject(entry.getKey(), entry.getValue().getBytes());
-                log.info("上传文件,文件URL: {}", url);
-                Verify.notNull(url, Verify.Upload.fileUploadFail);
+                log.info("upload file complete, file URL: {}", url);
+                Validate.notNull(url, ValuePool.UPLOAD_FAIL);
                 urls.add(url);
             }
             return RestResponse.success(urls);
         } catch (Exception e) {
-            log.error("上传文件异常", e);
-            return RestResponse.fail(Verify.Upload.fileUploadFail);
+            log.error("upload file occur exception", e);
+            return RestResponse.fail(ValuePool.UPLOAD_FAIL);
         }
     }
 
@@ -68,18 +69,15 @@ public class CommonController {
      */
     @PostMapping("upload")
     public RestResponse upload(@RequestParam("file") MultipartFile file) {
-        Verify.notTrue(Objects.isNull(file) || file.isEmpty(), Verify.Upload.fileDataMissing);
+        Validate.notTrue(Objects.isNull(file) || file.isEmpty(), ValuePool.UPLOAD_DATA_MISSING);
+        String fileName = handleFile(file);
         try {
-            String fileName = handleFile(file);
-            if (StrUtil.isEmpty(fileName)) {
-                return RestResponse.fail(Verify.Upload.fileFormatNotSupport);
-            }
             String url = systemConfiguration.build().putObject(fileName, file.getBytes());
-            log.info("上传文件,文件URL: {}", url);
+            log.info("upload file complete, file URL: {}", url);
             return RestResponse.success(url);
         } catch (Exception e) {
-            log.error("上传文件异常", e);
-            return RestResponse.fail(Verify.Upload.fileUploadFail);
+            log.error("upload file occur exception", e);
+            return RestResponse.fail(ValuePool.UPLOAD_FAIL);
         }
     }
 
@@ -90,27 +88,29 @@ public class CommonController {
      * @return the name string of the file.
      */
     private String handleFile(MultipartFile file) {
-        Verify.notTrue(Objects.isNull(file) || file.isEmpty(), Verify.Upload.fileDataMissing);
+        Validate.notTrue(Objects.isNull(file) || file.isEmpty(), ValuePool.UPLOAD_DATA_MISSING);
         // 获取文件名,带后缀
         String originalFilename = file.getOriginalFilename();
-        log.info("上传文件,原文件名:{}", originalFilename);
+        log.info("the original file name:{}", originalFilename);
         // 获取文件的后缀格式
+        Validate.notNull(originalFilename, ValuePool.UPLOAD_ORIGINAL_NAME_MISSING);
         int lastDotIndex = originalFilename.lastIndexOf(ValuePool.DOT);
-        Verify.notTrue(-1 == lastDotIndex, "文件名解析不到文件格式");
+        Validate.notTrue(-1 == lastDotIndex, ValuePool.UPLOAD_FORMAT_MISSING);
         String fileSuffix = originalFilename.substring(lastDotIndex).toLowerCase();
-        Verify.notNull(fileSuffix, Verify.Upload.fileFormatIllegal);
+        Validate.notNull(fileSuffix, ValuePool.UPLOAD_FORMAT_ILLEGAL);
         long fileSize = file.getSize();
-        if (StrUtil.equalsAny(fileSuffix, Verify.Upload.pics)) {
-            Verify.notTrue(fileSize > Verify.Upload.maxSizePic, "文件大小不超过" + Verify.Upload.maxSizePicDesc);
-        } else if (StrUtil.equalsAny(fileSuffix, Verify.Upload.files)) {
-            Verify.notTrue(fileSize > Verify.Upload.maxSizeFile, "文件大小不超过" + Verify.Upload.maxSizeFileDesc);
-        } else if (StrUtil.equalsAny(fileSuffix, Verify.Upload.videos)) {
-            Verify.notTrue(fileSize > Verify.Upload.maxSizeVideo, "文件大小不超过" + Verify.Upload.maxSizeVideoDesc);
+        log.info("the size of file: {}", fileSize);
+        if (StrUtil.equalsAny(fileSuffix, ValuePool.UPLOAD_PICS)) {
+            Validate.notTrue(fileSize > ValuePool.UPLOAD_MAX_SIZE_PIC, ValuePool.UPLOAD_MAX_SIZE_PIC_DESC);
+        } else if (StrUtil.equalsAny(fileSuffix, ValuePool.UPLOAD_FILES)) {
+            Validate.notTrue(fileSize > ValuePool.UPLOAD_MAX_SIZE_FILE, ValuePool.UPLOAD_MAX_SIZE_FILE_DESC);
+        } else if (StrUtil.equalsAny(fileSuffix, ValuePool.UPLOAD_VIDEOS)) {
+            Validate.notTrue(fileSize > ValuePool.UPLOAD_MAX_SIZE_VIDEO, ValuePool.UPLOAD_MAX_SIZE_VIDEO_DESC);
         } else {
-            return null;
+            throw Validate.validateException(ValuePool.UPLOAD_FORMAT_NOT_SUPPORT);
         }
-        String fileName = StrUtil.format("{}/{}{}", DateUtil.format(DateUtil.date(), DateInPath), IdWorker.getIdStr(), fileSuffix);
-        log.info("上传文件,新文件名:{}", fileName);
+        String fileName = StrUtil.format("{}/{}{}", DATE_TIME_FORMATTER.format(LocalDate.now()), IdWorker.getIdStr(), fileSuffix);
+        log.info("the new file name:{}", fileName);
         return fileName;
     }
 }

+ 1 - 2
upload/src/main/java/com/controller/common/RestResponse.java

@@ -1,6 +1,5 @@
 package com.controller.common;
 
-
 public final class RestResponse<T> implements ExceptionInfo {
     private final T data;
     private final String statusCode;
@@ -29,7 +28,7 @@ public final class RestResponse<T> implements ExceptionInfo {
     }
 
     public static <T> RestResponse<T> fail(String statusCode, String message) {
-        return new RestResponse((Object) null, statusCode, message);
+        return new RestResponse((Object)null, statusCode, message);
     }
 
     public static <T> RestResponse<T> fail(String message) {

+ 132 - 3
upload/src/main/java/com/controller/common/SystemConfiguration.java

@@ -1,18 +1,44 @@
 package com.controller.common;
 
 import cn.com.ty.lift.common.aliservice.aliyunoss.AliyunOSS;
-import cn.com.ty.lift.common.verify.Verifier;
+import cn.com.ty.lift.common.export.ExportUtils;
+import cn.com.ty.lift.common.sql.SqlAnalysisInterceptor;
+import cn.com.ty.lift.common.sql.SqlIllegalInterceptor;
+import cn.com.ty.lift.common.verify.Validation;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.parser.ISqlParser;
+import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.SqlExplainInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler;
+import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
+import net.sf.jsqlparser.expression.Expression;
+import net.sf.jsqlparser.expression.LongValue;
+import org.apache.ibatis.mapping.MappedStatement;
 import org.springframework.aop.support.DefaultPointcutAdvisor;
 import org.springframework.aop.support.annotation.AnnotationMatchingPointcut;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.PostConstruct;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -57,15 +83,118 @@ public class SystemConfiguration {
         return AliyunOSS.me(endpoint, accessKeyId, accessKeySecret, bucketName);
     }
 
+    /**
+     * 全局格式化日期
+     */
+    @Bean
+    public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
+        return builder -> {
+            builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
+            builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
+            builder.serializers(new LocalTimeSerializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
+
+            builder.deserializers(new LocalDateDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)));
+            builder.deserializers(new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)));
+            builder.deserializers(new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)));
+
+            builder.serializerByType(Long.class, ToStringSerializer.instance);
+        };
+    }
+
+    /**
+     * mybatis-plus 执行sql性能监测
+     */
+    @Bean
+    @ConditionalOnMissingBean(PerformanceInterceptor.class)
+    public SqlAnalysisInterceptor sqlAnalysisInterceptor() {
+        SqlAnalysisInterceptor sqlAnalysisInterceptor = new SqlAnalysisInterceptor();
+        //格式化执行的sql
+        sqlAnalysisInterceptor.setFormat(true);
+        //sql写入日志文件
+        sqlAnalysisInterceptor.setLogWrite(true);
+        return sqlAnalysisInterceptor;
+    }
+
+    /**
+     * SQL是影响系统性能最重要的因素,所以拦截提示不合理的SQL语句
+     */
+//    @Bean
+    @ConditionalOnMissingBean
+    public SqlIllegalInterceptor sqlIllegalInterceptor() {
+        SqlIllegalInterceptor sqlIllegalInterceptor = new SqlIllegalInterceptor();
+        return sqlIllegalInterceptor;
+    }
+
+    /**
+     * 防止全表更新与删除
+     */
+//    @Bean
+//    @ConditionalOnMissingBean
+    public SqlExplainInterceptor sqlExplainInterceptor() {
+        SqlExplainInterceptor sqlExplainInterceptor = new SqlExplainInterceptor();
+        return sqlExplainInterceptor;
+    }
+
+    @Bean
+    public ExportUtils exportUtils() {
+        return new ExportUtils();
+    }
+
     /**
      * 方法参数校验拦截器,标注了@Verifier的方法,会检查参数,如果参数不满足条件,直接抛出异常
      */
     @Bean
     public DefaultPointcutAdvisor defaultPointcutAdvisor() {
         DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor();
-        advisor.setPointcut(new AnnotationMatchingPointcut(RestController.class, Verifier.class));
-        advisor.setAdvice(new VerifyMethodInterceptor());
+        advisor.setPointcut(new AnnotationMatchingPointcut(RestController.class, Validation.class));
+        advisor.setAdvice(new ValidateMethodInterceptor());
         advisor.setOrder(2);
         return advisor;
     }
+
+    /**
+     * 多租户 SQL 解析器
+     */
+//    @Bean
+    @ConditionalOnMissingBean
+    public PaginationInterceptor paginationInterceptor() {
+        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+        /*
+         * 多租户SQL 解析处理拦截器<br>
+         * 动态获取当前登录用户所在的mt_company_id( 注意观察 SQL )<br>
+         */
+        List<ISqlParser> sqlParserList = new ArrayList<>();
+        TenantSqlParser tenantSqlParser = new TenantSqlParser();
+        tenantSqlParser.setTenantHandler(new TenantHandler() {
+            @Override
+            public Expression getTenantId() {
+                // 该 where 条件 3.2.0 版本开始添加的,用于分区是否为在 where 条件中使用
+                // 如果是in/between之类的多个tenantId的情况,参考下方示例
+                return new LongValue(1L);
+            }
+
+            @Override
+            public String getTenantIdColumn() {
+                return "mt_company_id";
+            }
+
+            @Override
+            public boolean doTableFilter(String tableName) {
+                // 这里可以判断是否过滤表
+            /*
+            if ("user".equals(tableName)) {
+                return true;
+            }*/
+                return false;
+            }
+        });
+        sqlParserList.add(tenantSqlParser);
+        paginationInterceptor.setSqlParserList(sqlParserList);
+        paginationInterceptor.setSqlParserFilter((metaObject) -> {
+            MappedStatement ms = SqlParserHelper.getMappedStatement(metaObject);
+            // 过滤自定义查询此时无租户信息约束
+            return "com.baomidou.springboot.mapper.UserMapper.selectListBySQL".equals(ms.getId());
+        });
+        return paginationInterceptor;
+    }
 }

+ 17 - 13
upload/src/main/java/com/controller/common/VerifyMethodInterceptor.java

@@ -1,45 +1,49 @@
 package com.controller.common;
 
-import cn.com.ty.lift.common.verify.Ver;
-import cn.com.ty.lift.common.verify.Verifier;
-import cn.com.ty.lift.common.verify.VerifyProcessor;
+import cn.com.ty.lift.common.verify.Val;
+import cn.com.ty.lift.common.verify.Validation;
+import cn.com.ty.lift.common.verify.Validator;
 import org.aopalliance.intercept.MethodInterceptor;
 import org.aopalliance.intercept.MethodInvocation;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Parameter;
+import java.util.Objects;
 
 /**
  * the {@link MethodInterceptor} for verify parameter.
+ *
+ * @author wcz
+ * @since 2020/3/15
  */
-public class VerifyMethodInterceptor implements MethodInterceptor {
+public class ValidateMethodInterceptor implements MethodInterceptor {
     @Override
     public Object invoke(MethodInvocation invocation) throws Throwable {
-        //check whether the method is present with verifier annotation.
+        //check whether the method is present with validation annotation.
         Method method = invocation.getMethod();
-        boolean annotationPresent = method.isAnnotationPresent(Verifier.class);
-        if (!annotationPresent) {
+        boolean annotationPresent = method.isAnnotationPresent(Validation.class);
+        if(!annotationPresent){
             return invocation.proceed();
         }
         //check the list of parameters.
         Parameter[] parameters = method.getParameters();
-        if (null == parameters || parameters.length == 0) {
+        if(Objects.isNull(parameters) || parameters.length == 0){
             return invocation.proceed();
         }
-        //if the parameter is present with Ver. return the index.
+        //if the parameter is present with Val. return the index.
         Object object = null;
         Object[] arguments = invocation.getArguments();
         for (int i = 0; i < parameters.length; i++) {
-            if (parameters[i].isAnnotationPresent(Ver.class)) {
+            if(parameters[i].isAnnotationPresent(Val.class)){
                 object = arguments[i];
                 break;
             }
         }
-        if (null == object) {
+        if(Objects.isNull(object)){
             return invocation.proceed();
         }
-        Verifier verifier = method.getDeclaredAnnotation(Verifier.class);
-        VerifyProcessor.perform(object, verifier.fields());
+        Validation validation = method.getDeclaredAnnotation(Validation.class);
+        Validator.valid(object, validation.fields());
         return invocation.proceed();
     }
 }

+ 5 - 5
upload/src/main/resources/application-prod.yml

@@ -1,7 +1,7 @@
-#aliyun OSS服务配置信息,加载到SystemConfiguration
+#aliyun OSS服务配置信息
 aliyun:
   oss:
-    endpoint: http://oss-cn-beijing.aliyuncs.com
-    bucketName: temp15827479607
-    accessKeyId: LTAI4FkSqFZa6LH9HqAsVott
-    accessKeySecret: w7GXuh5tf1hduQuZ2AzT3a4q14BI1i
+    endpoint: http://oss-cn-hangzhou.aliyuncs.com
+    bucketName: ty-oss-file
+    accessKeyId: LTAI4G1iLTczu8JxM2En57gY
+    accessKeySecret: VHeRj3C2br87Uh447ruHsSTvYSDWeC

+ 1 - 1
upload/src/main/resources/logback-spring.xml

@@ -133,7 +133,7 @@
     <logger name="com.github.miemiedev.mybatis.paginator" level="INFO" additivity="false"/>
 
     <!-- Logger 根目录 -->
-    <root level="ERROR">
+    <root level="INFO">
         <appender-ref ref="STDOUT"/>
         <appender-ref ref="DEBUG"/>
         <appender-ref ref="ERROR"/>