lin
2024-03-02 861e9b1eb145094dff6d1caf3dba30d7ce0e11d7
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
/*
 *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice,
 *  this list of conditions and the following disclaimer.
 *  Redistributions in binary form must reproduce the above copyright
 *  notice, this list of conditions and the following disclaimer in the
 *  documentation and/or other materials provided with the distribution.
 *  Neither the name of the dreamlu.net developer nor the names of its
 *  contributors may be used to endorse or promote products derived from
 *  this software without specific prior written permission.
 *  Author: Chill 庄骞 (smallchill@163.com)
 */
package org.springblade.modules.task.service.impl;
 
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springblade.common.cache.SysCache;
import org.springblade.common.constant.CommonConstant;
import org.springblade.common.param.CommonParamSet;
import org.springblade.common.utils.RoleUtil;
import org.springblade.common.utils.SpringUtils;
import org.springblade.core.mp.base.BaseServiceImpl;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.utils.SpringUtil;
import org.springblade.modules.district.entity.DistrictEntity;
import org.springblade.modules.district.service.IDistrictService;
import org.springblade.modules.grid.entity.GridmanEntity;
import org.springblade.modules.grid.service.IGridService;
import org.springblade.modules.house.entity.HouseEntity;
import org.springblade.modules.house.service.IHouseService;
import org.springblade.modules.place.entity.PlaceEntity;
import org.springblade.modules.place.service.IPlaceService;
import org.springblade.modules.property.entity.PropertyCompanyDistrictEntity;
import org.springblade.modules.property.entity.PropertyCompanyEntity;
import org.springblade.modules.property.service.IPropertyCompanyDistrictService;
import org.springblade.modules.property.service.IPropertyCompanyService;
import org.springblade.modules.property.service.IPropertyDistrictUserService;
import org.springblade.modules.sse.server.SSEServer;
import org.springblade.modules.system.service.IDeptService;
import org.springblade.modules.task.entity.TaskEntity;
import org.springblade.modules.task.entity.TaskReportForRepairsEntity;
import org.springblade.modules.task.mapper.TaskReportForRepairsMapper;
import org.springblade.modules.task.service.ITaskReportForRepairsService;
import org.springblade.modules.task.service.ITaskService;
import org.springblade.modules.task.vo.TaskReportForRepairsVO;
import org.springblade.modules.task.vo.TaskReportStatistics;
import org.springblade.modules.taskPlaceSelfCheck.vo.TaskPlaceSelfCheckVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
 
/**
 * 报事报修任务表 服务实现类
 *
 * @author BladeX
 * @since 2023-11-06
 */
@Service
public class TaskReportForRepairsServiceImpl extends BaseServiceImpl<TaskReportForRepairsMapper, TaskReportForRepairsEntity> implements ITaskReportForRepairsService {
 
