From 6a571d05a20840fcb9faf0026ea7abd81700fee3 Mon Sep 17 00:00:00 2001
From: jiaosong <jiaosong6760@dingtalk.com>
Date: 星期一, 14 八月 2023 18:05:57 +0800
Subject: [PATCH] # 工资表配置表 联调修改

---
 server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java                |    9 ++
 server/src/main/java/doumeemes/dao/business/SalaryParamMapper.java               |    4 
 server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java             |   43 ++++++++++
 server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java |  103 +++++++++++++++++++++++++
 server/src/main/java/doumeemes/service/business/SalaryParamService.java          |   10 ++
 server/src/main/resources/mappers/SalaryParamMapper.xml                          |   25 +++--
 server/src/main/java/doumeemes/api/business/SalaryParamController.java           |    7 +
 server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java             |   32 +++++++
 server/src/main/java/doumeemes/dao/ext/dto/SalaryParamDTO.java                   |    4 
 9 files changed, 215 insertions(+), 22 deletions(-)

diff --git a/server/src/main/java/doumeemes/api/business/SalaryParamController.java b/server/src/main/java/doumeemes/api/business/SalaryParamController.java
index 899774b..d405ec3 100644
--- a/server/src/main/java/doumeemes/api/business/SalaryParamController.java
+++ b/server/src/main/java/doumeemes/api/business/SalaryParamController.java
@@ -7,6 +7,7 @@
 import doumeemes.core.model.PageWrap;
 import doumeemes.core.model.PageData;
 import doumeemes.dao.business.model.SalaryParam;
+import doumeemes.dao.business.vo.SalaryParamVO;
 import doumeemes.dao.ext.dto.SalaryParamDTO;
 import doumeemes.service.business.SalaryParamService;
 import io.swagger.annotations.Api;
@@ -70,8 +71,8 @@
 
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
-    @RequiresPermissions("business:salaryparam:query")
-    public ApiResponse<PageData<SalaryParam>> findPage (@RequestBody PageWrap<SalaryParamDTO> pageWrap) {
+//    @RequiresPermissions("business:salaryparam:query")
+    public ApiResponse<PageData<SalaryParamVO>> findPage (@RequestBody PageWrap<SalaryParamDTO> pageWrap) {
         return ApiResponse.success(salaryParamService.findPage(pageWrap));
     }
 
@@ -79,7 +80,7 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:salaryparam:exportExcel")
     public void exportExcel (@RequestBody PageWrap<SalaryParamDTO> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(SalaryParam.class).export(salaryParamService.findPage(pageWrap).getRecords(), "璁剧疆绫�-缁╂晥宸ヨ祫閰嶇疆琛�", response);
+        ExcelExporter.build(SalaryParamVO.class).export(salaryParamService.findPage(pageWrap).getRecords(), "璁剧疆绫�-缁╂晥宸ヨ祫閰嶇疆琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
diff --git a/server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java b/server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java
index 5ed0cef..3bbb7ee 100644
--- a/server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java
+++ b/server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java
@@ -7,16 +7,24 @@
 import doumeemes.core.model.PageData;
 import doumeemes.core.model.PageWrap;
 import doumeemes.dao.business.model.SalaryParam;
+import doumeemes.dao.business.vo.SalaryParamVO;
 import doumeemes.dao.ext.dto.SalaryParamDTO;
 import doumeemes.service.business.SalaryParamService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
 
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -71,7 +79,7 @@
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @RequiresPermissions("business:salaryparam:query")
-    public ApiResponse<PageData<SalaryParam>> findPage (@RequestBody PageWrap<SalaryParamDTO> pageWrap) {
+    public ApiResponse<PageData<SalaryParamVO>> findPage (@RequestBody PageWrap<SalaryParamDTO> pageWrap) {
         return ApiResponse.success(salaryParamService.findPage(pageWrap));
     }
 
@@ -79,7 +87,7 @@
     @PostMapping("/exportExcel")
     @RequiresPermissions("business:salaryparam:exportExcel")
     public void exportExcel (@RequestBody PageWrap<SalaryParamDTO> pageWrap, HttpServletResponse response) {
-        ExcelExporter.build(SalaryParam.class).export(salaryParamService.findPage(pageWrap).getRecords(), "璁剧疆绫�-缁╂晥宸ヨ祫閰嶇疆琛�", response);
+        ExcelExporter.build(SalaryParamVO.class).export(salaryParamService.findPage(pageWrap).getRecords(), "璁剧疆绫�-缁╂晥宸ヨ祫閰嶇疆琛�", response);
     }
 
     @ApiOperation("鏍规嵁ID鏌ヨ")
@@ -88,4 +96,24 @@
     public ApiResponse findById(@PathVariable Integer id) {
         return ApiResponse.success(salaryParamService.findById(id));
     }
+
+    @ApiOperation(value = "鎵归噺瀵煎叆璁″垝", notes = "鎵归噺瀵煎叆璁″垝", httpMethod = "POST", position = 6)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "folder", value = "鏂囦欢澶�", required = true, paramType = "query", dataType = "String", dataTypeClass = String.class),
+    })
+    @PostMapping(value = "/importBatch", headers = "content-type=multipart/form-data")
+    @RequiresPermissions("business:salaryparam:create")
+    public ApiResponse importBatch(String folder, HttpServletRequest request, HttpServletResponse response) throws Exception {
+        CommonsMultipartResolver multipartResovler = new CommonsMultipartResolver();
+        if (multipartResovler.isMultipart(request)) {
+            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
+            Iterator<String> it = multipartRequest.getFileNames();
+            while (it.hasNext()) {
+                MultipartFile file = multipartRequest.getFile((String) it.next());
+                salaryParamService.importPlans(file);
+                break;
+            }
+        }
+        return ApiResponse.success( null);
+    }
 }
