Merge remote-tracking branch 'origin/main'

main
wanglei 1 month ago
commit e6d8f9b736

@ -247,7 +247,7 @@ public class KhPingceController extends BaseController {
* ids id-----votevoteemp * ids id-----votevoteemp
*/ */
// @PreAuthorize("@ss.hasPermi('kaohe:pingce:remove')") // @PreAuthorize("@ss.hasPermi('kaohe:pingce:remove')")
@Log(title = "任务清除打分数据", businessType = BusinessType.DELETE) @Log(title = "任务清除打分数据", businessType = BusinessType.DELETE)
@DeleteMapping("/clean") @DeleteMapping("/clean")
@Transactional @Transactional
public AjaxResult removeTest(@RequestParam Long[] ids) { public AjaxResult removeTest(@RequestParam Long[] ids) {
@ -260,6 +260,12 @@ public class KhPingceController extends BaseController {
List<Long> vIds = votes.stream().map(KhVote::getId).collect(Collectors.toList()); List<Long> vIds = votes.stream().map(KhVote::getId).collect(Collectors.toList());
//修改voteemp //修改voteemp
for (Long vId : vIds) { for (Long vId : vIds) {
//修改投票为未统计计算平均分、最终分
KhVote v = new KhVote();
v.setId(vId);
v.setStatistical("0");
khVoteService.updateKhVote(v);
KhVoteEmp vemp = new KhVoteEmp(); KhVoteEmp vemp = new KhVoteEmp();
vemp.setVoteId(vId); vemp.setVoteId(vId);
List<KhVoteEmp> vEmps = khVoteEmpService.selectKhVoteEmpList(vemp); List<KhVoteEmp> vEmps = khVoteEmpService.selectKhVoteEmpList(vemp);
@ -291,7 +297,8 @@ public class KhPingceController extends BaseController {
} }
} }
return toAjax(1); return toAjax(1);
} /*else {//null认为清理所有 (已完成删除全部数据,进行中数据清除评分数据) }
/*else {//null认为清理所有 (已完成删除全部数据,进行中数据清除评分数据)
//已完成的数据直接清除任务及所有关联数据————完全删除已完成任务 //已完成的数据直接清除任务及所有关联数据————完全删除已完成任务
KhPingce khPingce = new KhPingce(); KhPingce khPingce = new KhPingce();
khPingce.setState("2"); khPingce.setState("2");
@ -348,7 +355,6 @@ public class KhPingceController extends BaseController {
} }
AjaxResult.success("按要求清理数据库成功") AjaxResult.success("按要求清理数据库成功")
}*/ }*/
return AjaxResult.error("请选择需要清理的考核任务!"); return AjaxResult.error("请选择需要清理的考核任务!");
} }
} }

@ -46,7 +46,7 @@ public class KhVoteController extends BaseController {
@Autowired @Autowired
private IKhTemItemService khTemItemService; private IKhTemItemService khTemItemService;
@Scheduled(cron = "0 * * * * ?") // 每分钟的第0秒执行一次 监测时间修改评分状态 /*@Scheduled(cron = "0 * * * * ?") // 每分钟的第0秒执行一次 监测时间修改评分状态
public void performTask() { public void performTask() {
System.out.println("进入定时任务-------------------------------------------------------------"); System.out.println("进入定时任务-------------------------------------------------------------");
//获取所有未完成的评分任务 //获取所有未完成的评分任务
@ -97,7 +97,7 @@ public class KhVoteController extends BaseController {
} }
} }
} }*/
/** /**
* *

@ -1,8 +1,10 @@
package com.ruoyi.kaohe.controller; package com.ruoyi.kaohe.controller;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import com.ruoyi.kaohe.domain.KhVoteItems;
import com.ruoyi.kaohe.domain.KhVoteRecardParam; import com.ruoyi.kaohe.domain.KhVoteRecardParam;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -106,15 +108,25 @@ public class KhVoteEmpController extends BaseController
} }
/** /**
* *
*/ */
@PreAuthorize("@ss.hasPermi('kaohe:vote_emp:edit')") @PreAuthorize("@ss.hasPermi('kaohe:vote_emp:edit')")
@Log(title = "投票选项", businessType = BusinessType.UPDATE) @Log(title = "投票打分", businessType = BusinessType.UPDATE)
@PutMapping("/voteSubmit") @PutMapping("/voteSubmit")
public AjaxResult voteSubmit(@RequestBody KhVoteRecardParam param) public AjaxResult voteSubmit(@RequestBody KhVoteRecardParam param)
{ {
return khVoteEmpService.voteSubmit(param); return khVoteEmpService.voteSubmit(param);
} }
/**
*
*/
@PreAuthorize("@ss.hasPermi('kaohe:vote_emp:edit')")
@Log(title = "投票统计", businessType = BusinessType.UPDATE)
@PutMapping("/statisticalResults/{id}")
public AjaxResult statisticalResults(@PathVariable Long id)
{
return khVoteEmpService.statisticalResults(id);
}
/** /**
* *

@ -84,6 +84,10 @@ public class KhVote extends BaseEntity
/** 状态(0 未开始 1 进行中 2 完成) */ /** 状态(0 未开始 1 进行中 2 完成) */
@Excel(name = "状态(0 未开始 1 进行中 2 完成)") @Excel(name = "状态(0 未开始 1 进行中 2 完成)")
private String state; private String state;
/** 统计最终得分(0否1是) */
private String statistical;
/** /**
* *
* @return * @return
@ -100,6 +104,14 @@ public class KhVote extends BaseEntity
*/ */
private List<KhVoteEmp> voteEmps; private List<KhVoteEmp> voteEmps;
public String getStatistical() {
return statistical;
}
public void setStatistical(String statistical) {
this.statistical = statistical;
}
//首页查询评分任务的参数 //首页查询评分任务的参数
private List<Long> voteIds; private List<Long> voteIds;
@ -308,6 +320,8 @@ public class KhVote extends BaseEntity
.append("umax", getUmax()) .append("umax", getUmax())
.append("percentage", getPercentage()) .append("percentage", getPercentage())
.append("state", getState()) .append("state", getState())
.append("samePercent", getSamePercent())
.append("statistical", getStatistical())
.append("createBy", getCreateBy()) .append("createBy", getCreateBy())
.append("createTime", getCreateTime()) .append("createTime", getCreateTime())
.append("updateBy", getUpdateBy()) .append("updateBy", getUpdateBy())

