package com.project.enforce.service.impl; import cn.hutool.core.convert.Convert; import com.project.common.exception.base.BaseException; import com.project.common.utils.JsonUtils; import com.project.common.utils.NumberUtils; import com.project.common.utils.StringUtils; import com.project.enforce.domain.EnforceEvaluateAnswer; import com.project.enforce.domain.EnforceEvaluateLog; import com.project.enforce.domain.EnforceEvaluateQuestion; import com.project.enforce.domain.EnforceOrder; import com.project.enforce.domain.bo.editBo.EnforceEvaluateBo; import com.project.enforce.domain.vo.EnforceEvaluateVo; import com.project.enforce.service.*; import lombok.RequiredArgsConstructor; 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.List; /** * 功能描述: * * @author ZQN * @version 1.0 */ @Service @RequiredArgsConstructor(onConstructor_ = @Autowired) public class EnforceEvaluateServiceImpl implements IEnforceEvaluateService { private final IEnforceEvaluateQuestionService questionService; private final IEnforceEvaluateAnswerService answerService; private final IEnforceOrderService orderService; private final IEnforceEvaluateLogService evaluateLogService; @Override//保存 @Transactional public Boolean save(EnforceEvaluateBo bo) { questionService.clearQuestionAndAnswer(); List questionList = bo.getQuestionList(); if (StringUtils.isEmpty(questionList)){ throw new BaseException("评价项不可为空!"); } for (EnforceEvaluateQuestion question : questionList) { if (question.getQuestionType()==1 && StringUtils.isEmpty(question.getAnswerList())){ throw new BaseException("选择类型答案不可为空!"); } if (question.getQuestionId()==null){ int count = questionService.count(questionService.lq() .eq(EnforceEvaluateQuestion::getQuestionName, question.getQuestionId())); if (count>0) { throw new BaseException(StringUtils.format("{},重复,请重试!", question.getQuestionName())); } } else { int count = questionService.count(questionService.lq(). eq(EnforceEvaluateQuestion::getQuestionName, question.getQuestionId()) .ne(EnforceEvaluateQuestion::getQuestionId,question.getQuestionId())); if (count>0) { throw new BaseException(StringUtils.format("{},题目重复,请重试!", question.getQuestionName())); } } questionService.saveOrUpdate(question); if (StringUtils.isNotEmpty(question.getAnswerList())){ EnforceEvaluateQuestion one = questionService.getOne(questionService.lq().eq(EnforceEvaluateQuestion::getQuestionName, question.getQuestionName())); question.getAnswerList().forEach(enforceEvaluateAnswer -> { enforceEvaluateAnswer.setQuestionId(one.getQuestionId()); enforceEvaluateAnswer.setQuestionName(one.getQuestionName()); }); answerService.saveOrUpdateBatch(question.getAnswerList()); } } return true; } @Override//评价设置详情 public EnforceEvaluateVo getInfo() { EnforceEvaluateVo vo = new EnforceEvaluateVo(); List questionList = questionService.list(); for (EnforceEvaluateQuestion question : questionList) { if (question.getQuestionType()==1){ List answerList = answerService.list(answerService.lq().eq(EnforceEvaluateAnswer::getQuestionId, question.getQuestionId())); question.setAnswerList(answerList); } } vo.setQuestionList(questionList); return vo; } @Override @Transactional public Boolean saveOrder(EnforceEvaluateBo bo) { if (bo.getOrderId()==null){ throw new BaseException("请选择评价执法单!"); } EnforceOrder order = orderService.getById(bo.getOrderId()); if (order.getOrderStatus()==2){ throw new BaseException("该执法单还未执法,不可评价!"); } List questionList = bo.getQuestionList(); if (StringUtils.isEmpty(questionList)){ throw new BaseException("评价项不可为空!"); } int count = evaluateLogService.count(EnforceEvaluateLog::getOrderId, bo.getOrderId()); if (count>0) { throw new BaseException("该执法单已评价!"); } BigDecimal totalScore = BigDecimal.ZERO; for (EnforceEvaluateQuestion question : questionList) { totalScore = NumberUtils.add(totalScore, question.getGetScore()); } EnforceEvaluateLog evaluateLog = Convert.convert(EnforceEvaluateLog.class, order); evaluateLog.setQuestionRemark(bo.getQuestionRemark()); evaluateLog.setTotalScore(NumberUtils.divToBigDecSca2(totalScore,1)); evaluateLog.setQuestionStatic(JsonUtils.objectToJson(bo.getQuestionList())); evaluateLogService.saveOrUpdate(evaluateLog); return orderService.update(orderService.lu() .set(EnforceOrder::getIsEva,1) .set(EnforceOrder::getTotalScore, totalScore) .eq(EnforceOrder::getOrderId, bo.getOrderId()) ); } }