shiyj1101
2021-08-05 e57e32fc43da31917912eebb4e47d4e50df1a9e9
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
package com.java110.community.bmo.repair.impl;
 
import com.java110.community.bmo.repair.IAppraiseRepairBMO;
import com.java110.community.dao.IRepairServiceDao;
import com.java110.community.dao.IRepairUserServiceDao;
import com.java110.core.annotation.Java110Transactional;
import com.java110.dto.appraise.AppraiseDto;
import com.java110.dto.repair.RepairDto;
import com.java110.dto.repair.RepairUserDto;
import com.java110.dto.user.UserDto;
import com.java110.intf.common.IAppraiseInnerServiceSMO;
import com.java110.intf.user.IUserInnerServiceSMO;
import com.java110.po.appraise.AppraisePo;
import com.java110.po.user.UserPo;
import com.java110.utils.util.Assert;
import com.java110.utils.util.BeanConvertUtil;
import com.java110.utils.util.DateUtil;
import com.java110.utils.util.StringUtil;
import com.java110.vo.ResultVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;
 
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
 * 报修评价
 */
@Service("appraiseRepairServiceImpl")
public class AppraiseRepairBMOImpl implements IAppraiseRepairBMO {
 
    @Autowired
    private IAppraiseInnerServiceSMO appraiseInnerServiceSMOImpl;
 
    @Autowired
    private IRepairServiceDao repairServiceDaoImpl;
 
    @Autowired
    private IRepairUserServiceDao repairUserServiceDaoImpl;
 
    @Autowired
    private IUserInnerServiceSMO userInnerServiceSMO;
 
    @Override
    @Java110Transactional
    public ResponseEntity<String> appraiseRepair(@RequestBody AppraiseDto appraiseDto) {
        //获取装修id
        String repairId = appraiseDto.getObjId();
        Map repairInfo = new HashMap();
        repairInfo.put("repairId", repairId);
        repairInfo.put("state", RepairUserDto.STATE_EVALUATE);
        List<Map> repairUserInfo = repairUserServiceDaoImpl.getRepairUserInfo(repairInfo);
        Assert.listOnlyOne(repairUserInfo, "该用户没有待评价的报修单");
        Map info = new HashMap();
        info.put("ruId", repairUserInfo.get(0).get("ruId"));
        info.put("repairId", appraiseDto.getObjId());
        info.put("state", RepairUserDto.STATE_FINISH);
        info.put("endTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
        info.put("context", appraiseDto.getContext());
        info.put("statusCd", "0");
        repairUserServiceDaoImpl.updateRepairUserInfoInstance(info);
        //将工单表的状态修改为完成
        info = new HashMap();
        info.put("repairId", appraiseDto.getObjId());
        info.put("statusCd", "0");
        info.put("state", RepairDto.STATE_RETURN_VISIT);
        repairServiceDaoImpl.updateRepairInfoInstance(info);
        //评价表中加入评价内容
        AppraisePo appraisePo = BeanConvertUtil.covertBean(appraiseDto, AppraisePo.class);
        UserDto userDto = new UserDto();
        userDto.setUserId(appraisePo.getAppraiseUserId());
        List<UserDto> users = userInnerServiceSMO.getUsers(userDto);
        Assert.listOnlyOne(users, "信息错误,用户不存在!");
        appraisePo.setAppraiseUserName(users.get(0).getName());
        appraisePo.setParentAppraiseId("-1");
        appraisePo.setObjType(AppraiseDto.OBJ_TYPE_REPAIR);
        appraisePo.setAppraiseType(AppraiseDto.APPRAISE_TYPE_PUBLIC);
        appraiseInnerServiceSMOImpl.saveAppraise(appraisePo);
        //获取当前结单的用户
        Map mapInfo = new HashMap();
        mapInfo.put("repairId", repairId);
        mapInfo.put("state", RepairUserDto.STATE_CLOSE);
        List<Map> repairUsers = repairUserServiceDaoImpl.getRepairUserInfo(mapInfo);
        Assert.listOnlyOne(repairUsers, "查询结单用户错误!");
        //获取结单员工的id
        Object staffId = repairUsers.get(0).get("staffId");
        //获取结单员工信息
        UserDto user = new UserDto();
        user.setUserId(staffId.toString());
        List<UserDto> userList = userInnerServiceSMO.getUsers(user);
        Assert.listOnlyOne(userList, "查询用户信息错误!");
        //获取综合评价得分
        Double appraiseScore = 0.0;
        if (!StringUtil.isEmpty(appraisePo.getAppraiseScore())) {
            appraiseScore = Double.parseDouble(appraisePo.getAppraiseScore());
        }
        //获取上门速度评分
        Double doorSpeedScore = 0.0;
        if (!StringUtil.isEmpty(appraisePo.getDoorSpeedScore())) {
            doorSpeedScore = Double.parseDouble(appraisePo.getDoorSpeedScore());
        }
        //获取维修员服务评分
        Double repairmanServiceScore = 0.0;
        if (!StringUtil.isEmpty(appraisePo.getRepairmanServiceScore())) {
            repairmanServiceScore = Double.parseDouble(appraisePo.getRepairmanServiceScore());
        }
        //计算平均分
        double average = 0.0;
        double averageNumber = (appraiseScore + doorSpeedScore + repairmanServiceScore) / 3.0;
        if (StringUtil.isEmpty(userList.get(0).getScore())) {
            BigDecimal averageNum = new BigDecimal(averageNumber);
            average = averageNum.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        } else {
            //获取用户原有评分
            Double scoreNumber = Double.parseDouble(userList.get(0).getScore());
            double score = (averageNumber + scoreNumber) / 2.0;
            BigDecimal averageNum = new BigDecimal(score);
            average = averageNum.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        }
        //更新用户评分
        UserPo userPo = new UserPo();
        userPo.setUserId(staffId.toString());
        userPo.setScore(String.valueOf(average));
        userInnerServiceSMO.updateUser(userPo);
        return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
    }
}