zss
2024-07-19 085e4b6b0a97c9a20a5b92a6d6f5756ba98144f3
费用统计导出+工时展示
已修改12个文件
已添加1个文件
344 ■■■■ 文件已修改
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/resources/mapper/InsOrderMapper.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/controller/AuxiliaryWorkingHoursDayController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/dto/AuxiliaryOriginalHoursDto.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/dto/HoursDay.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/service/AuxiliaryWorkingHoursDayService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryOriginalHoursServiceImpl.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryOutputWorkingHoursServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryWorkingHoursDayServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
performance-server/src/main/resources/mapper/AuxiliaryOriginalHoursMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/yuanchu/mom/controller/InsOrderController.java
@@ -23,6 +23,8 @@
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@@ -179,4 +181,12 @@
    public Result<?> labelPrinting(String ids) {
        return Result.success(insOrderService.labelPrinting(ids));
    }
    @ValueClassify("费用统计")
    @ApiOperation(value = "费用统计导出")
    @PostMapping("/export")
    public void export(@RequestBody Map<String, Object> data,HttpServletResponse response) throws Exception {
        CostStatisticsDto costStatisticsDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), CostStatisticsDto.class);
       insOrderService.export(costStatisticsDto,response);
    }
}
inspect-server/src/main/java/com/yuanchu/mom/dto/CostStatisticsDto.java
@@ -1,5 +1,7 @@
package com.yuanchu.mom.dto;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yuanchu.mom.annotation.ValueTableShow;
@@ -14,39 +16,58 @@
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ValueTableShow(value = 1, name = "下单时间")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","ZTT/QR-30-01-01","日期"})
    private LocalDateTime createTime;
    @ValueTableShow(value = 2, name = "委托编号")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","ZTT/QR-30-01-01","检验编号"})
    private String entrustCode;
    @ValueTableShow(value = 3, name = "样品名称")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","样品名称"})
    private String sample;
    @ValueTableShow(value = 4, name = "规格型号")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","规格型号"})
    private String model;
    @ValueTableShow(value = 5, name = "样品数量")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","样品数量"})
    private Integer num;
    @ValueTableShow(value = 6, name = "总价")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","总价"})
    private BigDecimal price;
    @ValueTableShow(value = 7, name = "试验项目")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","试验项目"})
    private String inspectionItem;
    @ValueTableShow(value = 8, name = "委托单位")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","委托单位"})
    private String company;
    @ValueTableShow(value = 9, name = "委托人")
    @ExcelProperty(value ={"中天科技检测中心样品登记表","委托人"})
    private String name;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","生产单位"})
    private String production;
    @ExcelProperty(value ={"中天科技检测中心样品登记表","工程名称"})
    private String engineering;
    @ExcelIgnore
    private Integer createUser;
    @ExcelIgnore
    private Integer insSampleId;
    @ExcelIgnore
    private Double cost;//工时
    @TableField(exist = false,select = false)
    @ExcelIgnore
    private String dates;
inspect-server/src/main/java/com/yuanchu/mom/service/InsOrderService.java
@@ -6,6 +6,9 @@
import com.yuanchu.mom.dto.*;
import com.yuanchu.mom.pojo.InsOrder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@@ -41,4 +44,6 @@
    int updateStatus(Integer id);
    List<SampleProductDto3> labelPrinting(String ids);
    void export(CostStatisticsDto costStatisticsDto,HttpServletResponse response)throws IOException, ServletException;
}
inspect-server/src/main/java/com/yuanchu/mom/service/impl/InsOrderServiceImpl.java
@@ -2,6 +2,10 @@
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
@@ -25,6 +29,10 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -84,13 +92,13 @@
        Integer roleId = user.getRoleId();
        //获取当前人所属实验室id
        String departLimsId = user.getDepartLimsId();
        String laboratory=null;
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")){
        String laboratory = null;
        if (ObjectUtils.isNotEmpty(departLimsId) && !departLimsId.equals("")) {
            String[] split = departLimsId.split(",");
             //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims=baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")){
                 laboratory=departLims;
            //查询对应架构名称(通信实验室,电力实验室,检测办)
            String departLims = baseMapper.seldepLimsId(Integer.parseInt(split[split.length - 1]));
            if (departLims.contains("实验室")) {
                laboratory = departLims;
            }
        }
        //判断是否是全部权限
@@ -108,7 +116,7 @@
                }
            }
        }
        map.put("body", insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto),laboratory));
        map.put("body", insOrderMapper.selectInsOrderPage(page, QueryWrappers.queryWrappers(sampleOrderDto), laboratory));
        return map;
    }
