package com.ots.project.exam.controller;
|
import com.ots.common.constant.UserConstants;
|
import com.ots.common.enums.SenderType;
|
import com.ots.common.enums.TestPackageStatusEnum;
|
import com.ots.common.enums.UserTypeEnum;
|
import com.ots.common.utils.MessageUtils;
|
import com.ots.common.utils.StringUtils;
|
import com.ots.common.utils.poi.ExcelUtil;
|
import com.ots.common.utils.security.ShiroUtils;
|
import com.ots.framework.aspectj.lang.annotation.Log;
|
import com.ots.framework.aspectj.lang.enums.BusinessType;
|
import com.ots.framework.config.VueConfig;
|
import com.ots.framework.web.controller.BaseController;
|
import com.ots.framework.web.domain.AjaxResult;
|
import com.ots.framework.web.page.TableDataInfo;
|
import com.ots.project.exam.domain.*;
|
import com.ots.project.exam.dto.SendTask;
|
import com.ots.project.exam.service.*;
|
import com.ots.project.system.user.domain.User;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.i18n.LocaleContextHolder;
|
import org.springframework.stereotype.Controller;
|
import org.springframework.ui.ModelMap;
|
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.multipart.MultipartFile;
|
import java.text.MessageFormat;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
import static com.ots.common.enums.UserTypeEnum.SYS_USER;
|
|
@Controller
|
@RequestMapping("/exam/testMember")
|
@Slf4j
|
public class EntTestMemberController extends BaseController {
|
private String prefix = "exam/testMember";
|
@Autowired
|
private IEntTestMemberService entTestMemberService;
|
@Autowired
|
private IEntTestPackageService entTestPackageService;
|
@Autowired
|
private IEntTestSendtaskService iEntTestSendtaskService;
|
@Autowired
|
private ISysUserExtendService sysUserExtendService;
|
@Autowired
|
private ITExamPaperService itExamPaperService;
|
@Autowired
|
private VueConfig vueConfig;
|
@RequiresPermissions("exam:testMember:view")
|
@GetMapping()
|
public String testMember(ModelMap mmap) {
|
memberParam(null, mmap);
|
return prefix + "/testMember";
|
}
|
@GetMapping("/memberQuery")
|
public String testMemberQuery(String queryType, String queryValue, ModelMap mmap) {
|
memberParam(null, mmap);
|
if (Objects.nonNull(queryType)) {
|
if (Objects.nonNull(queryValue)) {
|
if (Objects.equals("2", queryType)) {
|
mmap.put("memberNameSend", queryValue);
|
} else if (Objects.equals("3", queryType)) {
|
mmap.put("memberEmailSend", queryValue);
|
} else if (Objects.equals("4", queryType)) {
|
mmap.put("memberPhoneSend", queryValue);
|
} else if (Objects.equals("5", queryType)) {
|
mmap.put("tokenSend", queryValue);
|
}
|
}
|
}
|
return prefix + "/testMemberQuery";
|
}
|
@GetMapping("/memberDetailVerify/{testId}")
|
@ResponseBody
|
public AjaxResult memberDetailVerify(@PathVariable Long testId) {
|
EntTestPackage entTestPackage = entTestPackageService.selectEntTestPackageById(testId);
|
TExamPaper tExamPaper = itExamPaperService.selectTExamPaperById(entTestPackage.getProdId());
|
if (Objects.isNull(tExamPaper)) {
|
|
return AjaxResult.error(MessageUtils.message("jsp.exam.member.invalidProductPackage"));
|
}
|
return AjaxResult.success();
|
}
|
|
@GetMapping("/memberDetail/{testId}")
|
public String testMemberDetail(@PathVariable Long testId, ModelMap mmap) {
|
memberParam(testId, mmap);
|
return prefix + "/testMember";
|
}
|
public void memberParam(Long testId, ModelMap mmap) {
|
User sysUser = ShiroUtils.getSysUser();
|
Long userId = sysUser.getUserId();
|
if (Objects.equals(sysUser.getUserType(), UserConstants.SYS_USER)) {
|
userId = null;
|
}
|
EntTestPackage value = new EntTestPackage();
|
if (Objects.nonNull(testId)) {
|
value = entTestPackageService.selectEntTestPackageById(testId);
|
}
|
mmap.put("testpkg", value);
|
mmap.put("packageTestId", testId);
|
mmap.put("packageTestName", value.getTestName());
|
String[] status = {TestPackageStatusEnum.enable.getCode(), TestPackageStatusEnum.pause.getCode(), TestPackageStatusEnum.ending.getCode(), TestPackageStatusEnum.invalid.getCode()};
|
mmap.put("testPackages", entTestPackageService.selectEntTestPackageListByIdAndStatusIn(userId, Arrays.asList(status)));
|
}
|
|
@RequiresPermissions("exam:testMember:list")
|
@PostMapping("/list")
|
@ResponseBody
|
public TableDataInfo list(EntTestMember entTestMember) {
|
startPage();
|
String queryValue = entTestMember.getQueryValue();
|
if (StringUtils.isNotBlank(queryValue)) {
|
String queryType = entTestMember.getQueryType();
|
if (Objects.equals("2", queryType)) {
|
entTestMember.setMemberName(queryValue);
|
} else if (Objects.equals("3", queryType)) {
|
entTestMember.setMemberEmail(queryValue);
|
} else if (Objects.equals("4", queryType)) {
|
entTestMember.setMemberPhone(queryValue);
|
} else if (Objects.equals("5", queryType)) {
|
entTestMember.setToken(queryValue);
|
}
|
}
|
List<EntTestMember> list = entTestMemberService.selectEntTestMemberList(entTestMember);
|
return getDataTable(list);
|
}
|
@PostMapping("/listTopAnswering")
|
@ResponseBody
|
public TableDataInfo listTopAnswering(EntTestMember entTestMember) {
|
startPage();
|
User sysUser = ShiroUtils.getSysUser();
|
if (!SYS_USER.getUserType().equals(sysUser.getUserType())) {
|
entTestMember.setUserId(sysUser.getUserId());
|
}
|
return getDataTable(entTestMemberService.selectEntTestMemberTopList(entTestMember));
|
}
|
@PostMapping("/queryList")
|
@ResponseBody
|
public TableDataInfo queryList(EntTestMember entTestMember) {
|
startPage();
|
User sysUser = ShiroUtils.getSysUser();
|
String userType = sysUser.getUserType();
|
List<Long> userIds = new ArrayList<>();
|
userIds.add(sysUser.getUserId());
|
|
if (UserTypeEnum.DIS_USER.getUserType().equals(userType)) {
|
SysUserExtend sysUserExtend = new SysUserExtend();
|
sysUserExtend.setParentUserId(sysUser.getUserId());
|
List<SysUserExtend> sysUserExtends = sysUserExtendService.selectSysUserExtendList(sysUserExtend);
|
for (int i = 0; i < sysUserExtends.size(); i++) {
|
SysUserExtend extend = sysUserExtends.get(i);
|
userIds.add(extend.getUserId());
|
}
|
}
|
List<EntTestMember> list;
|
if (!SYS_USER.getUserType().equals(userType)) {
|
entTestMember.setUserList(userIds);
|
}
|
list = entTestMemberService.selectEntTestMemberQueryList(entTestMember);
|
return getDataTable(list);
|
}
|
|
@RequiresPermissions("exam:testMember:export")
|
@PostMapping("/export")
|
@ResponseBody
|
public AjaxResult export(EntTestMember entTestMember) {
|
List<EntTestMember> list = entTestMemberService.selectEntTestMemberList(entTestMember);
|
ExcelUtil<EntTestMember> util = new ExcelUtil<EntTestMember>(EntTestMember.class);
|
return util.exportExcel(list, "测试用户链接(Test Taker URLs)");
|
}
|
|
@RequiresPermissions("exam:testMember:export")
|
@PostMapping("/exportLinkTest")
|
@ResponseBody
|
public AjaxResult exportLinkTest(EntTestMember entTestMember) {
|
List<EntTestMember> list = entTestMemberService.selectEntTestMemberList(entTestMember);
|
String url = vueConfig.getUrl();
|
List<EntTestMemberOther> collect = list.stream().map(item -> {
|
String token = item.getToken();
|
String urlNew = MessageFormat.format(url, token);
|
EntTestMemberOther entTestMemberOther = new EntTestMemberOther();
|
entTestMemberOther.setMemberName(item.getMemberName());
|
entTestMemberOther.setTestUrl(urlNew);
|
return entTestMemberOther;
|
}).collect(Collectors.toList());
|
ExcelUtil<EntTestMemberOther> util = new ExcelUtil<>(EntTestMemberOther.class);
|
return util.exportExcel(collect, "测试用户链接(Test Taker URLs)");
|
}
|
|
@RequiresPermissions("exam:testMember:batchimport")
|
@GetMapping("/add/{testId}")
|
public String add(@PathVariable Long testId, ModelMap mmap) {
|
EntTestPackage value = new EntTestPackage();
|
if (Objects.nonNull(testId)) {
|
value = entTestPackageService.selectEntTestPackageById(testId);
|
}
|
mmap.put("testpkg", value);
|
return prefix + "/add";
|
}
|
|
@RequiresPermissions("exam:testMember:add")
|
@Log(title = "批量导入测试人员名单", businessType = BusinessType.INSERT)
|
@PostMapping("/add")
|
@ResponseBody
|
public AjaxResult addSave(EntTestMember entTestMember) {
|
return toAjax(entTestMemberService.insertEntTestMember(entTestMember));
|
}
|
|
@RequiresPermissions("exam:testMember:add")
|
@Log(title = "记录邀请用户发送列表", businessType = BusinessType.INSERT)
|
@PostMapping("/addSendTask")
|
@ResponseBody
|
public AjaxResult addSaveEmail(SendTask sendTask) {
|
return toAjax(iEntTestSendtaskService.insertEntTestSendtaskFromMemberIds(sendTask));
|
}
|
|
@GetMapping("/edit/{memberId}")
|
public String edit(@PathVariable("memberId") Long memberId, ModelMap mmap) {
|
EntTestMember entTestMember = entTestMemberService.selectEntTestMemberById(memberId);
|
mmap.put("entTestMember", entTestMember);
|
return prefix + "/edit";
|
}
|
@GetMapping("/send/sendSms/{memberIds}/{testId}")
|
public String sendSms(@PathVariable("memberIds") String memberIds, @PathVariable("testId") Long testId, ModelMap mmap) {
|
StringBuilder builder = new StringBuilder();
|
builder.append("亲爱的{FullName},").append("\n");
|
builder.append("\n");
|
builder.append("{Company} 邀请您完成一份测试,大概需要20-25分钟时间。您可以直接点击下面的链接开始该测试。如果不能直接访问,请复制地址到浏览器中直接打开。").append("\n");
|
builder.append("\n");
|
builder.append("链接地址是:{url}");
|
builder.append("\n");
|
builder.append("如有疑问,请与客服联系,邮箱是:support@tai-online.com。");
|
builder.append("\n");
|
builder.append("谢谢!").append("\n");
|
builder.append("{Company}");
|
String type = SenderType.sms.getType();
|
processParams(memberIds, testId, mmap, builder.toString(), type);
|
return prefix + "/sendSms";
|
}
|
@GetMapping("/send/sendEmail/{memberIds}/{testId}")
|
public String sendEmail(@PathVariable("memberIds") String memberIds, @PathVariable("testId") Long testId, ModelMap mmap) {
|
|
String langType = LocaleContextHolder.getLocale().toString();
|
StringBuilder builder = new StringBuilder();
|
builder.append("亲爱的{FullName},").append("\n<br>");
|
builder.append("Dear {FullName},").append("\n<br>");
|
builder.append("เรียน {FullName},").append("\n<br>");
|
builder.append("\n<br>");
|
builder.append("{Company} 邀请您完成一份测试,大概需要20-25分钟时间。您可以直接点击下面的链接开始该测试。如果不能直接访问,请复制地址到浏览器中直接打开。").append("\n<br>");
|
builder.append("You've been invited to take an assessment by {Company}, which shall take about 20-25 minutes to complete. Please click the link below, or copy the link to your browser, to begin the assessment.").append("\n<br>");
|
builder.append("คุณได้รับเชิญให้ทำแบบประเมินจาก {Company} กรุณาใช้ลิงค์ด้านล่างเพื่อเริ่มดำเนินการ โดยคุณสามารถคลิกที่ลิงค์ด้านล่างโดยตรง หรือจะคัดลอกแล้วนำลิงค์ไปวางบนเบราว์เซอร์ของคุณก็ได้").append("\n<br>");
|
builder.append("链接地址是:").append("\n<br>");
|
builder.append("The link is:").append("\n<br>");
|
builder.append("ตามลิงค์นี้:").append("\n<br>");
|
builder.append("<a href='{url}' target='_blank'>{url}</a>").append("\n<br>");
|
builder.append("\n<br>");
|
builder.append("如有疑问,请与客服联系,邮箱是:support@tai-online.com。").append("\n<br>");
|
builder.append("Should you have problem assessing the above link, please contact our customer service at support@tai-online.com.").append("\n<br>");
|
builder.append("หากคุณมีปัญหาในการเข้าสู่ลิงค์ข้างต้น โปรดติดต่อฝ่ายบริการลูกค้าของเราที่ support@tai-online.com").append("\n<br>");
|
builder.append("\n<br>");
|
builder.append("\n<br>");
|
builder.append("谢谢!").append("\n<br>");
|
builder.append("All the best,").append("\n<br>");
|
builder.append("ด้วยความเคารพ").append("\n<br>");
|
builder.append("\n<br>");
|
builder.append("{Company}").append("\n<br>");
|
String type = SenderType.email.getType();
|
processParams(memberIds, testId, mmap, builder.toString(), type);
|
return prefix + "/sendEmail";
|
}
|
private void processParams(@PathVariable("memberIds") String memberIds, @PathVariable("testId") Long testId, ModelMap mmap, String defaultTemplate, String type) {
|
mmap.put("memberIds", memberIds);
|
mmap.put("size", memberIds.split(",").length);
|
mmap.put("type", type);
|
EntTestPackage entTestPackage = entTestPackageService.selectEntTestPackageById(testId);
|
String template = entTestPackage.getTemplate();
|
if (Objects.equals(SenderType.sms.getType(), type)) {
|
mmap.put("template", defaultTemplate);
|
} else {
|
mmap.put("template", Objects.isNull(template) ? defaultTemplate : template);
|
}
|
mmap.put("testName", entTestPackage.getTestName() + "邀请邮件");
|
}
|
|
@RequiresPermissions("exam:testMember:edit")
|
@Log(title = "批量导入测试人员名单", businessType = BusinessType.UPDATE)
|
@PostMapping("/edit")
|
@ResponseBody
|
public AjaxResult editSave(EntTestMember entTestMember) {
|
return toAjax(entTestMemberService.updateEntTestMember(entTestMember));
|
}
|
|
@RequiresPermissions("exam:testMember:remove")
|
@Log(title = "批量导入测试人员名单", businessType = BusinessType.DELETE)
|
@PostMapping("/remove")
|
@ResponseBody
|
public AjaxResult remove(String ids) {
|
return toAjax(entTestMemberService.deleteEntTestMemberByIds(ids));
|
}
|
|
|
@PostMapping("/importData/{testId}")
|
@ResponseBody
|
public AjaxResult importData(MultipartFile file, boolean updateSupport, @PathVariable Long testId) throws Exception {
|
ExcelUtil<EntTestMember> util = new ExcelUtil<>(EntTestMember.class);
|
List<EntTestMember> entTestMemberList = util.importExcel(file.getInputStream());
|
for (EntTestMember member : entTestMemberList) {
|
member.setTestId(testId);
|
}
|
String message = entTestMemberService.importEntTestMember(entTestMemberList, updateSupport);
|
return AjaxResult.success(message);
|
}
|
|
@GetMapping("/importTemplate")
|
@ResponseBody
|
public AjaxResult importTemplate() {
|
ExcelUtil<EntTestMember> util = new ExcelUtil<EntTestMember>(EntTestMember.class);
|
return util.importTemplateExcel("测试用户(Test-Takers)");
|
}
|
}
|