diff --git a/server/src/main/java/doumeemes/dao/business/SalaryParamMapper.java b/server/src/main/java/doumeemes/dao/business/SalaryParamMapper.java
index 42902e8..f47925a 100644
--- a/server/src/main/java/doumeemes/dao/business/SalaryParamMapper.java
+++ b/server/src/main/java/doumeemes/dao/business/SalaryParamMapper.java
@@ -3,7 +3,9 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import doumeemes.dao.business.model.SalaryParam;
+import doumeemes.dao.business.vo.SalaryParamVO;
 import doumeemes.dao.ext.dto.SalaryParamDTO;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @author 姹熻箘韫�
@@ -12,6 +14,6 @@
 public interface SalaryParamMapper extends BaseMapper<SalaryParam> {
 
 
-    IPage<SalaryParam> selectPage(IPage<SalaryParam> page, SalaryParamDTO model);
+    IPage<SalaryParamVO> selectPage(IPage<SalaryParam> page, @Param("model") SalaryParamDTO model);
 
 }
diff --git a/server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java b/server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java
index 7d01beb..e3d3525 100644
--- a/server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java
+++ b/server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java
@@ -7,6 +7,7 @@
 import lombok.Data;
 import javax.validation.constraints.NotEmpty;
 import java.math.BigDecimal;
+import java.util.Date;
 
 @Data
 @ApiModel("")
@@ -15,6 +16,14 @@
     @ApiModelProperty(value = "涓婚敭")
     private Integer id;
 
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private String createUserName;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    private Date createTime;
+
     @ApiModelProperty(value = "涓荤粍缁囩紪鐮侊紙鍏宠仈department琛ㄦ牴缁勭粐锛�")
     @ExcelColumn(name="涓荤粍缁囩紪鐮侊紙鍏宠仈department琛ㄦ牴缁勭粐锛�")
     private Integer rootDepartId;