@@ -336,6 +344,8 @@
                //判断热循环项目的添加和温升试验项目的添加
                else if (product.getInspectionItem().equals("热循环") || product.getInspectionItem().equals("温升试验")) {
                    List<InsProduct> insProductess = new ArrayList<>();
                    product.setId(null);
                    product.setInsSampleId(sampleId);
                    insProductess.add(product);
                    List<InsProduct> insProductes = new ArrayList<>();
                    List<InsProduct> insProducts = new ArrayList<>();
@@ -363,8 +373,6 @@
                        insProduct.setInspectionItemType("0");
                        insProduct.setInspectionValueType("1");
                        insProducts.add(insProduct);
                        insProductes.add(insProduct);
                        insProductess.add(insProduct);
                    }
                    //热循环才有多次循环次数
                    if (product.getInspectionItem().equals("热循环")) {
@@ -379,20 +387,19 @@
                            insProductess.add(insProduct1);
                        }
                    }
                        if (count > 1) {
                            //循环超过1次
                            for (int j = 2; j <= count; j++) {
                                for (InsProduct insProduct : insProductes) {
                                    InsProduct insProduct1 = new InsProduct();
                                    BeanUtils.copyProperties(insProduct, insProduct1);
                                    insProduct1.setInspectionItem(j + "");//循环次数
                                    insProductess.add(insProduct1);
                                }
                    if (count > 1) {
                        //循环超过1次
                        for (int j = 2; j <= count; j++) {
                            for (InsProduct insProduct : insProductes) {
                                InsProduct insProduct1 = new InsProduct();
                                BeanUtils.copyProperties(insProduct, insProduct1);
                                insProduct1.setInspectionItem(j + "");//循环次数
                                insProductess.add(insProduct1);
                            }
                        }
                    }
                    insProductService.saveBatch(insProductess);
                }
                else {
                } else {
                    if (!is) {
                        switch (type) {
                            case 1:
@@ -473,7 +480,21 @@
        map.put("head", PrintChina.printChina(CostStatisticsDto.class));
        Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("costStatistics");
        if (map1.get("look") == 1) costStatisticsDto.setCreateUser(map1.get("userId"));
        map.put("body",insOrderMapper.selectCostStatistics(page, QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59")));
        IPage<CostStatisticsDto> dtoIPage = insOrderMapper.selectCostStatistics(page, QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
        List<CostStatisticsDto> collect = dtoIPage.getRecords().stream().map(dto -> {
            Set<String> uniqueTags = new HashSet<>();
            if (dto.getInspectionItem().contains(",")) {
                for (String s : dto.getInspectionItem().split(",")) {
                    uniqueTags.add(s.split("@")[0]);
                }
            } else {
                uniqueTags.add(dto.getInspectionItem().split("@")[0]);
            }
            dto.setInspectionItem(uniqueTags.toString());
            return dto;
        }).collect(Collectors.toList());
        dtoIPage.setRecords(collect);
        map.put("body", dtoIPage);
        return map;
    }
@@ -486,7 +507,7 @@
        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
        double totalPrice = costStatisticsDtos.stream()
                .filter(dto -> dto.getPrice() != null) // è¿‡æ»¤æŽ‰ä»·æ ¼ä¸º null çš„对象
                .mapToDouble(value -> value.getPrice().doubleValue()*value.getNum())
                .mapToDouble(value -> value.getPrice().doubleValue() * value.getNum())
                .sum();
        map.put("total", totalPrice);
        return map;
@@ -527,6 +548,45 @@
        }).collect(Collectors.toList());
        return sampleProductDto3s;
    }
    @Override
    public void export(CostStatisticsDto costStatisticsDto,HttpServletResponse response) throws IOException {
        //查询导出的费用统计数据
        String dates = costStatisticsDto.getDates();
        String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
        costStatisticsDto.setDates(null);
        List<CostStatisticsDto> costStatisticsDtos = insOrderMapper.selectCostStatistics2(QueryWrappers.queryWrappers(costStatisticsDto).ge("create_time", split[0]).le("create_time", split[1] + " 23:59:59"));
        costStatisticsDtos = costStatisticsDtos.stream().map(dto -> {
            Set<String> uniqueTags = new HashSet<>();
            if (dto.getInspectionItem().contains(",")) {
                for (String s : dto.getInspectionItem().split(",")) {
                    uniqueTags.add(s.split("@")[0]);
                }
            } else {
                uniqueTags.add(dto.getInspectionItem().split("@")[0]);
            }
            dto.setInspectionItem(uniqueTags.toString());
            return dto;
        }).collect(Collectors.toList());
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        // è¿™é‡ŒURLEncoder.encode可以防止中文乱码 å½“ç„¶å’Œeasyexcel没有关系
        String fileName = URLEncoder.encode("样品费用统计导出", "UTF-8");
        response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
        try {
            // æ–°å»ºExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            WriteSheet mainSheet = EasyExcel.writerSheet( "样品费用统计导出").head(CostStatisticsDto.class).build();
            excelWriter.write(costStatisticsDtos, mainSheet);
            // å…³é—­æµ
            excelWriter.finish();
        } catch (IOException e) {
            throw new RuntimeException("导出失败");
        }
    }
}
inspect-server/src/main/resources/mapper/InsOrderMapper.xml
@@ -206,7 +206,7 @@
        GROUP_CONCAT(b.inspection_item2
        SEPARATOR ',')
        inspection_item from (select * ,
        GROUP_CONCAT(CONCAT(inspection_item,'',inspection_item_subclass) SEPARATOR ',')inspection_item2 from ins_product where state = 1 and template_id IS NOT NULL GROUP BY ins_sample_id,man_hour_group) b GROUP
        GROUP_CONCAT(CONCAT(inspection_item,'@',inspection_item_subclass) SEPARATOR ',')inspection_item2 from ins_product where state = 1 and template_id IS NOT NULL GROUP BY ins_sample_id,man_hour_group) b GROUP
        BY b.ins_sample_id) c ON c.ins_sample_id = isa.id
        where (i.state = 1 or i.state = 3 or i.state = 4) and c.ins_sample_id IS not  NULL)A
        GROUP BY
