jiaosong
2023-08-14 6a571d05a20840fcb9faf0026ea7abd81700fee3
# 工资表配置表 联调修改
已添加1个文件
已修改8个文件
235 ■■■■■ 文件已修改
server/src/main/java/doumeemes/api/business/SalaryParamController.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/api/ext/SalaryParamExtController.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/SalaryParamMapper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/business/vo/SalaryParamVO.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/ext/dto/SalaryParamDTO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/dao/ext/dto/SalaryParamImportDTO.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/service/business/SalaryParamService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/java/doumeemes/service/business/impl/SalaryParamServiceImpl.java 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/src/main/resources/mappers/SalaryParamMapper.xml 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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查询")
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);
    }
}
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);
}
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;
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;
}
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;
}
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);
}
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;
/**
 * è®¾ç½®ç±»-绩效工资配置表Service实现
@@ -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(), "对不起,您无权限进行该操作!");
        }
        //解析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);
        }
    }
}
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 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>