diff --git a/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamDTO.java b/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamDTO.java
index bfe6fa0..7d9ba3e 100644
--- a/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamDTO.java
+++ b/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamDTO.java
@@ -18,7 +18,7 @@
     @ApiModelProperty(value = "宸ュ簭鍚嶇О")
     private String procedureName;
 
-    @ApiModelProperty(value = "璁′环鏂瑰紡")
-    private String type;
+    @ApiModelProperty(value = "璁′环鏂瑰紡  0璁′欢 1璁℃椂")
+    private Integer type;
 
 }
diff --git a/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java b/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java
new file mode 100644
index 0000000..59044f2
--- /dev/null
+++ b/server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java
@@ -0,0 +1,43 @@
+package doumeemes.dao.ext.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2022/04/20 10:56
+ */
+@Data
+@ApiModel("缁╂晥宸ヨ祫閰嶇疆瀵煎叆")
+public class SalaryParamImportDTO {
+
+    @Excel(name="璁′环鏂瑰紡",orderNum ="1")
+    private String type;
+
+    @Excel(name="宸ュ巶鍚嶇О",orderNum ="2")
+    private String departName;
+
+    @Excel(name="浜у搧鍚嶇О",orderNum ="3")
+    private String materialName;
+
+    @Excel(name="浜у搧缂栫爜",orderNum ="4")
+    private String materialCode;
+
+    @Excel(name="宸ュ簭鍚嶇О",orderNum ="5")
+    private String procedureName;
+
+    @Excel(name="宸ヨ祫鍗曚环(鍏�)",orderNum ="6")
+    private BigDecimal salary;
+
+    @Excel(name="鏍囧噯浜у嚭",orderNum ="7")
+    private Integer NUM;
+
+    @Excel(name="鏍囧噯宸ユ椂",orderNum ="8")
+    private String timesName;
+
+    @Excel(name="涓嶈壇鏄惁璁″叆",orderNum ="9")
+    private String unqualified;
+}
diff --git a/server/src/main/java/doumeemes/service/business/SalaryParamService.java b/server/src/main/java/doumeemes/service/business/SalaryParamService.java
index f58f513..6269780 100644
--- a/server/src/main/java/doumeemes/service/business/SalaryParamService.java
+++ b/server/src/main/java/doumeemes/service/business/SalaryParamService.java
@@ -3,7 +3,9 @@
 import doumeemes.core.model.PageData;
 import doumeemes.core.model.PageWrap;
 import doumeemes.dao.business.model.SalaryParam;
+import doumeemes.dao.business.vo.SalaryParamVO;
 import doumeemes.dao.ext.dto.SalaryParamDTO;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -95,7 +97,7 @@
      * @param pageWrap 鍒嗛〉瀵硅薄
      * @return PageData<SalaryParam>
      */
-    PageData<SalaryParam> findPage(PageWrap<SalaryParamDTO> pageWrap);
+    PageData<SalaryParamVO> findPage(PageWrap<SalaryParamDTO> pageWrap);
 
     /**
      * 鏉′欢缁熻
@@ -104,4 +106,10 @@
      * @return long
      */
     long count(SalaryParam salaryParam);
+
+    /**
+     *
+     * @param file
+     */
+    void importPlans(MultipartFile file);
 }
diff --git a/server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java b/server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java
index 566d872..95da0cb 100644
--- a/server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java
+++ b/server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java
@@ -1,13 +1,22 @@
 package doumeemes.service.business.impl;
 
+import doumeemes.core.constants.ResponseStatus;
+import doumeemes.core.exception.BusinessException;
 import doumeemes.core.model.LoginUserInfo;
 import doumeemes.core.model.PageData;
 import doumeemes.core.model.PageWrap;
 import doumeemes.core.utils.Constants;
 import doumeemes.core.utils.Utils;
+import doumeemes.core.utils.excel.EasyExcelUtil;
+import doumeemes.dao.business.DepartmentMapper;
+import doumeemes.dao.business.MaterialMapper;
+import doumeemes.dao.business.ProceduresMapper;
 import doumeemes.dao.business.SalaryParamMapper;