@ -20,7 +20,7 @@ public class KhVoteEmp extends BaseEntity
private Long id; private Long id;
/** 考核类型id */ /** 考核类型id */
@Excel(name = "考核类型id") // @Excel(name = "考核类型id")
private Long khitemTypeid; private Long khitemTypeid;
/** 投票id */ /** 投票id */
@ -72,7 +72,7 @@ public class KhVoteEmp extends BaseEntity
private BigDecimal avgScore; private BigDecimal avgScore;
/** 评分占比(0-1之间) */ /** 评分占比(0-1之间) */
@Excel(name = "评分占比(0-1之间)") @Excel(name = "评分占比")
private BigDecimal percentage; private BigDecimal percentage;
/** 最终分数 */ /** 最终分数 */
@ -80,12 +80,18 @@ public class KhVoteEmp extends BaseEntity
private BigDecimal endScore; private BigDecimal endScore;
/** 乐观锁版本号 */ /** 乐观锁版本号 */
@Excel(name = "乐观锁版本号") // @Excel(name = "乐观锁版本号")
private Long version; private Long version;
//仅做参数 传递本次评分分数 //仅做参数 传递本次评分分数
private BigDecimal score; private BigDecimal score;
//用作参数传入计算
private BigDecimal a;
private BigDecimal b;
private BigDecimal c;
private BigDecimal d;
public Long getVersion() { public Long getVersion() {
return version; return version;
} }
@ -94,6 +100,38 @@ public class KhVoteEmp extends BaseEntity
this.version = version; this.version = version;
} }
public BigDecimal getA() {
return a;
}
public void setA(BigDecimal a) {
this.a = a;
}
public BigDecimal getB() {
return b;
}
public void setB(BigDecimal b) {
this.b = b;
}
public BigDecimal getC() {
return c;
}
public void setC(BigDecimal c) {
this.c = c;
}
public BigDecimal getD() {
return d;
}
public void setD(BigDecimal d) {
this.d = d;
}
public BigDecimal getScore() { public BigDecimal getScore() {
return score; return score;
} }

@ -60,4 +60,8 @@ public interface KhVoteEmpMapper
public int deleteKhVoteEmpByIds(Long[] ids); public int deleteKhVoteEmpByIds(Long[] ids);
List<KhVoteEmp> selectVoteEmpsByVoteId(KhVoteEmp khVoteEmp); List<KhVoteEmp> selectVoteEmpsByVoteId(KhVoteEmp khVoteEmp);
int updateKhVoteEmp1(List<KhVoteEmp> voteEmp);
public int batchUpdateVoteScore(List<KhVoteEmp> voteEmpList);
} }

@ -65,4 +65,6 @@ public interface IKhVoteEmpService
AjaxResult voteSubmit(KhVoteRecardParam param); AjaxResult voteSubmit(KhVoteRecardParam param);
List<KhVoteEmp> selectVoteEmpsByVoteId(KhVoteEmp khVoteEmp); List<KhVoteEmp> selectVoteEmpsByVoteId(KhVoteEmp khVoteEmp);
AjaxResult statisticalResults(Long id);
} }

