package com.dsh.guns.modular.system.controller.general; import cn.hutool.crypto.SecureUtil; import com.dsh.course.feignClient.activity.CompanyClient; import com.dsh.course.feignClient.activity.TUserClinet; import com.dsh.course.feignClient.activity.model.*; import com.dsh.guns.config.UserExt; import com.dsh.guns.core.base.controller.BaseController; import com.dsh.guns.core.base.tips.ErrorTip; import com.dsh.guns.core.support.HttpKit; import com.dsh.guns.core.util.SinataUtil; import com.dsh.guns.modular.system.model.TPopularizeCode; import com.dsh.guns.modular.system.model.TUser; import com.dsh.guns.modular.system.service.TPopularizeCodeService; import com.dsh.guns.modular.system.util.ExcelExportUtil; import com.dsh.guns.modular.system.util.HttpRequestUtil; import com.dsh.guns.modular.system.util.PushURL; import org.apache.commons.lang.time.DateUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import com.dsh.guns.modular.system.util.DateUtil; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.*; import com.dsh.guns.core.util.WoUtil; /** * 用户管理控制器 * * @author fengshuonan * @Date 2020-06-01 15:47:58 */ @Controller @RequestMapping("/tUser") public class TUserController extends BaseController { private String PREFIX = "/system/tUser/"; @Autowired private TUserClinet tUserClinet; @Autowired private CompanyClient companyClient; /** * 跳转到用户管理首页 */ @RequestMapping("") public String index(Model model) { Integer language = UserExt.getLanguage(); model.addAttribute("language",language); return PREFIX + "tUser.html"; } /** * 跳转到修改用户管理 */ @RequestMapping("/tUser_userDetail/{tUserId}") public String tUser_userDetail(@PathVariable Integer tUserId, Model model) { Map tUser = tUserClinet.getUserDetailById(tUserId); tUser.put("insertTimeStr",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(Long.valueOf(tUser.get("insertTimeStr").toString())))); model.addAttribute("item",tUser); model.addAttribute("language",UserExt.getLanguage()); return PREFIX + "tUser_userDetail.html"; } /** * 跳转到修改用户余额页面 */ @RequestMapping("/tUser_updateBalance/{tUserId}") public String tUser_updateBalance(@PathVariable Integer tUserId, Model model) { model.addAttribute("tUserId",tUserId); model.addAttribute("language",UserExt.getLanguage()); return PREFIX + "tUser_updateBalance.html"; } /** * 跳转到修改用户密码页面 */ @RequestMapping("/tUser_updatePassword/{tUserId}") public String tUser_updatePassword(@PathVariable Integer tUserId, Model model) { model.addAttribute("tUserId",tUserId); return PREFIX + "tUser_updatePassword.html"; } /** * 跳转到修改用户状态页面 */ @RequestMapping("/tUser_optUser/{tUserId}/{optType}") public String tUser_optUser(@PathVariable Integer tUserId,@PathVariable Integer optType, Model model) { model.addAttribute("tUserId",tUserId); model.addAttribute("optType",optType); model.addAttribute("language",UserExt.getLanguage()); return PREFIX + "tUser_optUser.html"; } /** * 获取用户管理列表 */ @RequestMapping(value = "/list") @ResponseBody public Object list(String insertTime, String id, String nickName, String phone, Integer isAuth, Integer state,String companyName,Integer code) { String beginTime = null; String endTime = null; if (SinataUtil.isNotEmpty(insertTime)){ String[] timeArray = insertTime.split(" - "); beginTime = timeArray[0]; endTime = timeArray[1]; } HttpServletRequest request = HttpKit.getRequest(); int limit = Integer.valueOf(request.getParameter("limit")); //每页多少条数据 int offset = Integer.valueOf(request.getParameter("offset")); return super.packForBT(tUserClinet.getUserList(new QueryUserListReq(limit,offset,beginTime,endTime, UserExt.getUser().getRoleType(),UserExt.getUser().getObjectId(),isAuth,state,id,nickName,phone,companyName,code))); } /** * 修改余额操作 */ @RequestMapping(value = "/updateBalance") @ResponseBody public Object updateBalance(@RequestParam Integer tUserId, @RequestParam Integer updateType, @RequestParam BigDecimal money) { // TUser tUser = tUserService.selectById(tUserId); TUser tUser = tUserClinet.queryById(tUserId); if (SinataUtil.isNotEmpty(tUser)){ if (1 == updateType.intValue()){ //增加 tUser.setBalance(tUser.getBalance().add(money)); }else if (2 == updateType.intValue()){ //减少 if((tUser.getBalance().subtract(money)).compareTo(new BigDecimal(0)) == -1){ tUser.setBalance(new BigDecimal(0)); }else{ tUser.setBalance(tUser.getBalance().subtract(money)); } } tUser.setUpdateTime(new Date()); // tUser.setUpdateUser(ShiroKit.getUser().getId()); tUserClinet.updateById(tUser); } return SUCCESS_TIP; } /** * 修改密码操作 */ @RequestMapping(value = "/updatePassword") @ResponseBody public Object updatePassword(@RequestParam Integer tUserId, @RequestParam String password) { TUser tUser = tUserClinet.queryById(tUserId); if (SinataUtil.isNotEmpty(tUser)){ // tUser.setPassWord(MD5Util.encrypt(password)); tUser.setPassWord(SecureUtil.md5(password)); tUser.setUpdateTime(new Date()); // tUser.setUpdateUser(ShiroKit.getUser().getId()); tUserClinet.updateById(tUser); } return SUCCESS_TIP; } /** * 操作用户 */ @RequestMapping(value = "/optUser") @ResponseBody public Object optUser(@RequestParam Integer tUserId,@RequestParam Integer optType,@RequestParam String remark) { TUser tUser = tUserClinet.queryById(tUserId); if (SinataUtil.isNotEmpty(tUser)){ if (1 == optType.intValue()){ //冻结 tUser.setState(2); tUser.setRemark(remark); //增加推送 Map map = new HashMap<>(); map.put("uid", tUser.getId().toString()); String result = HttpRequestUtil.postRequest(PushURL.freeze_user_url, map); System.out.println("冻结用户:【userId="+tUser.getId().toString()+"】,调用接口:"+result); }else if (2 == optType.intValue()){ //解冻 tUser.setState(1); tUser.setRemark(remark); } tUser.setUpdateTime(new Date()); // tUser.setUpdateUser(ShiroKit.getUser().getId()); tUserClinet.updateById(tUser); } return SUCCESS_TIP; } /** * 下载模板 * @param request * @param response */ @RequestMapping(value = "/uploadUserModel") public void uploadUserModel(HttpServletRequest request, HttpServletResponse response) { // 表格数据【封装】 List> dataList = new ArrayList>(); // 首行【封装】 List shellList = new ArrayList(); shellList.add("昵称"); shellList.add("手机号"); shellList.add("生日[例如:1995-09-09]"); shellList.add("性别[男/女]"); shellList.add("紧急联系人[选填]"); shellList.add("紧急联系电话[选填]"); shellList.add("是否实名认证[是/否]"); shellList.add("真实姓名"); shellList.add("身份证号"); shellList.add("余额"); shellList.add("密码[6-18个长度]"); dataList.add(shellList); try { // 调用工具类进行导出 ExcelExportUtil.easySheet("平台导入用户模板"+ DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "平台导入用户模板", dataList, request, response); } catch (Exception e) { e.printStackTrace(); } } /** * 导入操作 * @param request * @return */ @RequestMapping(value="/exportUser",method = RequestMethod.POST) @ResponseBody public Object exportUser(HttpServletRequest request){ MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile file = (MultipartFile) multipartRequest.getFile("myfile"); try { //定时五秒后执行 /*Map maps=new HashMap<>(); Workbook book = WoUtil.ImportFile(file); maps.put("book",book); QuartzManager.addJob(AddContract.class, (AddContract.name+new Date().getTime()).toUpperCase(), TimeJobType.ADMIN,DateUtil.getDate_strYMdHms(new Date().getTime() + 1*1000) , maps);*/ Workbook book = WoUtil.ImportFile(file); Sheet sh = book.getSheetAt(0); //获取到第一个表 for (int i = 1; i <= sh.getLastRowNum(); i++) { Row row = sh.getRow(i); Cell cell0 = row.getCell(0); //昵称 String nickName = null; if (SinataUtil.isNotEmpty(cell0)){ nickName = String.valueOf(cell0.getStringCellValue()).trim(); } Cell cell1 = row.getCell(1); //手机号 String phone = null; if (SinataUtil.isNotEmpty(cell1)){ phone = String.valueOf(cell1.getStringCellValue()).trim(); } Cell cell2 = row.getCell(2); //生日[例如:1995-09-09] String birthday = null; if (SinataUtil.isNotEmpty(cell2)){ birthday = String.valueOf(cell2.getStringCellValue()).trim(); } Cell cell3 = row.getCell(3); //性别[男/女] String sex = null; if (SinataUtil.isNotEmpty(cell3)){ sex = String.valueOf(cell3.getStringCellValue()).trim(); } Cell cell4 = row.getCell(4); //紧急联系人[选填] String emergencyContact = null; if (SinataUtil.isNotEmpty(cell4)){ emergencyContact = String.valueOf(cell4.getStringCellValue()).trim(); } Cell cell5 = row.getCell(5); //紧急联系电话[选填] String emergencyContactNumber = null; if (SinataUtil.isNotEmpty(cell5)){ emergencyContactNumber = String.valueOf(cell5.getStringCellValue()).trim(); } Cell cell6 = row.getCell(6); //是否实名认证[是/否] String isAuth = null; if (SinataUtil.isNotEmpty(cell6)){ isAuth = String.valueOf(cell6.getStringCellValue()).trim(); } Cell cell7 = row.getCell(7); //真实姓名 String name = null; if (SinataUtil.isNotEmpty(cell7)){ name = String.valueOf(cell7.getStringCellValue()).trim(); } Cell cell8 = row.getCell(8); //身份证号 String idCard = null; if (SinataUtil.isNotEmpty(cell8)){ idCard = String.valueOf(cell8.getStringCellValue()).trim(); } Cell cell9 = row.getCell(9); //余额 String balance = null; if (SinataUtil.isNotEmpty(cell9)){ balance = String.valueOf(cell9.getStringCellValue()).trim(); } Cell cell10 = row.getCell(10); //密码 String passWord = null; if (SinataUtil.isNotEmpty(cell10)){ passWord = String.valueOf(cell10.getStringCellValue()).trim(); } if (SinataUtil.isEmpty(nickName) || SinataUtil.isEmpty(phone) || SinataUtil.isEmpty(birthday) || SinataUtil.isEmpty(sex) || SinataUtil.isEmpty(isAuth) || SinataUtil.isEmpty(balance) || SinataUtil.isEmpty(passWord) ){ return new ErrorTip(500, "单元格不能为空"); }else{ int count = tUserClinet.selectCountByPhone(new TUserReq(phone,3)); if (count > 0){ return new ErrorTip(500, "手机号已存在,请重新填写"); } //判断性别 if (!sex.equals("男") && !sex.equals("女")){ return new ErrorTip(500, "性别内容不正确"); } //判断是否实名认证 if (!isAuth.equals("是") && !isAuth.equals("否")){ return new ErrorTip(500, "是否实名认证内容不正确"); } if ("是".equals(isAuth)){ //判断紧急联系电话 if (SinataUtil.isNotEmpty(emergencyContactNumber)){ if (!isPhone(emergencyContactNumber)){ return new ErrorTip(500, "紧急联系电话格式不正确"); } } } //判断生日格式 try { if (!isValidDate(birthday)) { birthday = importByExcelForDate(birthday); } }catch (Exception e){ return new ErrorTip(500, "年检到期时间格式不正确"); } //判断手机号 if (!isPhone(phone)){ return new ErrorTip(500, "手机号格式不正确"); } //判断余额 if (!isDouble(balance)){ return new ErrorTip(500, "余额格式不正确"); } //判断登录密码 if (!isPassword(passWord)){ return new ErrorTip(500, "登录密码格式不正确"); } TUser user = new TUser(); CompanyInfoRes company = companyClient.queryByStateAndFlgGetOne(new CompanyQueryStateAndFlgReq(1, 3)); // TCompany company = itCompanyService.selectOne(new EntityWrapper().eq("type", 1).notIn("flag", 3).last(" limit 1")); user.setCompanyId(company.getId()); user.setPhone(phone); user.setNickName(nickName); user.setBirthday(DateUtil.parseDate(birthday)); if (sex.equals("男")){ user.setSex(1); }else if (sex.equals("女")){ user.setSex(2); } user.setEmergencyContact(emergencyContact); user.setEmergencyContactNumber(emergencyContactNumber); if ("是".equals(isAuth)){ user.setIsAuth(2); }else if ("否".equals(isAuth)){ user.setIsAuth(1); } user.setName(name); user.setIdCard(idCard); user.setBalance(new BigDecimal(balance)); // user.setPassWord(ShiroKit.md5(passWord, "&a.s")); user.setState(1); user.setFlag("1"); user.setInsertTime(new Date()); // user.setInsertUser(ShiroKit.getUser().getId()); tUserClinet.save(user); } } } catch (Exception e) { e.printStackTrace(); } return SUCCESS_TIP; } /** * 判断日期是否满足yyyy-MM-dd格式 * @param str * @return */ public static boolean isValidDate(String str) { boolean convertSuccess=true; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); try { format.setLenient(false); format.parse(str); } catch (Exception e) { convertSuccess=false; } return convertSuccess; } /** * 转换日期 * @return */ public static String importByExcelForDate(String value) {//value就是它的天数 String currentCellValue = ""; if(value != null && !value.equals("")){ Calendar calendar = new GregorianCalendar(1900,0,-1); Date d = calendar.getTime(); Date dd = DateUtils.addDays(d,Integer.valueOf(value)); DateFormat formater = new SimpleDateFormat("yyyy-MM-dd"); currentCellValue = formater.format(dd); } return currentCellValue; } /** * 验证手机号格式是否正确 * @param str * @return */ public static boolean isPhone(String str) { try{ String reg = "^1\\d{10}$"; boolean flag = str.matches(reg); return flag; }catch(NumberFormatException e) { System.out.println("异常:\"" + str + "\"..."); return false; } } /** * 验证密码长度是否正确 * @param str * @return */ public static boolean isPassword(String str) { try{ String reg = "^.{6,18}$"; boolean flag = str.matches(reg); return flag; }catch(NumberFormatException e) { System.out.println("异常:\"" + str + "\"..."); return false; } } /** * 验证是否可以字符转为金额值 * @param str * @return */ public static boolean isDouble(String str) { try{ Double.parseDouble(str); return true; }catch(NumberFormatException e) { System.out.println("异常:\"" + str + "\"不是数字/整数/小数..."); return false; } } @Resource private TPopularizeCodeService tPopularizeCodeService; @RequestMapping(value = "/getCode") @ResponseBody public void getCode(@RequestParam Integer num, @RequestParam String time,HttpServletRequest request, HttpServletResponse response) { Set listMap = getFourCode(num); // 表格数据【封装】 List> dataList = new ArrayList<>(); //第一行显示【封装】 List twoList = new ArrayList(); // 列【封装】 List shellList = new ArrayList(); shellList.add("Code"); dataList.add(shellList); for (Integer object : listMap){ // 详细数据列【封装】 shellList = new ArrayList(); shellList.add(String.valueOf(object)); dataList.add(shellList); } try { // 调用工具类进行导出 ExcelExportUtil.easySheet("Code Table"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "Code Table", dataList,request, response); ArrayList tPopularizeCodes = new ArrayList<>(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Date parse = dateFormat.parse(time); listMap.forEach(e->{ TPopularizeCode tPopularizeCode = new TPopularizeCode(); tPopularizeCode.setCode(e); tPopularizeCode.setExpire(parse); tPopularizeCodes.add(tPopularizeCode); }); tPopularizeCodeService.saveBatch(tPopularizeCodes); } catch (Exception e) { e.printStackTrace(); } } private Set getFourCode(Integer num){ Set set = new HashSet<>(); Random random = new Random(); int min = 1000; // 最小值为1000 int max = 9999; // 最大值为9999 while (set.size() < num) { int randomNumber = random.nextInt(max - min + 1) + min; set.add(randomNumber); } return set; } /** * 导出用户信息 */ @RequestMapping(value = "/outUser") public void outUser(HttpServletRequest request, HttpServletResponse response,String insertTime, String id, String nickName, String phone, Integer isAuth, Integer state,String companyName,Integer code) { // List> listMap = tUserClinet.getUserListNoPage(new TUserOutUser(UserExt.getUser().getRoleType(),UserExt.getUser().getId())); String beginTime = null; String endTime = null; if (SinataUtil.isNotEmpty(insertTime)){ String[] timeArray = insertTime.split(" - "); beginTime = timeArray[0]; endTime = timeArray[1]; } List> listMap = tUserClinet.getUserList1(new QueryUserListReq(0, 0, beginTime, endTime, UserExt.getUser().getRoleType(), UserExt.getUser().getObjectId(), isAuth, state, id, nickName, phone, companyName, code)); Integer language = UserExt.getLanguage(); // 表格数据【封装】 List> dataList = new ArrayList<>(); //第一行显示【封装】 List twoList = new ArrayList(); twoList.add("All:"); twoList.add(String.valueOf(listMap.size())+"条"); dataList.add(twoList); // 列【封装】 List shellList = new ArrayList(); if(language==1){ shellList.add("注册时间"); shellList.add("用户ID"); shellList.add("注册地所属分公司"); shellList.add("昵称"); shellList.add("手机号"); shellList.add("紧急联系人姓名"); shellList.add("紧急联系人电话"); shellList.add("是否实名认证"); shellList.add("历史出行次数"); shellList.add("历史消费"); shellList.add("积分"); shellList.add("用户等级"); shellList.add("推广码"); shellList.add("备注"); shellList.add("状态"); }else if(language==2){ shellList.add("Registration date"); shellList.add("User ID"); shellList.add("Branch company of the place of registration"); shellList.add("Nickname"); shellList.add("Phone"); shellList.add("Emergency contact name"); shellList.add("Emergency contact number"); shellList.add("Whether real-name authentication"); shellList.add("Historical number of trips"); shellList.add("Historical consumption"); shellList.add("Integral"); shellList.add("Level"); shellList.add("Extension code"); shellList.add("Remark"); shellList.add("State"); }else { shellList.add("Tanggal pendaftaran"); shellList.add("ID Pengguna"); shellList.add("Perusahaan Branch tempat pendaftaran"); shellList.add("Nama"); shellList.add("Telepon"); shellList.add("Nama kontak darurat"); shellList.add("Nomor kontak darurat"); shellList.add("Apakah autentikasi nama asli"); shellList.add("Jumlah perjalanan sejarah"); shellList.add("Konsum sejarah"); shellList.add("Integral"); shellList.add("Tingkat"); shellList.add("Kode ekstensi"); shellList.add("Perhatian"); shellList.add("Status"); } dataList.add(shellList); for (Map object : listMap){ // 详细数据列【封装】 shellList = new ArrayList(); if(SinataUtil.isNotEmpty(object.get("insertTime"))){ Object insertTime1 = object.get("insertTime"); String date = DateUtil.getDate((Long) insertTime1); shellList.add(DateUtil.formatDate(DateUtil.parse(date,"YYYY-MM-dd"), "YYYY-MM-dd")); }else{ shellList.add("-"); } shellList.add(String.valueOf(object.get("id"))); if(SinataUtil.isNotEmpty(object.get("companyName"))){ shellList.add(object.get("companyName").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("nickName"))){ shellList.add(object.get("nickName").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("phone"))){ shellList.add(object.get("phone").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("emergencyContact"))){ shellList.add(object.get("emergencyContact").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("emergencyContactNumber"))){ shellList.add(object.get("emergencyContactNumber").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("isAuth"))){ if(language==1){ shellList.add(object.get("isAuth").toString().equals("是")?"是":"否"); }else if(language==2){ shellList.add(object.get("isAuth").toString().equals("Yes")?"Yes":"No"); }else { shellList.add(object.get("isAuth").toString().equals("Ya")?"Ya":"Tidak"); } }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("historyNum"))){ shellList.add(object.get("historyNum").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("consumption"))){ shellList.add(object.get("consumption").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("integral"))){ shellList.add(object.get("integral").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("level"))){ shellList.add(object.get("level").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("code"))){ shellList.add(object.get("code").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("remark"))){ shellList.add(object.get("remark").toString()); }else{ shellList.add("-"); } if(SinataUtil.isNotEmpty(object.get("state"))){ if(language==1){ shellList.add(Integer.valueOf(object.get("state").toString()) == 1?"正常":"冻结"); }else if(language==2){ shellList.add(Integer.valueOf(object.get("state").toString()) == 1?"Normal":"Freeze"); }else { shellList.add(Integer.valueOf(object.get("state").toString()) == 1?"Normal":"Berhenti"); } }else{ shellList.add("-"); } dataList.add(shellList); } try { // 调用工具类进行导出 if(language==1){ ExcelExportUtil.easySheet("用户信息导出记录"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "用户信息导出记录", dataList,request, response); }else if(language==2){ ExcelExportUtil.easySheet("用户信息导出记录"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "User information export records", dataList,request, response); }else { ExcelExportUtil.easySheet("用户信息导出记录"+DateUtil.formatDate(new Date(), "YYYYMMddHHmmss"), "Catatan eksport informasi pengguna", dataList,request, response); } } catch (Exception e) { e.printStackTrace(); } } }