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 appraiseRepair(@RequestBody AppraiseDto appraiseDto) { //获取装修id String repairId = appraiseDto.getObjId(); Map repairInfo = new HashMap(); repairInfo.put("repairId", repairId); repairInfo.put("state", RepairUserDto.STATE_EVALUATE); List 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 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 repairUsers = repairUserServiceDaoImpl.getRepairUserInfo(mapInfo); Assert.listOnlyOne(repairUsers, "查询结单用户错误!"); //获取结单员工的id Object staffId = repairUsers.get(0).get("staffId"); //获取结单员工信息 UserDto user = new UserDto(); user.setUserId(staffId.toString()); List 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); } }