    @Autowired
    private ITaskService taskService;
 
 
    /**
     * 自定义分页
     *
     * @param page
     * @param taskReportForRepairs
     * @return
     */
    @Override
    public IPage<TaskReportForRepairsVO> selectTaskReportForRepairsPage(IPage<TaskReportForRepairsVO> page, TaskReportForRepairsVO taskReportForRepairs) {
        // 公共参数设置
        CommonParamSet commonParamSet = new CommonParamSet().invoke(TaskReportForRepairsVO.class, taskReportForRepairs);
        taskReportForRepairs.setConfirmUserId(AuthUtil.getUserId());
        if (null != taskReportForRepairs.getRoleName() && !taskReportForRepairs.getRoleName().equals("")) {
            if (taskReportForRepairs.getRoleName().equals("inhabitant")) {
                taskReportForRepairs.setCreateUser(AuthUtil.getUserId());
                taskReportForRepairs.setConfirmUserId(null);
                //
                taskReportForRepairs.setRoleType("inhabitant");
            }
        }
        String userRole = AuthUtil.getUserRole();
        List<String> aoiCodeList = new ArrayList<>();
        if (RoleUtil.isProperty(userRole)) {
            taskReportForRepairs.setRoleType("wy");
            // 查询小区id
            IPropertyDistrictUserService propertyDistrictUserService = SpringUtils.getBean(IPropertyDistrictUserService.class);
            List<String> districtIds = propertyDistrictUserService.selectPropertyDistrictByUserId(AuthUtil.getUserId());
            // 通过用户机构查询用户的物业公司
            IPropertyCompanyService bean = SpringUtil.getBean(IPropertyCompanyService.class);
            PropertyCompanyEntity companyEntity = bean.getOne(Wrappers.<PropertyCompanyEntity>lambdaQuery().eq(PropertyCompanyEntity::getDeptId, AuthUtil.getDeptId()));
            if (companyEntity != null) {
                IPropertyCompanyDistrictService bean2 = SpringUtils.getBean(IPropertyCompanyDistrictService.class);
                // 通过物业公司,查询小区
                List<PropertyCompanyDistrictEntity> companyDistrictEntities = bean2.list(Wrappers.<PropertyCompanyDistrictEntity>lambdaQuery()
                    .eq(PropertyCompanyDistrictEntity::getPropertyCompanyId, companyEntity.getId()));
                if (companyDistrictEntities.size() > 0) {
                    List<String> collect = companyDistrictEntities.stream().map(i -> i.getDistrictId()).collect(Collectors.toList());
                    districtIds.addAll(collect);
                }
            }
            if (districtIds.size() == 0) {
                return page.setRecords(new ArrayList<>());
            }
            IDistrictService districtService = SpringUtil.getBean(IDistrictService.class);
            List<DistrictEntity> districtEntityList = districtService.list(Wrappers.<DistrictEntity>lambdaQuery().in(DistrictEntity::getId, districtIds));
            aoiCodeList = districtEntityList.stream().map(i -> i.getAoiCode()).collect(Collectors.toList());
        }
 
        return page.setRecords(baseMapper.selectTaskReportForRepairsPage(page, taskReportForRepairs,
            commonParamSet.getRegionChildCodesList(), commonParamSet.getIsAdministrator(), aoiCodeList, commonParamSet.getGridCodeList()));
    }
 
    /**
     * 查询报事报修统计
     *
     * @return
     */
    @Override
    public TaskReportStatistics getStatisticsCount(String houseCode) {
        List<String> regionChildCodesList = SysCache.getRegionChildCodesByDeptId(AuthUtil.getDeptId());
        Integer isAdministrator = AuthUtil.isAdministrator() == true ? 1 : 2;
        return baseMapper.getStatisticsCount(AuthUtil.getUserId(), houseCode, regionChildCodesList, isAdministrator);
    }
 
    /**
     * 报事报修任务表 新增
     *
     * @param taskReportForRepairs
     * @return
     */
    @Override
    public boolean saveTaskReportForRepairs(TaskReportForRepairsEntity taskReportForRepairs) {
        boolean flag = false;
        // 任务新增
        TaskEntity taskEntity = new TaskEntity();
        taskEntity.setName(taskReportForRepairs.getRealName() + "报修");
        taskEntity.setStatus(1);
        taskEntity.setType(1);
        taskEntity.setFrequency(3);
        if (null != taskReportForRepairs.getAddressCode() && !taskReportForRepairs.getAddressCode().equals("")) {
            taskEntity.setHouseCode(taskReportForRepairs.getAddressCode());
        }
        // 新增
        boolean save = taskService.save(taskEntity);
        if (save) {
            // 设置网格编码
//            if (taskReportForRepairs.getHouseFlag().equals(CommonConstant.NUMBER_TWO)) {
//                IPlaceService bean = SpringUtils.getBean(IPlaceService.class);
//                PlaceEntity placeEntity = bean.getOne(Wrappers.<PlaceEntity>lambdaQuery()
//                    .eq(PlaceEntity::getHouseCode, taskReportForRepairs.getAddressCode()).last("limit 1"));
//                taskReportForRepairs.setGridCode(placeEntity.getGridCode());
//            } else {
//                IHouseService bean = SpringUtils.getBean(IHouseService.class);
//                HouseEntity houseEntity = bean.getOne(Wrappers.<HouseEntity>lambdaQuery()
//                    .eq(HouseEntity::getHouseCode, taskReportForRepairs.getAddressCode()));
//                taskReportForRepairs.setGridCode(houseEntity.getGridCode());
//            }
            taskReportForRepairs.setTaskId(taskEntity.getId());
            taskReportForRepairs.setConfirmFlag(1);
            flag = save(taskReportForRepairs);
            // 同时向web 端推送消息
            SSEServer.sendMessage("web:1", "1");
        }
        return flag;
    }
 
