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<EnforceEvaluateQuestion> 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<EnforceEvaluateQuestion> questionList = questionService.list();
|
for (EnforceEvaluateQuestion question : questionList) {
|
if (question.getQuestionType()==1){
|
List<EnforceEvaluateAnswer> 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("请选择评价执法单!");
|
}
|
List<EnforceEvaluateQuestion> 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());
|
}
|
EnforceOrder order = orderService.getById(bo.getOrderId());
|
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)
|
);
|
}
|
|
|
}
|