@@ -390,6 +390,8 @@
        A.inspection_item,
        A.company,
        A.`name`,
        production,
        engineering,
        COUNT(1) num,
        SUM(A.price) price,
        SUM(A.cost) cost
@@ -407,7 +409,9 @@
        cus.company,
        u.`name`,
        i.create_user,
        c.ins_sample_id
        c.ins_sample_id,
        production,
        engineering
        FROM
        ins_order i
        LEFT JOIN ins_sample isa ON isa.ins_order_id = i.id
@@ -428,7 +432,9 @@
        A.model,
        A.inspection_item,
        A.company,
        A.`name`
        A.`name`,
        production,
        engineering
        ORDER BY
        A.id,
        A.entrust_code,
@@ -437,7 +443,9 @@
        A.model,
        A.inspection_item,
        A.company,
        A.`name`) B
        A.`name`,
        production,
        engineering) B
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
performance-server/src/main/java/com/yuanchu/mom/controller/AuxiliaryWorkingHoursDayController.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.annotation.ValueClassify;
import com.yuanchu.mom.dto.AuxiliaryWorkingHoursDayDto;
import com.yuanchu.mom.dto.HoursDay;
import com.yuanchu.mom.pojo.AuxiliaryWorkingHours;
import com.yuanchu.mom.pojo.AuxiliaryWorkingHoursDay;
import com.yuanchu.mom.service.AuxiliaryWorkingHoursDayService;
@@ -20,6 +21,7 @@
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
@@ -72,15 +74,15 @@
    @ValueClassify("工时管理")
    @ApiOperation(value = "批准工时统计的辅助工时")
    @PostMapping("/approve")
    public Result approve(@RequestBody AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay) {
        return Result.success(auxiliaryWorkingHoursDayService.checkOrApprove(auxiliaryWorkingHoursDay));
    public Result approve(@RequestBody  HoursDay hoursDay ) {
        return Result.success(auxiliaryWorkingHoursDayService.checkOrApprove(hoursDay));
    }
    @ValueClassify("工时管理")
    @ApiOperation(value = "审核工时统计的辅助工时")
    @PostMapping("/check")
    public Result check(@RequestBody AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay ) {
        return Result.success(auxiliaryWorkingHoursDayService.checkOrApprove(auxiliaryWorkingHoursDay));
    public Result check(@RequestBody HoursDay hoursDay ) {
        return Result.success(auxiliaryWorkingHoursDayService.checkOrApprove(hoursDay));
    }
    @ValueClassify("工时管理")
performance-server/src/main/java/com/yuanchu/mom/dto/AuxiliaryOriginalHoursDto.java
@@ -5,6 +5,7 @@
import com.yuanchu.mom.annotation.ValueTableShow;
import com.yuanchu.mom.pojo.AuxiliaryCorrectionHours;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.text.DecimalFormat;
performance-server/src/main/java/com/yuanchu/mom/dto/HoursDay.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
package com.yuanchu.mom.dto;
import com.yuanchu.mom.pojo.AuxiliaryWorkingHoursDay;
import lombok.Data;
import java.util.List;
@Data
public class HoursDay {
    private List<AuxiliaryWorkingHoursDay> auxiliaryWorkingHoursDays;
}
performance-server/src/main/java/com/yuanchu/mom/service/AuxiliaryWorkingHoursDayService.java
@@ -2,11 +2,13 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.mom.dto.AuxiliaryWorkingHoursDayDto;
import com.yuanchu.mom.dto.HoursDay;
import com.yuanchu.mom.pojo.AuxiliaryWorkingHours;
import com.yuanchu.mom.pojo.AuxiliaryWorkingHoursDay;
import com.baomidou.mybatisplus.extension.service.IService;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
/**
@@ -25,7 +27,7 @@
    AuxiliaryWorkingHoursDay selectAuxiliaryWorkingHoursByNumber(String number);
    int checkOrApprove(AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay);
    boolean checkOrApprove(HoursDay hoursDay);
    int updateAuxiliaryWorkingHoursDay(AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay);
performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryOriginalHoursServiceImpl.java
@@ -19,6 +19,7 @@
import com.yuanchu.mom.pojo.User;
import com.yuanchu.mom.service.AuxiliaryOriginalHoursService;
import com.yuanchu.mom.utils.QueryWrappers;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -26,10 +27,7 @@
import java.io.IOException;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
@Service
@@ -110,19 +108,95 @@
        originalHoursDtoIPage.setSize(page.getSize());
        originalHoursDtoIPage.setCurrent(page.getCurrent());
        List<AuxiliaryOriginalHoursDto> auxiliaryOriginalHoursDtos = new ArrayList<>();
        Map<String, AuxiliaryOriginalHoursDto> data1 = new HashMap<>();
        Map<String, AuxiliaryOriginalHoursDto> data2 = new HashMap<>();
        //产量工时
        List<Map<String, Object>> maps = auxiliaryOutputWorkingHoursMapper.totalHours(auxiliaryOriginalHoursLookDto.getMonth(), ids);
        if (ObjectUtils.isNotEmpty(maps)) {
            auxiliaryOriginalHoursDtos.addAll(getData(maps, "产量工时").values());
            data1 = getData(maps, "产量工时");
            auxiliaryOriginalHoursDtos.addAll(data1.values());
        }
        //辅助工时
        List<Map<String, Object>> maps1 = auxiliaryWorkingHoursDayMapper.totalHours(auxiliaryOriginalHoursLookDto.getMonth(), ids);
        if (ObjectUtils.isNotEmpty(maps1)) {
            auxiliaryOriginalHoursDtos.addAll(getData(maps1, "辅助工时").values());
            data2 = getData(maps1, "辅助工时");
            auxiliaryOriginalHoursDtos.addAll(data2.values());
        }
        //加班工时
        //总工时
        List<Map<String, Object>> maps2 = auxiliaryOriginalHoursMapper.totalHours(auxiliaryOriginalHoursLookDto.getMonth(), ids);
        //总工时=产量工时+辅助工时+加班工时
        Map<String, AuxiliaryOriginalHoursDto> data4 = new HashMap<String, AuxiliaryOriginalHoursDto>();
        Map<String, AuxiliaryOriginalHoursDto> data3 = data1;
        if (data1.size()>0) {
            if (data2.size() > 0) {
                for (Map.Entry<String, AuxiliaryOriginalHoursDto> entry : data2.entrySet()) {
                    String key = entry.getKey();
                    AuxiliaryOriginalHoursDto value = entry.getValue();
                    if (data3.containsKey(key)) {
                        for (Map.Entry<String, AuxiliaryOriginalHoursDto> dtoEntry : data3.entrySet()) {
                            if (dtoEntry.getKey().equals(key)) {
                                AuxiliaryOriginalHoursDto auxiliaryOriginalHoursDto = new AuxiliaryOriginalHoursDto();
                                AuxiliaryOriginalHoursDto hoursDto = data3.get(key);
                                BeanUtils.copyProperties(hoursDto, auxiliaryOriginalHoursDto);
                                auxiliaryOriginalHoursDto.setType("总工时");
                                auxiliaryOriginalHoursDto.setOneHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getOneHours()) ? auxiliaryOriginalHoursDto.getOneHours() : 0) + (ObjectUtils.isNotEmpty(value.getOneHours()) ? value.getOneHours() : 0));
                                auxiliaryOriginalHoursDto.setTwoHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwoHours()) ? auxiliaryOriginalHoursDto.getTwoHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwoHours()) ? value.getTwoHours() : 0));
                                auxiliaryOriginalHoursDto.setThreeHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getThreeHours()) ? auxiliaryOriginalHoursDto.getThreeHours() : 0) + (ObjectUtils.isNotEmpty(value.getThreeHours()) ? value.getThreeHours() : 0));
                                auxiliaryOriginalHoursDto.setFourHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getFourHours()) ? auxiliaryOriginalHoursDto.getFourHours() : 0) + (ObjectUtils.isNotEmpty(value.getFourHours()) ? value.getFourHours() : 0));
                                auxiliaryOriginalHoursDto.setFiveHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getFiveHours()) ? auxiliaryOriginalHoursDto.getFiveHours() : 0) + (ObjectUtils.isNotEmpty(value.getFiveHours()) ? value.getFiveHours() : 0));
                                auxiliaryOriginalHoursDto.setSixHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getSixHours()) ? auxiliaryOriginalHoursDto.getSixHours() : 0) + (ObjectUtils.isNotEmpty(value.getSixHours()) ? value.getSixHours() : 0));
                                auxiliaryOriginalHoursDto.setSevenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getSevenHours()) ? auxiliaryOriginalHoursDto.getSevenHours() : 0) + (ObjectUtils.isNotEmpty(value.getSevenHours()) ? value.getSevenHours() : 0));
                                auxiliaryOriginalHoursDto.setEightHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getEightHours()) ? auxiliaryOriginalHoursDto.getEightHours() : 0) + (ObjectUtils.isNotEmpty(value.getEightHours()) ? value.getEightHours() : 0));
                                auxiliaryOriginalHoursDto.setNineHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getNineHours()) ? auxiliaryOriginalHoursDto.getNineHours() : 0) + (ObjectUtils.isNotEmpty(value.getNineHours()) ? value.getNineHours() : 0));
                                auxiliaryOriginalHoursDto.setTenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTenHours()) ? auxiliaryOriginalHoursDto.getTenHours() : 0) + (ObjectUtils.isNotEmpty(value.getTenHours()) ? value.getTenHours() : 0));
                                auxiliaryOriginalHoursDto.setElevenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getElevenHours()) ? auxiliaryOriginalHoursDto.getElevenHours() : 0) + (ObjectUtils.isNotEmpty(value.getElevenHours()) ? value.getElevenHours() : 0));
                                auxiliaryOriginalHoursDto.setTwelveHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwelveHours()) ? auxiliaryOriginalHoursDto.getTwelveHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwelveHours()) ? value.getTwelveHours() : 0));
                                auxiliaryOriginalHoursDto.setThirteenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getThirteenHours()) ? auxiliaryOriginalHoursDto.getThirteenHours() : 0) + (ObjectUtils.isNotEmpty(value.getThirteenHours()) ? value.getThirteenHours() : 0));
                                auxiliaryOriginalHoursDto.setFourteenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getFourteenHours()) ? auxiliaryOriginalHoursDto.getFourteenHours() : 0) + (ObjectUtils.isNotEmpty(value.getFourteenHours()) ? value.getFourteenHours() : 0));
                                auxiliaryOriginalHoursDto.setFifteenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getFifteenHours()) ? auxiliaryOriginalHoursDto.getFifteenHours() : 0) + (ObjectUtils.isNotEmpty(value.getFifteenHours()) ? value.getFifteenHours() : 0));
                                auxiliaryOriginalHoursDto.setSixteenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getSixteenHours()) ? auxiliaryOriginalHoursDto.getSixteenHours() : 0) + (ObjectUtils.isNotEmpty(value.getSixteenHours()) ? value.getSixteenHours() : 0));
                                auxiliaryOriginalHoursDto.setSeventeenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getSeventeenHours()) ? auxiliaryOriginalHoursDto.getSeventeenHours() : 0) + (ObjectUtils.isNotEmpty(value.getSeventeenHours()) ? value.getSeventeenHours() : 0));
                                auxiliaryOriginalHoursDto.setEighteenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getEighteenHours()) ? auxiliaryOriginalHoursDto.getEighteenHours() : 0) + (ObjectUtils.isNotEmpty(value.getEighteenHours()) ? value.getEighteenHours() : 0));
                                auxiliaryOriginalHoursDto.setNineteenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getNineteenHours()) ? auxiliaryOriginalHoursDto.getNineteenHours() : 0) + (ObjectUtils.isNotEmpty(value.getNineteenHours()) ? value.getNineteenHours() : 0));
                                auxiliaryOriginalHoursDto.setTwelveHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwelveHours()) ? auxiliaryOriginalHoursDto.getTwelveHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwelveHours()) ? value.getTwelveHours() : 0));
                                auxiliaryOriginalHoursDto.setTwentyOneHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwentyOneHours()) ? auxiliaryOriginalHoursDto.getTwentyOneHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwentyOneHours()) ? value.getTwentyOneHours() : 0));
                                auxiliaryOriginalHoursDto.setTwentyTwoHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwentyTwoHours()) ? auxiliaryOriginalHoursDto.getTwentyTwoHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwentyTwoHours()) ? value.getTwentyTwoHours() : 0));
                                auxiliaryOriginalHoursDto.setTwentyThreeHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwentyThreeHours()) ? auxiliaryOriginalHoursDto.getTwentyThreeHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwentyThreeHours()) ? value.getTwentyThreeHours() : 0));
                                auxiliaryOriginalHoursDto.setTwentyFourHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwentyFourHours()) ? auxiliaryOriginalHoursDto.getTwentyFourHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwentyFourHours()) ? value.getTwentyFourHours() : 0));
                                auxiliaryOriginalHoursDto.setTwentyFiveHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwentyFiveHours()) ? auxiliaryOriginalHoursDto.getTwentyFiveHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwentyFiveHours()) ? value.getTwentyFiveHours() : 0));
                                auxiliaryOriginalHoursDto.setTwentySixHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwentySixHours()) ? auxiliaryOriginalHoursDto.getTwentySixHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwentySixHours()) ? value.getTwentySixHours() : 0));
                                auxiliaryOriginalHoursDto.setTwentySevenHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwentySevenHours()) ? auxiliaryOriginalHoursDto.getTwentySevenHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwentySevenHours()) ? value.getTwentySevenHours() : 0));
                                auxiliaryOriginalHoursDto.setTwentyEightHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwentyEightHours()) ? auxiliaryOriginalHoursDto.getTwentyEightHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwentyEightHours()) ? value.getTwentyEightHours() : 0));
                                auxiliaryOriginalHoursDto.setTwentyNineHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTwentyNineHours()) ? auxiliaryOriginalHoursDto.getTwentyNineHours() : 0) + (ObjectUtils.isNotEmpty(value.getTwentyNineHours()) ? value.getTwentyNineHours() : 0));
                                auxiliaryOriginalHoursDto.setThirtyHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getThirtyHours()) ? auxiliaryOriginalHoursDto.getThirtyHours() : 0) + (ObjectUtils.isNotEmpty(value.getThirtyHours()) ? value.getThirtyHours() : 0));
                                auxiliaryOriginalHoursDto.setThirtyOneHours((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getThirtyOneHours()) ? auxiliaryOriginalHoursDto.getThirtyOneHours() : 0) + (ObjectUtils.isNotEmpty(value.getThirtyOneHours()) ? value.getThirtyOneHours() : 0));
                                auxiliaryOriginalHoursDto.setTotal((ObjectUtils.isNotEmpty(auxiliaryOriginalHoursDto.getTotal()) ? auxiliaryOriginalHoursDto.getTotal() : 0) + (ObjectUtils.isNotEmpty(value.getTotal()) ? value.getTotal() : 0));
                                data4.put(key, auxiliaryOriginalHoursDto);
                            } else {
                                AuxiliaryOriginalHoursDto hoursDto = data3.get(dtoEntry.getKey());
                                AuxiliaryOriginalHoursDto dto = new AuxiliaryOriginalHoursDto();
                                BeanUtils.copyProperties(hoursDto, dto);
                                dto.setType("总工时");
                                data4.put(dtoEntry.getKey(), dto);
                            }
                        }
                    } else {
                        value.setType("总工时");
                        data4.put(key, value);
                    }
                }
            }
            else {
                for (Map.Entry<String, AuxiliaryOriginalHoursDto> entry : data3.entrySet()) {
                    AuxiliaryOriginalHoursDto dto = entry.getValue();
                    AuxiliaryOriginalHoursDto originalHoursDto = new AuxiliaryOriginalHoursDto();
                    BeanUtils.copyProperties(dto, originalHoursDto);
                    originalHoursDto.setType("总工时");
                    data4.put(entry.getKey(), originalHoursDto);
                }
            }
            auxiliaryOriginalHoursDtos.addAll(data4.values());
        }
        /*List<Map<String, Object>> maps2 = auxiliaryOriginalHoursMapper.totalHours(auxiliaryOriginalHoursLookDto.getMonth(), ids);
        if (ObjectUtils.isNotEmpty(maps2)) {
            //产量工时+辅助工时都不为空
            auxiliaryOriginalHoursDtos.addAll(getData(maps2, "总工时").values());
@@ -132,8 +206,37 @@
            auxiliaryOriginalHoursDtos.addAll(getData(maps1, "总工时").values());
        } else if (ObjectUtils.isNotEmpty(maps)) {
            auxiliaryOriginalHoursDtos.addAll(getData(maps, "总工时").values());
        }*/
        auxiliaryOriginalHoursDtos = auxiliaryOriginalHoursDtos.stream().sorted(Comparator.comparing(AuxiliaryOriginalHoursDto::getName)).collect(Collectors.toList());
        // æ£€æŸ¥æ¯ä¸ªäººçš„工时类型,补全缺少的工时
        Map<String, Set<String>> workHoursMap = new HashMap<>();
        String[] requiredHours = {"产量工时", "辅助工时", "加班工时", "总工时"};
        for (AuxiliaryOriginalHoursDto dto : auxiliaryOriginalHoursDtos) {
            workHoursMap.computeIfAbsent(dto.getName(), k -> new HashSet<>()).add(dto.getType());
        }
        originalHoursDtoIPage.setRecords(auxiliaryOriginalHoursDtos);
        List<AuxiliaryOriginalHoursDto> result = auxiliaryOriginalHoursDtos;
        for (String name1 : workHoursMap.keySet()) {
            Set<String> workTypes = workHoursMap.get(name1);
            for (String requiredHour : requiredHours) {
                if (!workTypes.contains(requiredHour)) {
                    AuxiliaryOriginalHoursDto auxiliaryOriginalHoursDto = new AuxiliaryOriginalHoursDto();
                    auxiliaryOriginalHoursDto.setName(name1);
                    auxiliaryOriginalHoursDto.setAuxiliaryCorrectionHours(null);
                    auxiliaryOriginalHoursDto.setType(requiredHour);
                    auxiliaryOriginalHoursDto.setMonth(auxiliaryOriginalHoursLookDto.getMonth());
                    result.add(auxiliaryOriginalHoursDto);
                }
            }
        }
        List<String> order = Arrays.asList("产量工时", "辅助工时", "加班工时", "总工时");
        Comparator<AuxiliaryOriginalHoursDto> comparator = Comparator.comparingInt(dto -> {
            String type = dto.getType();
            return order.indexOf(type) == -1 ? order.size() : order.indexOf(type);
        });
        result = result.stream().sorted(Comparator.comparing(AuxiliaryOriginalHoursDto::getName).thenComparing(comparator)).collect(Collectors.toList());
        originalHoursDtoIPage.setRecords(result);
        originalHoursDtoIPage.setTotal(result.size());
        map.put("body", originalHoursDtoIPage);
        return map;
    }
@@ -192,7 +295,6 @@
                        .eq(AuxiliaryCorrectionHours::getType, auxiliaryOriginalHoursDto.getType())
                        .eq(AuxiliaryCorrectionHours::getMonth, auxiliaryOriginalHoursDto.getMonth()));
                auxiliaryOriginalHoursDto.setAuxiliaryCorrectionHours(auxiliaryCorrectionHours);
                dtoMap.put(name, auxiliaryOriginalHoursDto);
            }
            AuxiliaryCorrectionHours auxiliaryCorrectionHours = auxiliaryOriginalHoursDto.getAuxiliaryCorrectionHours();
            switch (objectMap.get("month").toString().substring(8, 10)) {
@@ -479,6 +581,8 @@
            );
            DecimalFormat df = new DecimalFormat("#.####"); // è®¾å®šå››ä½å°æ•°
            auxiliaryOriginalHoursDto.setTotal(Double.parseDouble(df.format(auxiliaryOriginalHoursDto.getTotal())));
            dtoMap.put(name, auxiliaryOriginalHoursDto);
        }
        return dtoMap;
    }
performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryOutputWorkingHoursServiceImpl.java
@@ -213,7 +213,7 @@
        map.put("产量工时汇总", sumOutputWorkTime);
        if (ObjectUtils.isNotEmpty(auxiliaryWorkingHoursDays)) {
            for (AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay : auxiliaryWorkingHoursDays) {
                sumApprovedWorkingHour += auxiliaryWorkingHoursDay.getNonproductiveTime();
                sumApprovedWorkingHour += auxiliaryWorkingHoursDay.getReviewerNonproductiveTime();//复核工时
            }
        }
        map.put("辅助工时汇总", sumApprovedWorkingHour);
performance-server/src/main/java/com/yuanchu/mom/service/impl/AuxiliaryWorkingHoursDayServiceImpl.java
@@ -7,6 +7,7 @@
import com.yuanchu.mom.common.GetLook;
import com.yuanchu.mom.common.PrintChina;
import com.yuanchu.mom.dto.AuxiliaryWorkingHoursDayDto;
import com.yuanchu.mom.dto.HoursDay;
import com.yuanchu.mom.exception.ErrorException;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
@@ -87,8 +88,8 @@
                ids.addAll(users.stream().map(User::getId).distinct().collect(Collectors.toList()));
            }
        }
        if (ids.size()==0){
            ids=null;
        if (ids.size() == 0) {
            ids = null;
        }
        if (ObjectUtils.isNotEmpty(dates) && ObjectUtils.isNotEmpty(week)) {
            String[] split = dates.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
@@ -98,7 +99,7 @@
                            .ge("date_time", split[0]).le("date_time", split[1] + " 23:59:59")
                            .ge("week", weeks[0]).le("week", weeks[1]), ids);
            for (AuxiliaryWorkingHoursDayDto record : auxiliaryWorkingHoursDayDtoIPage.getRecords()) {
                record.setDateTime(record.getDateTime().substring(0,10));
                record.setDateTime(record.getDateTime().substring(0, 10));
            }
            map.put("body", auxiliaryWorkingHoursDayDtoIPage);
        } else if (ObjectUtils.isNotEmpty(dates) && ObjectUtils.isEmpty(week)) {
@@ -107,22 +108,22 @@
                    QueryWrappers.queryWrappers(auxiliaryWorkingHoursDayDto)
                            .ge("date_time", split[0]).le("date_time", split[1] + " 23:59:59"), ids);
            for (AuxiliaryWorkingHoursDayDto record : auxiliaryWorkingHoursDayDtoIPage.getRecords()) {
                record.setDateTime(record.getDateTime().substring(0,10));
                record.setDateTime(record.getDateTime().substring(0, 10));
            }
            map.put("body",auxiliaryWorkingHoursDayDtoIPage );
            map.put("body", auxiliaryWorkingHoursDayDtoIPage);
        } else if (ObjectUtils.isEmpty(dates) && ObjectUtils.isNotEmpty(week)) {
            String[] weeks = week.replaceAll("\\[", "").replaceAll("]", "").replaceAll("\"", "").split(",");
            IPage<AuxiliaryWorkingHoursDayDto> auxiliaryWorkingHoursDayDtoIPage = auxiliaryWorkingHoursDayMapper.selectAuxiliaryWorkingHoursDay(page,
                    QueryWrappers.queryWrappers(auxiliaryWorkingHoursDayDto)
                            .ge("week", weeks[0]).le("week", weeks[1]), ids);
            for (AuxiliaryWorkingHoursDayDto record : auxiliaryWorkingHoursDayDtoIPage.getRecords()) {
                record.setDateTime(record.getDateTime().substring(0,10));
                record.setDateTime(record.getDateTime().substring(0, 10));
            }
            map.put("body", auxiliaryWorkingHoursDayDtoIPage);
        } else {
            IPage<AuxiliaryWorkingHoursDayDto> auxiliaryWorkingHoursDayDtoIPage = auxiliaryWorkingHoursDayMapper.selectAuxiliaryWorkingHoursDay(page, QueryWrappers.queryWrappers(auxiliaryWorkingHoursDayDto), ids);
            for (AuxiliaryWorkingHoursDayDto record : auxiliaryWorkingHoursDayDtoIPage.getRecords()) {
                record.setDateTime(record.getDateTime().substring(0,10));
                record.setDateTime(record.getDateTime().substring(0, 10));
            }
            map.put("body", auxiliaryWorkingHoursDayDtoIPage);
        }