    /**
     * 报事报修任务表 自定义修改
     *
     * @param taskReportForRepairs
     * @return
     */
    @Override
    public boolean updateTaskReportForRepairs(TaskReportForRepairsEntity taskReportForRepairs) {
        // 设置参数
        taskReportForRepairs.setUpdateTime(new Date());
        taskReportForRepairs.setUpdateUser(AuthUtil.getUserId());
        // 更新
        return updateById(taskReportForRepairs);
    }
 
    /**
     * 报事报修任务表 审核
     *
     * @param taskReportForRepairs
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean checkReportForRepairs(TaskReportForRepairsEntity taskReportForRepairs) {
        boolean flag = false;
        // 设置更新时间
        taskReportForRepairs.setConfirmTime(new Date());
        taskReportForRepairs.setConfirmUserId(AuthUtil.getUserId());
        // 更新数据
        boolean b = updateById(taskReportForRepairs);
        if (b) {
            TaskReportForRepairsEntity entity = getById(taskReportForRepairs.getId());
            // 更新任务表状态
            TaskEntity taskEntity = new TaskEntity();
            taskEntity.setId(entity.getTaskId());
            taskEntity.setStatus(taskReportForRepairs.getConfirmFlag());
            flag = taskService.updateById(taskEntity);
        }
        // 返回
        return flag;
    }
 
    @Override
    public Integer getStatistics(Long userId, String neiCode) {
        String roleName = SpringUtils.getRequestParam("roleName");
        return baseMapper.getStatistics(userId, neiCode,roleName);
    }
 
    /**
     * 更新状态--临时接口
     *
     * @param gridman
     * @return
     */
    @Override
    public boolean updateView(GridmanEntity gridman) {
        baseMapper.updateView(gridman);
        return true;
    }
 
    @Override
    public Object getReportForStatistics(String code, String roleType) {
        Map<String, Object> objectObjectHashMap = new HashMap<>();
        if (roleType.equals("2")) {
            Integer result1 = baseMapper.getReportForStatistics(code, null, null, null, roleType);
            Integer result = baseMapper.getReportForStatistics(code, null, 3, null, roleType);
            objectObjectHashMap.put("result", result1);
            objectObjectHashMap.put("result1", result);
            objectObjectHashMap.put("result2", result1.equals(0) ? 0 : BigDecimal.valueOf(result).divide(BigDecimal.valueOf(result1), 4, BigDecimal.ROUND_HALF_UP));
            objectObjectHashMap.put("result3", baseMapper.getReportForStatistics(code, null, null, 1, roleType));
            objectObjectHashMap.put("result4", baseMapper.getReportForStatistics(code, null, null, 2, roleType));
            objectObjectHashMap.put("result5", baseMapper.getReportForStatistics(code, null, null, 3, roleType));
            objectObjectHashMap.put("result6", baseMapper.getReportForStatistics(code, null, null, 4, roleType));
        } else {
            Integer result1 = baseMapper.getReportForStatistics(code, AuthUtil.getUserId(), null, null, roleType);
            Integer result = baseMapper.getReportForStatistics(code, AuthUtil.getUserId(), 3, null, roleType);
            // result 总数  result1 已处理  result2 处理率  result3 公共维修  result4 居家维修  result5 矛盾纠纷  result6 投诉举报
            objectObjectHashMap.put("result", result1);
            objectObjectHashMap.put("result1", result);
            objectObjectHashMap.put("result2", result1.equals(0) ? 0 : BigDecimal.valueOf(result).divide(BigDecimal.valueOf(result1), 4, BigDecimal.ROUND_HALF_UP));
            objectObjectHashMap.put("result3", baseMapper.getReportForStatistics(code, AuthUtil.getUserId(), null, 1, roleType));
            objectObjectHashMap.put("result4", baseMapper.getReportForStatistics(code, AuthUtil.getUserId(), null, 2, roleType));
            objectObjectHashMap.put("result5", baseMapper.getReportForStatistics(code, AuthUtil.getUserId(), null, 3, roleType));
            objectObjectHashMap.put("result6", baseMapper.getReportForStatistics(code, AuthUtil.getUserId(), null, 4, roleType));
        }
        return objectObjectHashMap;
    }
 
}