@ -11,6 +11,7 @@ import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.kaohe.domain.*; import com.ruoyi.kaohe.domain.*;
import com.ruoyi.kaohe.mapper.KhVoteEmpMapper; import com.ruoyi.kaohe.mapper.KhVoteEmpMapper;
import com.ruoyi.kaohe.mapper.KhVoteMapper; import com.ruoyi.kaohe.mapper.KhVoteMapper;
import com.ruoyi.kaohe.service.IKhVoteEmpService;
import com.ruoyi.kaohe.util.PinYinUtil; import com.ruoyi.kaohe.util.PinYinUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -34,6 +35,8 @@ public class KhKhrwResultServiceImpl implements IKhKhrwResultService
private KhVoteMapper khVoteMapper; private KhVoteMapper khVoteMapper;
@Autowired @Autowired
private KhVoteEmpMapper khVoteEmpMapper; private KhVoteEmpMapper khVoteEmpMapper;
@Autowired
private IKhVoteEmpService khVoteEmpService;
/** /**
* *
@ -137,6 +140,11 @@ public class KhKhrwResultServiceImpl implements IKhKhrwResultService
//查询该考核任务下的所有评分任务 //查询该考核任务下的所有评分任务
List<KhVote> votes = khVoteMapper.selectKhVoteList(khVote); List<KhVote> votes = khVoteMapper.selectKhVoteList(khVote);
for (KhVote vote : votes) { for (KhVote vote : votes) {
//当前投票是否统计计算平均分和最终得分————去掉if 担心客户在评测结束前点击统计平均值及最终分
//if(vote.getStatistical().equals("0")){
khVoteEmpService.statisticalResults(vote.getId());
//}
KhVoteEmp khVoteEmp = new KhVoteEmp(); KhVoteEmp khVoteEmp = new KhVoteEmp();
khVoteEmp.setVoteId(vote.getId()); khVoteEmp.setVoteId(vote.getId());
//查询该评分任务对应的所有被考核对象详情 //查询该评分任务对应的所有被考核对象详情

@ -8,16 +8,14 @@ import java.util.stream.Collectors;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.kaohe.domain.KhVoteItems; import com.ruoyi.kaohe.domain.*;
import com.ruoyi.kaohe.domain.KhVoteRecard;
import com.ruoyi.kaohe.domain.KhVoteRecardParam;
import com.ruoyi.kaohe.mapper.KhVoteItemsMapper; import com.ruoyi.kaohe.mapper.KhVoteItemsMapper;
import com.ruoyi.kaohe.mapper.KhVoteMapper;
import com.ruoyi.kaohe.mapper.KhVoteRecardMapper; import com.ruoyi.kaohe.mapper.KhVoteRecardMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.ruoyi.kaohe.mapper.KhVoteEmpMapper; import com.ruoyi.kaohe.mapper.KhVoteEmpMapper;
import com.ruoyi.kaohe.domain.KhVoteEmp;
import com.ruoyi.kaohe.service.IKhVoteEmpService; import com.ruoyi.kaohe.service.IKhVoteEmpService;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -37,6 +35,9 @@ public class KhVoteEmpServiceImpl implements IKhVoteEmpService {
private KhVoteRecardMapper khVoteRecardMapper; private KhVoteRecardMapper khVoteRecardMapper;
@Autowired @Autowired
private KhVoteItemsMapper khVoteItemsMapper; private KhVoteItemsMapper khVoteItemsMapper;
@Autowired
private KhVoteMapper khVoteMapper;
/** /**
* *
@ -114,15 +115,72 @@ public class KhVoteEmpServiceImpl implements IKhVoteEmpService {
@Override @Override
@Transactional @Transactional
// @Async("threadPoolTaskExecutor") public AjaxResult statisticalResults(Long id) {
//修改未已统计计算
KhVote vote = new KhVote();
vote.setId(id);
vote.setStatistical("1");
khVoteMapper.updateKhVote(vote);
//统计计算平均值、最终值
KhVoteEmp vEmp = new KhVoteEmp();
vEmp.setVoteId(id);
List<KhVoteEmp> khVoteEmps = khVoteEmpMapper.selectKhVoteEmpList(vEmp);
for (KhVoteEmp voteEmp : khVoteEmps) {
if(!(voteEmp.getVoteNum().compareTo(BigDecimal.ZERO) == 1)){
return AjaxResult.error("投票人数需大于0才能统计");
}
if (voteEmp.getKhitemTypeid().equals(1L)) { //选项评分
List<KhVoteItems> voteItems = khVoteItemsMapper.selectKhVoteItemsList(null);//从数据库获取分值
BigDecimal a = new BigDecimal("100");
BigDecimal b = new BigDecimal("80");
BigDecimal c = new BigDecimal("60");
BigDecimal d = new BigDecimal("40");
if (voteItems != null && voteItems.size() > 0) {
for (KhVoteItems voteItem : voteItems) {
if (voteItem.getId() == 1) {
a = voteItem.getScore();
} else if (voteItem.getId() == 2) {
b = voteItem.getScore();
} else if (voteItem.getId() == 3) {
c = voteItem.getScore();
} else {
d = voteItem.getScore();
}
}
}
//修改投票情况
BigDecimal avgScore = (voteEmp.getOptionA().multiply(a).add(voteEmp.getOptionB().multiply(b).add(voteEmp.getOptionC().multiply(c).add(voteEmp.getOptionD().multiply(d)))
)).divide(voteEmp.getVoteNum(), 4, RoundingMode.HALF_UP);
voteEmp.setAvgScore(avgScore);//投票后计算平均分
if (voteEmp.getPercentage() != null) {
voteEmp.setEndScore(avgScore.multiply(voteEmp.getPercentage()));//计算最后得分
} else {
voteEmp.setEndScore(avgScore);
}
} else if (voteEmp.getKhitemTypeid().equals(2L)) {
voteEmp.setAvgScore(voteEmp.getVoteScore().divide(voteEmp.getVoteNum(), 4, RoundingMode.HALF_UP));//计算平均分
voteEmp.setEndScore(voteEmp.getOptionA().multiply(voteEmp.getPercentage())); //计算最终分
} else if (voteEmp.getKhitemTypeid().equals(3L)) {
voteEmp.setAvgScore(voteEmp.getVoteScore().divide(voteEmp.getVoteNum(), 4, RoundingMode.HALF_UP));
voteEmp.setEndScore(voteEmp.getAvgScore());
}
}
return khVoteEmpMapper.updateKhVoteEmp1(khVoteEmps)> 0 ? AjaxResult.success() : AjaxResult.error();
}
@Override
@Transactional(rollbackFor = Exception.class)
// @Async("threadPoolTaskExecutor") 异步添加需要同时开启主类的注解,另外会导致事务注解失效
public AjaxResult voteSubmit(KhVoteRecardParam param) { public AjaxResult voteSubmit(KhVoteRecardParam param) {
System.out.println("------------------------开始异步批量处理用户数据,线程:" + Thread.currentThread().getName()); System.out.println("------------------------开始批量处理评分数据,线程:" + Thread.currentThread().getName());
Map<String, String> xuanxiangDetails = new LinkedHashMap<>(); Map<String, String> xuanxiangDetails = new LinkedHashMap<>();
Map<String, BigDecimal> pingFenDetails = new LinkedHashMap<>(); Map<String, BigDecimal> pingFenDetails = new LinkedHashMap<>();
BigDecimal num = new BigDecimal("1");//投票人数+1
List<KhVoteEmp> voteEmpList = param.getVoteEmpList(); List<KhVoteEmp> voteEmpList = param.getVoteEmpList();
Date nowDate = DateUtils.getNowDate();
Long typeid = param.getKhitemTypeid(); Long typeid = param.getKhitemTypeid();
Date nowDate = DateUtils.getNowDate();
//存储投票记录 //存储投票记录
KhVoteRecard recard = new KhVoteRecard(); KhVoteRecard recard = new KhVoteRecard();
@ -131,15 +189,10 @@ public class KhVoteEmpServiceImpl implements IKhVoteEmpService {
recard.setVoteId(param.getVoteId()); recard.setVoteId(param.getVoteId());
recard.setUserId(param.getUserId()); recard.setUserId(param.getUserId());
recard.setUserName(param.getUserName()); recard.setUserName(param.getUserName());
// recard.setUid(param.getUid());
//选项评分 //选项评分
if (typeid.equals(1L)) { if (typeid.equals(1L)) {
List<KhVoteItems> voteItems = khVoteItemsMapper.selectKhVoteItemsList(null);//从数据库获取分值 List<KhVoteItems> voteItems = khVoteItemsMapper.selectKhVoteItemsList(null);//从数据库获取分值
BigDecimal a = new BigDecimal("100");
BigDecimal b = new BigDecimal("80");
BigDecimal c = new BigDecimal("60");
BigDecimal d = new BigDecimal("40");
String aName = "优秀"; String aName = "优秀";
String bName = "合格"; String bName = "合格";
String cName = "基本合格"; String cName = "基本合格";
@ -147,170 +200,42 @@ public class KhVoteEmpServiceImpl implements IKhVoteEmpService {
if (voteItems != null && voteItems.size() > 0) { if (voteItems != null && voteItems.size() > 0) {
for (KhVoteItems voteItem : voteItems) { for (KhVoteItems voteItem : voteItems) {
if (voteItem.getId() == 1) { if (voteItem.getId() == 1) {
a = voteItem.getScore();
aName = voteItem.getVitemName(); aName = voteItem.getVitemName();
} else if (voteItem.getId() == 2) { } else if (voteItem.getId() == 2) {
b = voteItem.getScore();
bName = voteItem.getVitemName(); bName = voteItem.getVitemName();
} else if (voteItem.getId() == 3) { } else if (voteItem.getId() == 3) {
c = voteItem.getScore();
cName = voteItem.getVitemName(); cName = voteItem.getVitemName();
} else { } else {
d = voteItem.getScore();
dName = voteItem.getVitemName(); dName = voteItem.getVitemName();
} }
} }
} }
for (KhVoteEmp voteEmp : voteEmpList) { for (int i = 0; i < voteEmpList.size(); i++) {
// 最大重试次数 voteEmpList.get(i).setKhitemTypeid(typeid);
// final int MAX_RETRY_COUNT = 3; voteEmpList.get(i).setUpdateTime(nowDate);
int retryCount = 0; if (voteEmpList.get(i).getOptionA().compareTo(BigDecimal.ZERO) == 1) {
/* while (true) {*/ xuanxiangDetails.put(voteEmpList.get(i).getBkhdxName(), aName);
voteEmp.setUpdateTime(nowDate); } else if (voteEmpList.get(i).getOptionB().compareTo(BigDecimal.ZERO) == 1) {
//根据id查询数据得到原值及版本号 xuanxiangDetails.put(voteEmpList.get(i).getBkhdxName(), bName);
KhVoteEmp oldvoteEmp = khVoteEmpMapper.selectKhVoteEmpById(voteEmp.getId()); } else if (voteEmpList.get(i).getOptionC().compareTo(BigDecimal.ZERO) == 1) {
//存储投票详情到map xuanxiangDetails.put(voteEmpList.get(i).getBkhdxName(), cName);
if (voteEmp.getOptionA().compareTo(BigDecimal.ZERO) == 1) { } else if (voteEmpList.get(i).getOptionD().compareTo(BigDecimal.ZERO) == 1) {
// xuanxiangDetails.put(voteEmp.getBkhdxId().toString(), voteEmp.getBkhdxName()+":优秀"); xuanxiangDetails.put(voteEmpList.get(i).getBkhdxName(), dName);
xuanxiangDetails.put(voteEmp.getBkhdxName(), aName);
}
if (voteEmp.getOptionB().compareTo(BigDecimal.ZERO) == 1) {
//xuanxiangDetails.put(voteEmp.getBkhdxId().toString(), voteEmp.getBkhdxName()+":合格");
xuanxiangDetails.put(voteEmp.getBkhdxName(), bName);
}
if (voteEmp.getOptionC().compareTo(BigDecimal.ZERO) == 1) {
//xuanxiangDetails.put(voteEmp.getBkhdxId().toString(), voteEmp.getBkhdxName()+":基本合格");
xuanxiangDetails.put(voteEmp.getBkhdxName(), cName);
}
if (voteEmp.getOptionD().compareTo(BigDecimal.ZERO) == 1) {
//xuanxiangDetails.put(voteEmp.getBkhdxId().toString(), voteEmp.getBkhdxName()+":不合格");
xuanxiangDetails.put(voteEmp.getBkhdxName(), dName);
}
//修改投票情况
BigDecimal optionA = voteEmp.getOptionA().add(oldvoteEmp.getOptionA());
BigDecimal optionB = voteEmp.getOptionB().add(oldvoteEmp.getOptionB());
BigDecimal optionC = voteEmp.getOptionC().add(oldvoteEmp.getOptionC());
BigDecimal optionD = voteEmp.getOptionD().add(oldvoteEmp.getOptionD());
voteEmp.setVoteNum(oldvoteEmp.getVoteNum().add(num));
BigDecimal avgScore = (optionA.multiply(a).add(optionB.multiply(b).add(optionC.multiply(c).add(optionD.multiply(d)))
)).divide(voteEmp.getVoteNum(), 4, RoundingMode.HALF_UP);
voteEmp.setAvgScore(avgScore);//投票后计算平均分
voteEmp.setOptionA(optionA);
voteEmp.setOptionB(optionB);
voteEmp.setOptionC(optionC);
voteEmp.setOptionD(optionD);
if (oldvoteEmp.getPercentage() != null) { //计算最后得分
voteEmp.setEndScore(avgScore.multiply(oldvoteEmp.getPercentage()));
} else {
voteEmp.setEndScore(avgScore);
}
voteEmp.setVersion(oldvoteEmp.getVersion());
int result = khVoteEmpMapper.updateKhVoteEmp(voteEmp);
/*if (result > 0) {
break;
} else {
// 更新失败,版本冲突,增加重试计数
retryCount++;
if (retryCount > 3) {
throw new RuntimeException("重试次数过多被中断-------------");
}
System.out.println("-----------版本冲突," + voteEmp.getBkhdxName() + "第" + retryCount + "次重试");
// 等待一段时间后重试,避免立即重试导致的持续冲突
try {
Thread.sleep(1000 * retryCount); // 重试间隔递增
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("重试过程异常中断-------------", e);
} }
// }
} }
}*/
}
} else if (typeid.equals(2L)) {//占比评分
for (KhVoteEmp voteEmp : voteEmpList) {
int retryCount = 0;
/* while (true) {*/
voteEmp.setUpdateTime(nowDate);
//根据id查询数据得到之前的值
KhVoteEmp oldvoteEmp = khVoteEmpMapper.selectKhVoteEmpById(voteEmp.getId());
BigDecimal sumScore = voteEmp.getScore().add(oldvoteEmp.getVoteScore());
voteEmp.setVoteScore(sumScore);
//修改投票人数 平均分*占比=最后得分
voteEmp.setVoteNum(oldvoteEmp.getVoteNum().add(num));
voteEmp.setAvgScore(sumScore.divide(voteEmp.getVoteNum(), 4, RoundingMode.HALF_UP));
voteEmp.setEndScore(voteEmp.getAvgScore().multiply(oldvoteEmp.getPercentage()));
voteEmp.setVersion(oldvoteEmp.getVersion());
int result = khVoteEmpMapper.updateKhVoteEmp(voteEmp);
/*if (result > 0) {
break;
} else {
// 更新失败,版本冲突,增加重试计数
retryCount++;
if (retryCount > 3) {
throw new RuntimeException("重试次数过多被中断-------------");
}
System.out.println("-----------版本冲突," + voteEmp.getBkhdxName() + "第" + retryCount + "次重试");
// 等待一段时间后重试,避免立即重试导致的持续冲突
try {
Thread.sleep(1000 * retryCount); // 重试间隔递增
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("重试过程异常中断-------------", e);
}
}
}*/
}
} else {//单独评分 不占比 以平均分为最后得分
for (KhVoteEmp voteEmp : voteEmpList) {
int retryCount = 0;
/* while (true) {*/
voteEmp.setUpdateTime(nowDate);
//根据id查询数据得到之前的值
KhVoteEmp oldvoteEmp = khVoteEmpMapper.selectKhVoteEmpById(voteEmp.getId());
BigDecimal sumScore = voteEmp.getScore().add(oldvoteEmp.getVoteScore());
voteEmp.setVoteNum(oldvoteEmp.getVoteNum()
.add(num));
voteEmp.setVoteScore(sumScore);
voteEmp.setAvgScore(sumScore.divide(voteEmp.getVoteNum(), 4, RoundingMode.HALF_UP));
voteEmp.setEndScore(voteEmp.getAvgScore());
voteEmp.setVersion(oldvoteEmp.getVersion());
int result = khVoteEmpMapper.updateKhVoteEmp(voteEmp);
/*if (result > 0) {
break;
} else {
// 更新失败,版本冲突,增加重试计数
retryCount++;
if (retryCount > 3) {
throw new RuntimeException("重试次数过多被中断-------------");
}
System.out.println("-----------版本冲突," + voteEmp.getBkhdxName() + "第" + retryCount + "次重试");
// 等待一段时间后重试,避免立即重试导致的持续冲突
try {
Thread.sleep(1000 * retryCount); // 重试间隔递增
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new RuntimeException("重试过程异常中断-------------", e);
}
}
}*/
}
}
//存储投票记录 //存储投票记录
recard.setVoteTime(nowDate);
if (typeid.equals(1L)) {//选项评分
recard.setVoteDetails(JSON.toJSONString(xuanxiangDetails)); recard.setVoteDetails(JSON.toJSONString(xuanxiangDetails));
} else { } else {//占比评分 或 单独评分
for (KhVoteEmp voteEmp : voteEmpList) { for (int i = 0; i < voteEmpList.size(); i++) {
//xuanxiangDetails.put(voteEmp.getBkhdxId().toString(), voteEmp.getBkhdxName()+":"+voteEmp.getScore()); voteEmpList.get(i).setKhitemTypeid(typeid);
pingFenDetails.put(voteEmp.getBkhdxName()/*+voteEmp.getBkhdxId()*/, voteEmp.getScore()); voteEmpList.get(i).setUpdateTime(nowDate);
recard.setVoteDetails(JSON.toJSONString(pingFenDetails)); pingFenDetails.put(voteEmpList.get(i).getBkhdxName(), voteEmpList.get(i).getScore());
} }
/*List<String> details = voteEmpList.stream() //存储投票记录
.map(emp -> emp.getBkhdxName() + " : " + emp.getScore()) recard.setVoteDetails(JSON.toJSONString(pingFenDetails));
.collect(Collectors.toList());
recard.setVoteDetails(JSON.toJSONString(details));*/
} }
//批量修改评分数据
khVoteEmpMapper.batchUpdateVoteScore(voteEmpList);
khVoteRecardMapper.insertKhVoteRecard(recard); khVoteRecardMapper.insertKhVoteRecard(recard);
return AjaxResult.success(); return AjaxResult.success();
} }