-import doumeemes.dao.business.model.SalaryParam;
+import doumeemes.dao.business.model.*;
+import doumeemes.dao.business.vo.SalaryParamVO;
 import doumeemes.dao.ext.dto.SalaryParamDTO;
+import doumeemes.dao.ext.dto.SalaryParamImportDTO;
+import doumeemes.service.business.DepartmentService;
 import doumeemes.service.business.SalaryParamService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -16,10 +25,14 @@
 import org.apache.shiro.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 璁剧疆绫�-缁╂晥宸ヨ祫閰嶇疆琛⊿ervice瀹炵幇
@@ -31,6 +44,15 @@
 
     @Autowired
     private SalaryParamMapper salaryParamMapper;
+
+    @Autowired
+    private DepartmentMapper departmentMapper;
+
+    @Autowired
+    private MaterialMapper materialMapper;
+
+    @Autowired
+    private ProceduresMapper proceduresMapper;
 
     @Override
     public Integer create(SalaryParam salaryParam) {
@@ -127,7 +149,7 @@
     }
 
     @Override
-    public PageData<SalaryParam> findPage(PageWrap<SalaryParamDTO> pageWrap) {
+    public PageData<SalaryParamVO> findPage(PageWrap<SalaryParamDTO> pageWrap) {
         IPage<SalaryParam> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
         SalaryParamDTO model = pageWrap.getModel();
         return PageData.from(salaryParamMapper.selectPage(page, model));
@@ -138,4 +160,81 @@
         QueryWrapper<SalaryParam> wrapper = new QueryWrapper<>(salaryParam);
         return salaryParamMapper.selectCount(wrapper);
     }
+
+    @Transactional(rollbackFor = {Exception.class,BusinessException.class})
+    @Override
+    public void importPlans(MultipartFile file) {
+
+        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "瀵逛笉璧凤紝鎮ㄦ棤鏉冮檺杩涜璇ユ搷浣滐紒");
+        }
+        //瑙f瀽excel
+        List<SalaryParamImportDTO> plansList = EasyExcelUtil.importExcel(file, 1, 1, SalaryParamImportDTO.class);
+        if(plansList == null || plansList.size()==0){
+            throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵煎叆鏁版嵁鍐呭鏈夎锛�");
+        }
+
+        plansList.forEach(s->{
+            if (Objects.isNull(s.getType())
+                || Objects.isNull(s.getDepartName())
+                || Objects.isNull(s.getMaterialCode())
+                || Objects.isNull(s.getProcedureName())
+                || Objects.isNull(s.getNUM())){
+                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵煎叆鏁版嵁鍐呭鏈夎锛�");
+            }
+        });
+
+
+        for (int i = 0; i < plansList.size(); i++) {
+            SalaryParamImportDTO salaryParamImportDTO = plansList.get(i);
+
+            QueryWrapper<Department> wrapper = new QueryWrapper<>();
+            wrapper.lambda()
+                    .eq(Department::getName,salaryParamImportDTO.getDepartName())
+                    .eq(Department::getType,Constants.DEPART_TYPE.factory)
+                    .last("limit 1");
+            Department department = departmentMapper.selectOne(wrapper);
+            if (Objects.isNull(department)){
+                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵煎叆鏁版嵁鍐呭銆愬叕鍙稿悕绉般�戞湁璇紒");
+            }
+
+            QueryWrapper<Material> materialWrapper = new QueryWrapper<>();
+            materialWrapper.lambda()
+                    .eq(Material::getCode,salaryParamImportDTO.getMaterialCode())
+                    .eq(Material::getRootDepartId,department.getRootId())
+                    .last("limit 1");
+            Material material = materialMapper.selectOne(materialWrapper);
+
+            if (Objects.isNull(material)){
+                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵煎叆鏁版嵁鍐呭銆愪骇鍝佺紪鐮併�戞湁璇紒");
+            }
+            if (Objects.nonNull(material) && Objects.equals(material.getName(),salaryParamImportDTO.getMaterialName())){
+                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵煎叆鏁版嵁鍐呭銆愪骇鍝佸悕绉般�戞湁璇紒");
+            }
+            QueryWrapper<Procedures> proceduresWrapper = new QueryWrapper<>();
+            proceduresWrapper.lambda()
+                    .eq(Procedures::getName,salaryParamImportDTO.getProcedureName())
+                    .eq(Procedures::getRootDepartId,department.getRootId())
+                    .eq(Procedures::getDepartId,department.getId())
+                    .last("limit 1");
+            Procedures procedures = proceduresMapper.selectOne(proceduresWrapper);
+            if (Objects.isNull(procedures)){
+                throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "瀵煎叆鏁版嵁鍐呭銆愬伐搴忓悕绉般�戞湁璇紒");
+            }
+            SalaryParam salaryParam = new SalaryParam();
+            salaryParam.setRootDepartId(department.getRootId());
+            salaryParam.setDepartId(department.getId());
+            salaryParam.setProcedureId(procedures.getId());
+            salaryParam.setMaterialId(material.getId());
+            salaryParam.setSalary(salaryParamImportDTO.getSalary());
+            salaryParam.setNum(salaryParamImportDTO.getNUM());
+            //todo
+//            salaryParam.setTimes();
+//            salaryParam.setUnqualified(salaryParamImportDTO.getUnqualified() );
+//            salaryParam.setType(salaryParamImportDTO.getType());
+            create(salaryParam);
+        }
+
+    }
 }
