Преглед изворни кода

修改奖金不分摊相关

zhouyy пре 4 месеци
родитељ
комит
795fb99a0a

+ 100 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ContractBonusDetailVO.java

@@ -0,0 +1,100 @@
+package com.management.platform.entity.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class ContractBonusDetailVO {
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 公司表外键
+     */
+
+    private Integer companyId;
+
+    /**
+     * 员工id
+     */
+
+    private String userId;
+
+    /**员工姓名*/
+    private String userName;
+
+    /**
+     * 所属合同主体[user表plate1]
+     */
+
+    private String contract;
+
+    /**
+     * 项目id
+     */
+
+    private int projectId;
+    /**项目名称*/
+    private String projectName;
+
+    /**项目该月工时*/
+
+    private BigDecimal projectWorkingTime;
+
+    /**
+     * 奖金类型[中文]
+     */
+
+    private String bonusType;
+
+    /**
+     * 奖金金额
+     */
+
+    private BigDecimal bonusValue;
+
+    /**
+     * 总奖金金额
+     */
+
+    private BigDecimal totalBonusValue;
+
+    /**
+     * 年月 2024-01
+     */
+
+    private String ym;
+
+    /**
+     * 年 2024
+     */
+
+    private int year;
+
+    /**
+     * 月 08
+     */
+
+    private int month;
+
+    /**
+     * 创建人id
+     */
+
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+}

+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractBonusDetailMapper.java

@@ -3,6 +3,7 @@ package com.management.platform.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.management.platform.entity.ContractBonusDetail;
 import com.management.platform.entity.excel.ProjectContractBonusExcelHead;
+import com.management.platform.entity.vo.ContractBonusDetailVO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -10,5 +11,7 @@ import java.util.List;
 public interface ContractBonusDetailMapper extends BaseMapper<ContractBonusDetail> {
     void batchInsert(@Param("toAddList") List<ContractBonusDetail> toAddBonusDetailList);
 
-    List<ProjectContractBonusExcelHead> getExportContractProjectBonus(Integer year, Integer companyId);
+    List<ProjectContractBonusExcelHead> getExportContractProjectBonusForSpecial(Integer year, Integer companyId);
+
+    List<ContractBonusDetailVO> getExportContractProjectBonusForCommon(@Param("companyId") Integer companyId, @Param("year") Integer year);
 }

+ 77 - 28
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractBonusDetailServiceImpl.java

@@ -6,19 +6,14 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.management.platform.entity.ContractBonusDetail;
-import com.management.platform.entity.ContractBonusSummary;
-import com.management.platform.entity.User;
-import com.management.platform.entity.WxCorpInfo;
+import com.management.platform.entity.*;
 import com.management.platform.entity.bo.BonusDataBO;
 import com.management.platform.entity.excel.ProjectContractBonusExcelHead;
-import com.management.platform.entity.vo.ImportBonusTemplateVO;
-import com.management.platform.entity.vo.ProjectBonusTimeVO;
-import com.management.platform.entity.vo.ProjectBonusTotalTimeVO;
-import com.management.platform.entity.vo.UserProjectBonusTimeVO;
+import com.management.platform.entity.vo.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.ContractBonusDetailService;
 import com.management.platform.service.WxCorpInfoService;
+import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
 import com.management.platform.util.converter.ExcelMergeStrategy;
@@ -68,6 +63,9 @@ public class ContractBonusDetailServiceImpl extends ServiceImpl<ContractBonusDet
     @Resource
     private BonusExcludeProjectMapper bonusExcludeProjectMapper;
 