@ -5,52 +5,74 @@
<mapper namespace="com.ruoyi.kaohe.mapper.KhVoteEmpMapper"> <mapper namespace="com.ruoyi.kaohe.mapper.KhVoteEmpMapper">
<resultMap type="KhVoteEmp" id="KhVoteEmpResult"> <resultMap type="KhVoteEmp" id="KhVoteEmpResult">
<result property="id" column="id" /> <result property="id" column="id"/>
<result property="khitemTypeid" column="khitem_typeId" /> <result property="khitemTypeid" column="khitem_typeId"/>
<result property="voteId" column="vote_id" /> <result property="voteId" column="vote_id"/>
<result property="voteTitle" column="vote_title" /> <result property="voteTitle" column="vote_title"/>
<result property="bkhdxId" column="bkhdx_id" /> <result property="bkhdxId" column="bkhdx_id"/>
<result property="bkhdxName" column="bkhdx_name" /> <result property="bkhdxName" column="bkhdx_name"/>
<result property="content" column="content" /> <result property="content" column="content"/>
<result property="voteNum" column="vote_num" /> <result property="voteNum" column="vote_num"/>
<result property="optionA" column="option_a" /> <result property="optionA" column="option_a"/>
<result property="optionB" column="option_b" /> <result property="optionB" column="option_b"/>
<result property="optionC" column="option_c" /> <result property="optionC" column="option_c"/>
<result property="optionD" column="option_d" /> <result property="optionD" column="option_d"/>
<result property="voteScore" column="vote_score" /> <result property="voteScore" column="vote_score"/>
<result property="avgScore" column="avg_score" /> <result property="avgScore" column="avg_score"/>
<result property="percentage" column="percentage" /> <result property="percentage" column="percentage"/>
<result property="endScore" column="end_score" /> <result property="endScore" column="end_score"/>
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by"/>
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time" /> <result property="updateTime" column="update_time"/>
<result property="remark" column="remark" /> <result property="remark" column="remark"/>
<result property="version" column="version" /> <result property="version" column="version"/>
</resultMap> </resultMap>
<sql id="selectKhVoteEmpVo"> <sql id="selectKhVoteEmpVo">
select id, khitem_typeId, vote_id, vote_title, bkhdx_id, bkhdx_name, content, vote_num,option_a, option_b, option_c, option_d, vote_score, avg_score, percentage, end_score, create_by, create_time, update_by, update_time, remark, version from kh_vote_emp select id,
khitem_typeId,
vote_id,
vote_title,
bkhdx_id,
bkhdx_name,
content,
vote_num,
option_a,
option_b,
option_c,
option_d,
vote_score,
avg_score,
percentage,
end_score,
create_by,
create_time,
update_by,
update_time,
remark,
version
from kh_vote_emp
</sql> </sql>
<select id="selectKhVoteEmpList" parameterType="KhVoteEmp" resultMap="KhVoteEmpResult"> <select id="selectKhVoteEmpList" parameterType="KhVoteEmp" resultMap="KhVoteEmpResult">
<include refid="selectKhVoteEmpVo"/> <include refid="selectKhVoteEmpVo"/>
<where> <where>
<if test="khitemTypeid != null "> and khitem_typeId = #{khitemTypeid}</if> <if test="khitemTypeid != null ">and khitem_typeId = #{khitemTypeid}</if>
<if test="voteId != null "> and vote_id = #{voteId}</if> <if test="voteId != null ">and vote_id = #{voteId}</if>
<if test="voteTitle != null and voteTitle != ''"> and vote_title = #{voteTitle}</if> <if test="voteTitle != null and voteTitle != ''">and vote_title = #{voteTitle}</if>
<if test="bkhdxId != null "> and bkhdx_id = #{bkhdxId}</if> <if test="bkhdxId != null ">and bkhdx_id = #{bkhdxId}</if>
<if test="bkhdxName != null and bkhdxName != ''"> and bkhdx_name like concat('%', #{bkhdxName}, '%')</if> <if test="bkhdxName != null and bkhdxName != ''">and bkhdx_name like concat('%', #{bkhdxName}, '%')</if>
<if test="content != null and content != ''"> and content = #{content}</if> <if test="content != null and content != ''">and content = #{content}</if>
<if test="voteNum != null "> and vote_num = #{voteNum}</if> <if test="voteNum != null ">and vote_num = #{voteNum}</if>
<if test="optionA != null "> and option_a = #{optionA}</if> <if test="optionA != null ">and option_a = #{optionA}</if>
<if test="optionB != null "> and option_b = #{optionB}</if> <if test="optionB != null ">and option_b = #{optionB}</if>
<if test="optionC != null "> and option_c = #{optionC}</if> <if test="optionC != null ">and option_c = #{optionC}</if>
<if test="optionD != null "> and option_d = #{optionD}</if> <if test="optionD != null ">and option_d = #{optionD}</if>
<if test="voteScore != null "> and vote_score = #{voteScore}</if> <if test="voteScore != null ">and vote_score = #{voteScore}</if>
<if test="avgScore != null "> and avg_score = #{avgScore}</if> <if test="avgScore != null ">and avg_score = #{avgScore}</if>
<if test="percentage != null "> and percentage = #{percentage}</if> <if test="percentage != null ">and percentage = #{percentage}</if>
<if test="endScore != null "> and end_score = #{endScore}</if> <if test="endScore != null ">and end_score = #{endScore}</if>
<!--<if test="version != null "> and version = #{version}</if>--> <!--<if test="version != null "> and version = #{version}</if>-->
</where> </where>
</select> </select>
@ -58,7 +80,7 @@
<select id="selectVoteEmpsByVoteId" parameterType="KhVoteEmp" resultMap="KhVoteEmpResult"> <select id="selectVoteEmpsByVoteId" parameterType="KhVoteEmp" resultMap="KhVoteEmpResult">
select id, khitem_typeId, vote_id, bkhdx_id, bkhdx_name from kh_vote_emp select id, khitem_typeId, vote_id, bkhdx_id, bkhdx_name from kh_vote_emp
<where> <where>
<if test="voteId != null "> and vote_id = #{voteId}</if> <if test="voteId != null ">and vote_id = #{voteId}</if>
</where> </where>
</select> </select>
@ -146,8 +168,48 @@
WHERE id = #{id} WHERE id = #{id}
</update> </update>
<!-- 批量——统计数据 -->
<update id="updateKhVoteEmp1" parameterType="java.util.List">
<foreach collection="list" item="item" separator=";">
UPDATE kh_vote_emp
<trim prefix="SET" suffixOverrides=",">
<if test="item.avgScore != null">avg_score = #{item.avgScore},</if>
<if test="item.endScore != null">end_score = #{item.endScore},</if>
</trim>
WHERE
id = #{item.id}
</foreach>
</update>
<update id="batchUpdateVoteScore" parameterType="java.util.List">
<foreach collection="list" item="item" separator=";">
UPDATE kh_vote_emp
<trim prefix="SET" suffixOverrides=",">
vote_num = vote_num + 1,
<choose>
<when test="item.khitemTypeid != null and item.khitemTypeid eq 1">
option_a = option_a + #{item.optionA},
option_b = option_b + #{item.optionB},
option_c = option_c + #{item.optionC},
option_d = option_d + #{item.optionD},
</when>
<otherwise>
vote_score = vote_score + #{item.score},
</otherwise>
</choose>
update_time = #{item.updateTime},
version = version + 1
</trim>
WHERE
id = #{item.id}
<!--AND version = #{item.version}-->
</foreach>
</update>
<delete id="deleteKhVoteEmpById" parameterType="Long"> <delete id="deleteKhVoteEmpById" parameterType="Long">
delete from kh_vote_emp where id = #{id} delete
from kh_vote_emp
where id = #{id}
</delete> </delete>
<delete id="deleteKhVoteEmpByIds" parameterType="String"> <delete id="deleteKhVoteEmpByIds" parameterType="String">

@ -22,6 +22,7 @@
<result property="percentage" column="percentage" /> <result property="percentage" column="percentage" />
<result property="state" column="state" /> <result property="state" column="state" />
<result property="samePercent" column="same_percent" /> <result property="samePercent" column="same_percent" />
<result property="statistical" column="statistical" />
<result property="createBy" column="create_by" /> <result property="createBy" column="create_by" />
<result property="createTime" column="create_time" /> <result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" /> <result property="updateBy" column="update_by" />
@ -30,7 +31,7 @@
</resultMap> </resultMap>
<sql id="selectKhVoteVo"> <sql id="selectKhVoteVo">
select id, pingce_id, pingce_name,bkhdx_type, khitem_id, khitem_name, khitem_typeId, vote_items, vote_title, v_description, s_time, e_time, max_num, umax, percentage, `state`,same_percent, create_by, create_time, update_by, update_time, remark from kh_vote select id, pingce_id, pingce_name,bkhdx_type, khitem_id, khitem_name, khitem_typeId, vote_items, vote_title, v_description, s_time, e_time, max_num, umax, percentage, `state`,same_percent,statistical, create_by, create_time, update_by, update_time, remark from kh_vote
</sql> </sql>
<select id="selectKhVoteList" parameterType="KhVote" resultMap="KhVoteResult"> <select id="selectKhVoteList" parameterType="KhVote" resultMap="KhVoteResult">
@ -114,6 +115,7 @@
<if test="percentage != null">percentage,</if> <if test="percentage != null">percentage,</if>
<if test="state != null">state,</if> <if test="state != null">state,</if>
<if test="samePercent != null">same_percent,</if> <if test="samePercent != null">same_percent,</if>
<if test="statistical != null and statistical != ''">statistical,</if>
<if test="createBy != null">create_by,</if> <if test="createBy != null">create_by,</if>
<if test="createTime != null">create_time,</if> <if test="createTime != null">create_time,</if>
<if test="updateBy != null">update_by,</if> <if test="updateBy != null">update_by,</if>
@ -136,6 +138,7 @@
<if test="percentage != null">#{percentage},</if> <if test="percentage != null">#{percentage},</if>
<if test="state != null">#{state},</if> <if test="state != null">#{state},</if>
<if test="samePercent != null">#{samePercent},</if> <if test="samePercent != null">#{samePercent},</if>
<if test="statistical != null and statistical != ''">#{statistical},</if>
<if test="createBy != null">#{createBy},</if> <if test="createBy != null">#{createBy},</if>
<if test="createTime != null">#{createTime},</if> <if test="createTime != null">#{createTime},</if>
<if test="updateBy != null">#{updateBy},</if> <if test="updateBy != null">#{updateBy},</if>
@ -162,6 +165,7 @@
<if test="percentage != null">percentage = #{percentage},</if> <if test="percentage != null">percentage = #{percentage},</if>
<if test="state != null">state = #{state},</if> <if test="state != null">state = #{state},</if>
<if test="samePercent != null">same_percent = #{samePercent},</if> <if test="samePercent != null">same_percent = #{samePercent},</if>
<if test="statistical != null and statistical != ''">statistical = #{statistical},</if>
<if test="createBy != null">create_by = #{createBy},</if> <if test="createBy != null">create_by = #{createBy},</if>
<if test="createTime != null">create_time = #{createTime},</if> <if test="createTime != null">create_time = #{createTime},</if>
<if test="updateBy != null">update_by = #{updateBy},</if> <if test="updateBy != null">update_by = #{updateBy},</if>

Loading…
Cancel
Save