@@ -153,12 +154,20 @@
    //审核/批准
    @Override
    public int checkOrApprove(AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay) {
        if (auxiliaryWorkingHoursDay.getState().equals("已审核")) {
            Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
            auxiliaryWorkingHoursDay.setReviewer(userMapper.selectById(userId).getName());
    public boolean checkOrApprove(HoursDay hoursDay) {
        List<AuxiliaryWorkingHoursDay> auxiliaryWorkingHoursDays = hoursDay.getAuxiliaryWorkingHoursDays();
        for (AuxiliaryWorkingHoursDay auxiliaryWorkingHoursDay : auxiliaryWorkingHoursDays) {
            if (auxiliaryWorkingHoursDay.getState().equals("已审核")) {
                Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
                auxiliaryWorkingHoursDay.setReviewer(userMapper.selectById(userId).getName());
            }
            if (auxiliaryWorkingHoursDay.getReviewerNumber() == null) {
                auxiliaryWorkingHoursDay.setReviewerNumber(auxiliaryWorkingHoursDay.getAmount());//复核数量
                auxiliaryWorkingHoursDay.setReviewerNonproductiveTime(auxiliaryWorkingHoursDay.getNonproductiveTime());//复核工时
            }
        }
        return auxiliaryWorkingHoursDayMapper.updateById(auxiliaryWorkingHoursDay);
        return updateBatchById(auxiliaryWorkingHoursDays);
    }
    //编辑
performance-server/src/main/resources/mapper/AuxiliaryOriginalHoursMapper.xml
@@ -2,7 +2,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.yuanchu.mom.mapper.AuxiliaryOriginalHoursMapper">
    <select id="totalHours" resultType="java.util.Map">
        select E.name, E.month, E.total
        select E.name, E.month, E.total manHours
        from (select C.name, C.month, C.manHours + D.manHours as total
        from (select A.name,
        A.month,