+    @Resource
+    private UserCustomMapper userCustomMapper;
+
     public static Map<Integer,String> bonusTypeMap = new HashMap<>();
     static {
         bonusTypeMap.put(1,"第一季度奖");
@@ -253,7 +251,12 @@ public class ContractBonusDetailServiceImpl extends ServiceImpl<ContractBonusDet
             if(CollectionUtils.isNotEmpty(emptyJNUserList)){
                 List<User> checkEmptyPlate1 = emptyJNUserList.stream().filter(t -> StringUtils.isBlank(t.getPlate1())).collect(Collectors.toList());
                 if(CollectionUtils.isNotEmpty(checkEmptyPlate1)){
-                    httpRespMsg.setError("员工:"+checkEmptyPlate1.stream().map(User::getName).collect(Collectors.toList())+" 没有合同主体");
+                    if(7737 == user.getCompanyId()){
+                        httpRespMsg.setError("员工:"+checkEmptyPlate1.stream().map(User::getName).collect(Collectors.toList())+" 没有合同主体");
+                    }else{
+                        httpRespMsg.setError("员工:"+checkEmptyPlate1.stream().map(User::getName).collect(Collectors.toList())+" 自定义字段没有值");
+                    }
+
                     return httpRespMsg;
                 }
                 checkEmptyPlate1.clear();
@@ -262,7 +265,11 @@ public class ContractBonusDetailServiceImpl extends ServiceImpl<ContractBonusDet
             if(CollectionUtils.isNotEmpty(notEmptyJNUsers)){
                 List<User> checkNotEmptyPlate1 = notEmptyJNUsers.stream().filter(t -> StringUtils.isBlank(t.getPlate1())).collect(Collectors.toList());
                 if(CollectionUtils.isNotEmpty(checkNotEmptyPlate1)){
-                    httpRespMsg.setError("员工:"+checkNotEmptyPlate1.stream().map(User::getName).collect(Collectors.toList())+" 没有合同主体");
+                    if(7737 == user.getCompanyId()){
+                        httpRespMsg.setError("员工:"+checkNotEmptyPlate1.stream().map(User::getName).collect(Collectors.toList())+" 没有合同主体");
+                    }else{
+                        httpRespMsg.setError("员工:"+checkNotEmptyPlate1.stream().map(User::getName).collect(Collectors.toList())+" 自定义字段没有值");
+                    }
                     return httpRespMsg;
                 }
                 checkNotEmptyPlate1.clear();
@@ -394,17 +401,18 @@ public class ContractBonusDetailServiceImpl extends ServiceImpl<ContractBonusDet
                 }
 
                 //该员工在该年内只能存在一条同奖金类型的数据
+                //12-25上传逻辑修改为删除所有再插入
                 contractBonusSummaryMapper.delete(new LambdaQueryWrapper<ContractBonusSummary>()
                         .eq(ContractBonusSummary::getCompanyId, user.getCompanyId())
                         .eq(ContractBonusSummary::getYear, useYear)
                         .eq(ContractBonusSummary::getBonusType,bonusType)
-                        .in(ContractBonusSummary::getUserId, checkUserTimeIdList)
+//                        .in(ContractBonusSummary::getUserId, checkUserTimeIdList)
                 );
                 contractBonusDetailMapper.delete(new LambdaQueryWrapper<ContractBonusDetail>()
                         .eq(ContractBonusDetail::getCompanyId, user.getCompanyId())
                         .eq(ContractBonusDetail::getBonusType,bonusType)
                         .eq(ContractBonusDetail::getYear,useYear)
-                        .in(ContractBonusDetail::getUserId,checkUserTimeIdList)
+//                        .in(ContractBonusDetail::getUserId,checkUserTimeIdList)
                 );
 
                 //插入数据
@@ -443,7 +451,7 @@ public class ContractBonusDetailServiceImpl extends ServiceImpl<ContractBonusDet
         if(null ==user){
             httpRespMsg.setError("登录凭证有误,请联系管理员");
         }
-        List<ProjectContractBonusExcelHead> contractProjectBonusList=contractBonusDetailMapper.getExportContractProjectBonus(year,user.getCompanyId());
+        List<ProjectContractBonusExcelHead> contractProjectBonusList=contractBonusDetailMapper.getExportContractProjectBonusForSpecial(year,user.getCompanyId());
         httpRespMsg.setData(contractProjectBonusList);
         return httpRespMsg;
     }
@@ -459,7 +467,6 @@ public class ContractBonusDetailServiceImpl extends ServiceImpl<ContractBonusDet
                 e.printStackTrace();
             }
         }