diff --git a/server/src/main/resources/mappers/SalaryParamMapper.xml b/server/src/main/resources/mappers/SalaryParamMapper.xml
index a91bf95..45c8024 100644
--- a/server/src/main/resources/mappers/SalaryParamMapper.xml
+++ b/server/src/main/resources/mappers/SalaryParamMapper.xml
@@ -3,21 +3,24 @@
 <mapper namespace="doumeemes.dao.business.SalaryParamMapper">
 
 
-    <select id="selectPage" resultType="doumeemes.dao.business.model.SalaryParam">
+    <select id="selectPage" resultType="doumeemes.dao.business.vo.SalaryParamVO">
         SELECT
             sp.*,
             m.`NAME` as materialName,
-            p.`NAME` as proceduresName
+            m.`CODE` as materialCode,
+            p.`NAME` as procedureName,
+            su.REALNAME as createUserName
         from
             salary_param sp
-                LEFT JOIN procedures p on p.ID = sp.PROCEDURE_ID
-                LEFT JOIN material m on m.ID = bom.MATERIAL_ID
-        <where>
-            <if test="keyWord != null and keyWord != ''">
-            p`NAME` like concat('%',#{keyWord},'%')
-            or p.`CODE` = #{keyWord}</if>
-            <if test="procedureName != null and procedureName = ''"> and p.`NAME` like concat('%',#{procedureName},'%')</if>
-            <if test="type != null"> and sp.`TYPE` = #{type}</if>
-        </where>
+        LEFT JOIN procedures p on p.ID = sp.PROCEDURE_ID
+        LEFT JOIN material m on m.ID = sp.MATERIAL_ID
+        LEFT JOIN `system_user` su  on su.ID = sp.CREATE_USER
+        where
+        sp.DELETED = 0
+        <if test="model.keyWord != null and model.keyWord != ''">
+           ( and  p`NAME` like concat('%',#{model.keyWord},'%')
+            or   p.`CODE` = #{model.keyWord})</if>
+        <if test="model.procedureName != null and model.procedureName != ''"> and p.`NAME` like concat('%',#{model.procedureName},'%')</if>
+        <if test="model.type != null"> and sp.`TYPE` = #{model.type}</if>
     </select>
 </mapper>

--
Gitblit v1.9.3