zhuo
9 天以前 fc543916cfac06f0cf16d018b9751417e3a119f7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.ruoyi.inspect.service.impl;
 
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.inspect.mapper.*;
import com.ruoyi.inspect.pojo.InsOrder;
import com.ruoyi.inspect.pojo.InsSample;
import com.ruoyi.inspect.pojo.InsSampleUser;
import com.ruoyi.inspect.service.ReportService;
import com.ruoyi.performance.dto.AuxiliaryAllDto;
import com.ruoyi.performance.dto.AuxiliaryOriginalHoursLookDto;
import com.ruoyi.performance.service.AuxiliaryOriginalHoursService;
import com.ruoyi.system.mapper.UserMapper;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
 
@Service
@AllArgsConstructor
public class ReportServiceImpl implements ReportService {
 
    @Autowired
    private InsOrderMapper insOrderMapper;
 
    @Autowired
    private InsSampleMapper insSampleMapper;
 
    @Autowired
    private UserMapper userMapper;
 
    @Autowired
    private InsSampleUserMapper insSampleUserMapper;
 
    @Autowired
    private AuxiliaryOriginalHoursService auxiliaryOriginalHoursService;
 
    //首页-->日历任务图
    @Override
    public Map<String, Object> calendarWorkByWeek() {
        Integer userId = SecurityUtils.getUserId().intValue();
        //
        List<SysRole> roleList = SecurityUtils.getLoginUser().getUser().getRoles();
 
//        String name = roleMapper.selectById(userMapper.selectById(userId).getRoleId()).getName();
        String name = roleList.stream().map(SysRole::getRoleName).collect(Collectors.joining(","));
        Map<String, Object> map = new HashMap<>();
        List<Integer> insState = new ArrayList<>();
        insState.add(0);
        insState.add(1);
        /*获取后一周日期*/
        LocalDate currentDate = LocalDate.now();
        List<LocalDate> weekDays = new ArrayList<>();
        for (int i = 6, j = 0; i >= 0; i--, j++) {
            weekDays.add(currentDate.minusDays(i));
            //查询当天需要检测的委托订单
            List<InsOrder> insOrders = insOrderMapper.selectList(Wrappers.<InsOrder>lambdaQuery()
                    .eq(InsOrder::getState, 1)
                    .in(InsOrder::getInsState, insState)
                    .apply("DATE(create_time) = CURDATE() - INTERVAL " + j + " DAY"));
            //如果当前登录人是测试工程师或者是检测组长,需要过滤出检验人是他们的订单或者是还没检验的订单
            if (name.contains("测试工程师") || name.contains("检测组长")) {
                insOrders = insOrders.stream().filter(insOrder -> {
                    List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insOrder.getId()));
                    List<Integer> sampleId = insSamples.stream().map(InsSample::getId).collect(Collectors.toList());
                    List<InsSampleUser> insSampleUsers = insSampleUserMapper.selectList(Wrappers.<InsSampleUser>lambdaQuery()
                            .in(InsSampleUser::getInsSampleId, sampleId)
                            .eq(InsSampleUser::getState, 0)  //检验人
                    );
                    return insSampleUsers.size() == 0 || insSampleUsers.stream().map(InsSampleUser::getUserId).collect(Collectors.toList()).contains(userId);
                }).collect(Collectors.toList());
            }
            //如果当前登录人是送样员,需过滤出单子的送样员是当前人的订单
            else if (name.contains("送样员")) {
                insOrders = insOrders.stream().filter(insOrder ->
                        ObjectUtils.isNotEmpty(insOrder.getIssueUser()) && insOrder.getIssueUser().equals(userId)
                ).collect(Collectors.toList());
            }
            List<Map<String, Object>> works = insOrders.stream().map(insOrder -> {
                List<InsSample> insSamples = insSampleMapper.selectList(Wrappers.<InsSample>lambdaQuery().eq(InsSample::getInsOrderId, insOrder.getId()));
                HashMap<String, Object> hashMap = new HashMap<>();
                hashMap.put("text", insOrder.getEntrustCode());
                hashMap.put("sample", insSamples.stream().map(InsSample::getSample).collect(Collectors.joining(",")));
                hashMap.put("type", insOrder.getType());
                hashMap.put("state", insOrder.getState());
                User user = userMapper.selectById(insOrder.getCreateUser());
                hashMap.put("name", user.getName());
                return hashMap;
            }).collect(Collectors.toList());
            map.put("work" + i, works);
        }
        map.put("weekDays", weekDays);
        return map;
    }
 
    @Override
    public AuxiliaryAllDto currentUserWorkHourCount(AuxiliaryOriginalHoursLookDto dto) {
        List<AuxiliaryAllDto> auxiliaryAllDtos = auxiliaryOriginalHoursService.selectAuxiliaryAllByMonth(dto);
        int userId = SecurityUtils.getUserId().intValue();
        // 过滤掉非当前用户数据
        AuxiliaryAllDto auxiliaryAllDto = null;
        for (AuxiliaryAllDto allDto : auxiliaryAllDtos) {
            if(userId == allDto.getUserId()){
                auxiliaryAllDto = allDto;
                break;
            }
        }
        if(ObjectUtils.isEmpty(auxiliaryAllDto)){
            auxiliaryAllDto = new AuxiliaryAllDto(
                new BigDecimal(0),
                new BigDecimal(0),
                new BigDecimal(0),
                userId,SecurityUtils.getUsername(),
                dto.getMonth()
            );
        }
        return auxiliaryAllDto;
    }
}