-        List<ProjectContractBonusExcelHead> dataList=contractBonusDetailMapper.getExportContractProjectBonus(year,user.getCompanyId());
 
         String fileName = null;
         try {
@@ -467,23 +474,65 @@ public class ContractBonusDetailServiceImpl extends ServiceImpl<ContractBonusDet
         } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
-
         response.setContentType("application/vnd.ms-excel;chartset=utf-8");
         response.setHeader("Content-Disposition", "attachment;filename=" + null==fileName?"file":fileName);
-
-        try (ServletOutputStream outputStream = response.getOutputStream()){
-            EasyExcel.write(outputStream, ProjectContractBonusExcelHead.class)
-                    .excelType(ExcelTypeEnum.XLSX)
-                    .autoCloseStream(true)
-                    .registerWriteHandler(new ExcelMergeStrategy(
-                            dataList.stream().map(ProjectContractBonusExcelHead::getContract)
-                                    .collect(Collectors.toList()), 0
-                    ))
+        if(7737 == user.getCompanyId()){
+            List<ProjectContractBonusExcelHead> dataList=contractBonusDetailMapper.getExportContractProjectBonusForSpecial(year,user.getCompanyId());
+            try (ServletOutputStream outputStream = response.getOutputStream()){
+                EasyExcel.write(outputStream, ProjectContractBonusExcelHead.class)
+                        .excelType(ExcelTypeEnum.XLSX)
+                        .autoCloseStream(true)
+                        .registerWriteHandler(new ExcelMergeStrategy(
+                                dataList.stream().map(ProjectContractBonusExcelHead::getContract)
+                                        .collect(Collectors.toList()), 0
+                        ))
 //                    .registerWriteHandler(new WidthStyleStrategy())
-                    .sheet("sheet01")
-                    .doWrite(dataList);
-        } catch (IOException e) {
-            e.printStackTrace();
+                        .sheet("sheet01")
+                        .doWrite(dataList);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }else{
+            //其他公司需要用ext1的自定义配置项读取
+            List<List<String>> allDatas = new ArrayList<>();
+            List<String> headList = new ArrayList<>();
+            UserCustom ext1UserCustom = userCustomMapper.selectOne(new LambdaQueryWrapper<UserCustom>()
+                    .eq(UserCustom::getCompanyId, user.getCompanyId())
+                    .last(" limit 1 ")
+            );
+            boolean checkExt1Exist = false;
+            if(null != ext1UserCustom){
+                checkExt1Exist = true;
+                String ext1Titile = ext1UserCustom.getName();
+                headList.add(ext1Titile);
+            }
+            headList.add("员工姓名");
+            headList.add("奖金类型");
+            headList.add("项目名称");
+            headList.add("员工该项目奖金金额");
+            headList.add("年月");
+            allDatas.add(headList);
+
+            List<ContractBonusDetailVO> contractBonusDetails = contractBonusDetailMapper.getExportContractProjectBonusForCommon(user.getCompanyId(),year);
+            for (ContractBonusDetailVO detailVO : contractBonusDetails) {
+                List<String> rowData = new ArrayList<>();
+                if(checkExt1Exist){
+                    rowData.add(detailVO.getContract());
+                }
+                rowData.add(detailVO.getUserName());
+                rowData.add(detailVO.getBonusType());
+                rowData.add(detailVO.getProjectName());
+                rowData.add(detailVO.getBonusValue().setScale(4, BigDecimal.ROUND_HALF_UP).toString());
+                rowData.add(detailVO.getYm());
+                allDatas.add(rowData);
+            }
+            try {
+                ExcelUtil.writeEasyExcel(fileName,allDatas,response);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
         }
+
     }
 }

+ 130 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/ExcelUtil.java

@@ -7,6 +7,8 @@ import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 import org.apache.poi.xssf.usermodel.XSSFColor;
 import org.springframework.stereotype.Component;
 
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.List;
@@ -21,6 +23,134 @@ public class ExcelUtil {
      * @return
      */
 
+    public static void writeEasyExcel(String title, List<List<String>> list, HttpServletResponse response){
+        try {
+
+            // 创建工作簿, 换成XSSSF 来支持万以上的数据
+            SXSSFWorkbook workBook = new SXSSFWorkbook();
+//            HSSFWorkbook workBook = new HSSFWorkbook();
+            // 创建工作类
+            Sheet sheet = workBook.createSheet();
+            //设置首行冻结
+            sheet.createFreezePane(0, 1);
+            sheet.setDefaultColumnWidth(16);
+            //设置字体样式
+            Font headFont = workBook.createFont();
+            headFont.setBold(true);
+            headFont.setFontHeightInPoints((short) 10);
+            headFont.setFontName("黑体");
+
+            Font titleFont = workBook.createFont();
+            titleFont.setBold(true);
+            titleFont.setFontHeightInPoints((short) 10);
+            titleFont.setFontName("黑体");
+
+            Font font = workBook.createFont();
+            font.setFontHeightInPoints((short) 10);
+            font.setFontName("宋体");
+
+            //设置单元格样式
+            XSSFCellStyle  headStyle = (XSSFCellStyle) workBook.createCellStyle();
+            headStyle.setFont(headFont);
+            headStyle.setAlignment(HorizontalAlignment.CENTER);
+            headStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER);
+            headStyle.setWrapText(true);
+            headStyle.setBorderBottom(BorderStyle.THIN); //下边框
+            headStyle.setBorderLeft(BorderStyle.THIN);//左边框
+            headStyle.setBorderTop(BorderStyle.THIN);//上边框
+            headStyle.setBorderRight(BorderStyle.THIN);//右边框
+
+            String color = "c0c0c0";    //此处得到的color为16进制的字符串
+            //转为RGB码
+            int r = Integer.parseInt((color.substring(0,2)),16);   //转为16进制
+            int g = Integer.parseInt((color.substring(2,4)),16);
+            int b = Integer.parseInt((color.substring(4,6)),16);
+
+            //自定义cell颜色
+//            HSSFPalette palette = workBook.getCustomPalette();
+            //这里的9是索引
+//            palette.setColorAtIndex((short)9, (byte) r, (byte) g, (byte) b);
+
+            //设置自定义颜色
+            XSSFColor xssfColor = new XSSFColor();
+            byte[] colorRgb = { (short)9, (byte) r, (byte) g, (byte) b };
+            xssfColor.setRGB(colorRgb);
+
+            headStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index);
+            headStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 填充模式(和背景颜色成对使用)
+            /*headStyle.setFillForegroundColor(IndexedColors.AQUA.getIndex());*/ //设置自带的颜色
+
+            CellStyle titleStyle = workBook.createCellStyle();
+            titleStyle.setFont(titleFont);
+            titleStyle.setAlignment(HorizontalAlignment.CENTER);
+            titleStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER);
+            titleStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);  //填充单元格
+            titleStyle.setFillForegroundColor((short)9);    //填色
+            titleStyle.setWrapText(true);
+            titleStyle.setBorderBottom(BorderStyle.THIN); //下边框
+            titleStyle.setBorderLeft(BorderStyle.THIN);//左边框
+            titleStyle.setBorderTop(BorderStyle.THIN);//上边框
+            titleStyle.setBorderRight(BorderStyle.THIN);//右边框
+
+            CellStyle cellStyle = workBook.createCellStyle();
+            cellStyle.setFont(font);
+            cellStyle.setAlignment(HorizontalAlignment.CENTER);
+            cellStyle.setVerticalAlignment(org.apache.poi.ss.usermodel.VerticalAlignment.CENTER);
+            cellStyle.setWrapText(true);
+            cellStyle.setBorderBottom(BorderStyle.THIN); //下边框
+            cellStyle.setBorderLeft(BorderStyle.THIN);//左边框
+            cellStyle.setBorderTop(BorderStyle.THIN);//上边框
+            cellStyle.setBorderRight(BorderStyle.THIN);//右边框
+            DataFormat dataFormat = workBook.createDataFormat();
+            cellStyle.setDataFormat(dataFormat.getFormat("@"));
+
+            if(list.size() > 0) {
+                //标题(如果需要在EXCEL内容最上面加标题,请打开下面的注释,修改start)
+                /*
+                HSSFRow titleRow = sheet.createRow(0);
+                titleRow.setHeightInPoints(30);
+                HSSFCell titleCell = titleRow.createCell(0);
+                titleCell.setCellStyle(headStyle);
+                titleCell.setCellValue(title);
+                //合并单元格
+                CellRangeAddress cellRangeAddress = new CellRangeAddress(0,0,0, list.get(0).size() - 1);
+                //加入合并单元格对象
+                sheet.addMergedRegion(cellRangeAddress);
+                //使用RegionUtil类为合并后的单元格添加边框
+			    RegionUtil.setBorderBottom(BorderStyle.THIN, cellRangeAddress, sheet); // 下边框
+                RegionUtil.setBorderLeft(BorderStyle.THIN, cellRangeAddress, sheet); // 左边框
+                RegionUtil.setBorderRight(BorderStyle.THIN, cellRangeAddress, sheet); // 有边框
+                RegionUtil.setBorderTop(BorderStyle.THIN, cellRangeAddress, sheet); // 上边框
+                */
+                int start = 0;
+                for(List<String> rowList : list) {
+                    Row row = sheet.createRow(start);
+                    row.setHeightInPoints(24);
+
+                    for(int i = 0; i < rowList.size(); i++) {
+                        Cell cell = row.createCell(i);
+                        if(start == 0) {
+                            cell.setCellStyle(headStyle);
+                        }else {
+                            cell.setCellStyle(cellStyle);
+                        }
+                        cell.setCellValue(rowList.get(i));
+                    }
+                    start++;
+                }
+            }
+
+//            FileOutputStream os = new FileOutputStream(downloadPath+fileName);//保存到本地
+            try (ServletOutputStream outputStream = response.getOutputStream()){
+                workBook.write(outputStream);
+            }catch (Exception e){
+                e.printStackTrace();
+            }
+        }catch(Exception e) {
+            e.printStackTrace();
+        }
+    }
+
     public static String exportGeneralExcelByTitleAndList(String title, List<List<String>> list, String downloadPath) {
         String result="系统提示:Excel文件导出成功!";
         String fileName= title+".xlsx";

+ 11 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractBonusDetailMapper.xml

@@ -25,7 +25,7 @@
 <!--        </collection>-->
 <!--    </resultMap>-->
 
-    <select id="getExportContractProjectBonus" resultType="com.management.platform.entity.excel.ProjectContractBonusExcelHead">
+    <select id="getExportContractProjectBonusForSpecial" resultType="com.management.platform.entity.excel.ProjectContractBonusExcelHead">
         select tmp1.*,p.project_name as projectName
         from
             (
@@ -47,4 +47,14 @@
                 left join project p on tmp1.projectId = p.id
         order by tmp1.contract
     </select>
+    <select id="getExportContractProjectBonusForCommon"
+            resultType="com.management.platform.entity.vo.ContractBonusDetailVO">
+        select cbd.id, cbd.company_id, cbd.user_id, cbd.contract, cbd.project_id, cbd.project_working_time, cbd.bonus_type
+             , cbd.bonus_value, cbd.total_bonus_value, cbd.ym, cbd.year, cbd.month, cbd.create_by, cbd.create_time
+             ,u.name as userName,p.project_name
+        from contract_bonus_detail cbd
+                 left join user u on cbd.user_id = u.id
+                 left join project p on cbd.project_id = p.id
+        where cbd.company_id = #{companyId} and cbd.year = #{year}
+    </select>
 </mapper>