| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
1a75d64f3c | fixed 新版本人脸算法 | 1 year ago |
|
|
9e0030d1fb | fix digiman | 2 years ago |
|
|
ecf2536f88 | fix | 2 years ago |
|
|
fd65913a81 | fixed jasypt #问题 | 2 years ago |
|
|
9bbbb73453 | fixed 20230302 | 2 years ago |
|
|
b5bdc34a84 | add gitignore | 3 years ago |
| @@ -1,8 +1,8 @@ | |||
| /hjkjg-web/war/ | |||
| /hjkjg-web/target/ | |||
| target/ | |||
| /hjkjg-web/logs/*.log | |||
| /hjkjg-web/face_img/ | |||
| /hjkjg-web/ThinkFaceBackup/ | |||
| face_img/ | |||
| ThinkFaceBackup/ | |||
| ### STS ### | |||
| .apt_generated | |||
| @@ -44,7 +44,7 @@ | |||
| <span class="required ">*</span> 语言类型:<i class="fa icon-question hide"></i></label> | |||
| <div class="col-sm-8"> | |||
| <input name="oldLangType" type="hidden" value="${lang.langType}"> | |||
| <#form:radio path="langType" dictType="sys_lang_type" class="form-control required " /> | |||
| <#form:radio path="langType" dictType="sys_lang_type" class="form-control required " /> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -12,9 +12,7 @@ | |||
| <version>2.0.6.RELEASE</version> | |||
| </parent> | |||
| <name>黄江科技馆票务系统</name> | |||
| <name>数字人后台管理系统</name> | |||
| <inceptionYear>2022-Now</inceptionYear> | |||
| @@ -295,12 +293,6 @@ | |||
| <artifactId>spring-boot-starter-batch</artifactId> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>org.springframework.boot</groupId> | |||
| <artifactId>spring-boot-devtools</artifactId> | |||
| <scope>runtime</scope> | |||
| <optional>true</optional> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.auth0</groupId> | |||
| @@ -315,6 +307,12 @@ | |||
| <version>3.0.0</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>com.squareup.okhttp3</groupId> | |||
| <artifactId>okhttp</artifactId> | |||
| <version>3.14.9</version> | |||
| </dependency> | |||
| </dependencies> | |||
| @@ -151,6 +151,7 @@ public class Application extends SpringBootServletInitializer implements Command | |||
| @Override | |||
| public void run(String... args) throws Exception { | |||
| deviceServiceSupport.putRedisData(); | |||
| } | |||
| } | |||
| @@ -17,11 +17,18 @@ public class SendMmsProperties { | |||
| private String accessKeySecrect; | |||
| private String endpoint; | |||
| private String signName; | |||
| private String signNameFront; | |||
| private String signNameVisitor; | |||
| private String template; | |||
| private String carTemplate; | |||
| private String fixedTemplate; | |||
| private String codeTemplate; | |||
| private String meetingOrderTemplate; | |||
| private String meetingQuitTemplate; | |||
| private String meetingRemindTemplate; | |||
| private String defaultRemindTemplate; | |||
| private String robotName; | |||
| private String receptionPhones; | |||
| public String getAccessKeyId() { | |||
| return accessKeyId; | |||
| @@ -87,6 +94,46 @@ public class SendMmsProperties { | |||
| this.codeTemplate = codeTemplate; | |||
| } | |||
| public String getSignNameFront() { | |||
| return signNameFront; | |||
| } | |||
| public void setSignNameFront(String signNameFront) { | |||
| this.signNameFront = signNameFront; | |||
| } | |||
| public String getMeetingOrderTemplate() { | |||
| return meetingOrderTemplate; | |||
| } | |||
| public void setMeetingOrderTemplate(String meetingOrderTemplate) { | |||
| this.meetingOrderTemplate = meetingOrderTemplate; | |||
| } | |||
| public String getMeetingQuitTemplate() { | |||
| return meetingQuitTemplate; | |||
| } | |||
| public void setMeetingQuitTemplate(String meetingQuitTemplate) { | |||
| this.meetingQuitTemplate = meetingQuitTemplate; | |||
| } | |||
| public String getMeetingRemindTemplate() { | |||
| return meetingRemindTemplate; | |||
| } | |||
| public void setMeetingRemindTemplate(String meetingRemindTemplate) { | |||
| this.meetingRemindTemplate = meetingRemindTemplate; | |||
| } | |||
| public String getRobotName() { | |||
| return robotName; | |||
| } | |||
| public void setRobotName(String robotName) { | |||
| this.robotName = robotName; | |||
| } | |||
| public String getSignNameVisitor() { | |||
| return signNameVisitor; | |||
| } | |||
| @@ -88,6 +88,8 @@ public class WxMpProperties { | |||
| private String regAuditTemplateId; | |||
| private String url; | |||
| private String meetingTemplateId; | |||
| } | |||
| @Override | |||
| @@ -37,6 +37,7 @@ public class AuditController extends WxBaseController { | |||
| userJson = redisUtils.getUserObject(decodeOpenid); | |||
| } catch (Exception e) { | |||
| model.addAttribute("msg", e.getMessage()); | |||
| model.addAttribute("type", 1); | |||
| return "wx/error"; | |||
| } | |||
| @@ -50,7 +51,7 @@ public class AuditController extends WxBaseController { | |||
| Date startDate = DateUtils.getPushForwardDate(d, 15); | |||
| Date endDate = DateUtils.getPushForwardDate(d, -15); | |||
| if ("employee".equals(userType)) { | |||
| if ("mgr".equals(userType)) { | |||
| list= this.auditRecordsService.findListByEmp(startDate, endDate, empCode); | |||
| regList = this.auditRecordsService.findRegListByEmp(startDate, endDate, empCode); | |||
| } else { | |||
| @@ -565,6 +565,10 @@ public class VisitApiController extends WxBaseController { | |||
| String secretKey = Global.getConfig("shiro.loginSubmit.secretKey"); | |||
| userCode = DesUtils.decode(userCode, secretKey); | |||
| User user = UserUtils.get(userCode); | |||
| if (null == user) { | |||
| return outputError(1, "绑定失败,未找到对应账户!"); | |||
| } | |||
| if (StringUtils.isNotEmpty(user.getWxOpenid())) { | |||
| return outputError(1, "绑定失败,该账号已绑定别的微信号!"); | |||
| } else { | |||
| @@ -579,9 +583,6 @@ public class VisitApiController extends WxBaseController { | |||
| u.setWxOpenid(null); | |||
| this.userService.update(u); | |||
| } | |||
| System.err.println("openid====start"); | |||
| System.err.println(openid); | |||
| System.err.println("openid====end"); | |||
| user.setWxOpenid(openid); | |||
| this.userService.update(user); | |||
| // RedisUtils.setUserVariables(user.getWxOpenid(), user.getUserType().equals("estate")?"1":"0"); | |||
| @@ -204,7 +204,6 @@ public class VisitController extends WxBaseController { | |||
| String errorMsg = ""; | |||
| //TODO 通知公司管理审核 | |||
| User mgr = OfficeEmpUtils.getOfficeMgrUser(emp); | |||
| if (mgr.getLoginCode().equals(loginCode)) {//管理员自己邀请 | |||
| errorMsg = mgrUpdVisitRecord(vr, emp, loginCode); | |||
| @@ -283,7 +282,6 @@ public class VisitController extends WxBaseController { | |||
| VisitRecords vr = this.visitRecordsService.get(visitRecords); | |||
| String errorMsg = ""; | |||
| //TODO 通知公司管理审核 | |||
| User mgr = OfficeEmpUtils.getOfficeMgrUser(emp); | |||
| if (mgr.getLoginCode().equals(loginCode)) {//管理账户本身修改 | |||
| errorMsg = mgrUpdVisitRecord(vr, emp, loginCode); | |||
| @@ -382,6 +380,7 @@ public class VisitController extends WxBaseController { | |||
| userJson = redisUtils.getUserObject(decodeOpenid); | |||
| } catch (Exception e) { | |||
| model.addAttribute("msg", e.getMessage()); | |||
| model.addAttribute("type", 1); | |||
| return "wx/error"; | |||
| } | |||
| @@ -448,6 +447,7 @@ public class VisitController extends WxBaseController { | |||
| userJson = redisUtils.getUserObject(decodeOpenid); | |||
| } catch (Exception e) { | |||
| model.addAttribute("msg", e.getMessage()); | |||
| model.addAttribute("type", 1); | |||
| return "wx/error"; | |||
| } | |||
| @@ -570,13 +570,7 @@ public class VisitController extends WxBaseController { | |||
| System.err.println(officeCodeList); | |||
| System.err.println(officeCodeList.size()); | |||
| //Sec-admin filter | |||
| String loginCode = UserUtils.getUser().getLoginCode(); | |||
| if (BusinessUtils.isSecAdmin(loginCode) ) { | |||
| if (!ObjectUtils.anyNotNull(officeCodeList)) | |||
| officeCodeList = userDataScopeService.getOfficeCodeByUserCode(UserUtils.getUser().getUserCode()); | |||
| if (officeCodeList == null || officeCodeList.size() <= 0) { | |||
| return page; | |||
| } | |||
| if (officeCodeList.size()>0) { | |||
| findEmp.setOfficeCode_in(officeCodeList.toArray(new String[officeCodeList.size()])); | |||
| } | |||
| /*if (!"0".equals(emp.getEmpType())) { | |||
| @@ -4,6 +4,7 @@ import com.jeesite.common.codec.DesUtils; | |||
| import com.jeesite.common.config.Global; | |||
| import com.jeesite.common.lang.ObjectUtils; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.jeesite.common.shiro.authc.FormToken; | |||
| import com.jeesite.common.web.http.ServletUtils; | |||
| import com.jeesite.modules.sys.entity.User; | |||
| import com.jeesite.modules.sys.service.OfficeService; | |||
| @@ -60,57 +61,48 @@ public class WxFrontController extends WxBaseController { | |||
| @RequestMapping(value = "/access-token", method = RequestMethod.GET) | |||
| public void accessToken(@RequestParam("code") String code, @RequestParam(value = "redirect", required = false) String redirect, HttpServletRequest request, HttpServletResponse response) { | |||
| try { | |||
| String baseUrl = Global.getConfig("sys.baseUrl"); | |||
| WxOAuth2AccessToken wot = this.wxService.getOAuth2Service().getAccessToken(code); | |||
| String openid = wot.getOpenId(); | |||
| String secretKey = Global.getConfig("shiro.loginSubmit.secretKey"); | |||
| String encodeStr = DesUtils.encode(openid, secretKey); | |||
| if (StringUtils.isNotEmpty(redirect) && !("null".equals(redirect))) { | |||
| String userType = "0"; | |||
| /*if (StringUtils.isNotEmpty(redirect) && !("null".equals(redirect))) { | |||
| response.sendRedirect(redirect+"/"+encodeStr); | |||
| } else { | |||
| response.sendRedirect(Global.getFrontPath()+"/ticket/topIndex/"+encodeStr); | |||
| } | |||
| }*/ | |||
| // userCode = DesUtils.decode(userCode, secretKey); | |||
| /*User user = this.userDao.findByWxOpenid(openid, userType); | |||
| UserUtils.getSubject().logout(); | |||
| // userCode = DesUtils.decode(userCode, secretKey); | |||
| User user = this.userDao.findByWxOpenid(openid, userType); | |||
| // UserUtils.getSubject().logout(); | |||
| if (ObjectUtils.anyNotNull(user)) {//如果有对应员工 | |||
| // Sess | |||
| *//*String username = user.getLoginCode(); | |||
| FormToken formToken = new FormToken(); | |||
| formToken.setUsername(username); | |||
| formToken.setSsoToken(UserUtils.getSsoToken(username)); | |||
| //formToken.setParams(ServletUtils.getExtParams(request)); | |||
| UserUtils.getSubject().login(formToken); | |||
| String sid = UserUtils.getSession().getId().toString(); | |||
| System.out.println("登录成功,__sid=" + sid);*//* | |||
| String encodeStr = DesUtils.encode(userType+openid, secretKey); | |||
| request.getSession().setAttribute("openId", userType+openid); | |||
| if (StringUtils.isNotEmpty(redirect)) { | |||
| response.sendRedirect(redirect+"/"+encodeStr); | |||
| response.sendRedirect(redirect); | |||
| // ServletUtils.redirectUrl(request, response, redirect); | |||
| } else { | |||
| response.sendRedirect(baseUrl+"/account2/info/"+encodeStr); | |||
| String openidStr = DesUtils.encode(userType+openid,secretKey); | |||
| response.sendRedirect(baseUrl+"/account2/info/"+openidStr); | |||
| // ServletUtils.redirectUrl(request, response, baseUrl+"/account2/info"); | |||
| } | |||
| } else { | |||
| *//*Cookie cookie = new Cookie("type", type); | |||
| Cookie cookie2 = new Cookie("openid", wot.getOpenId()); | |||
| cookie.setPath("/"); | |||
| cookie.setMaxAge(3600); | |||
| response.addCookie(cookie); | |||
| response.addCookie(cookie2);*//* | |||
| openid = DesUtils.encode(openid, secretKey);; | |||
| if ("0".equals(userType)) { | |||
| ServletUtils.redirectUrl(request, response, baseUrl+"/account2/regUser?type="+type+"&openid=" + openid); | |||
| } else { | |||
| ServletUtils.redirectUrl(request, response, baseUrl + "/account2/login?type="+type+"&openid=" + openid); | |||
| } | |||
| ServletUtils.redirectUrl(request, response, baseUrl+"/account2/regUser?type="+userType+"&openid=" + openid); | |||
| } | |||
| */ | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| @@ -0,0 +1,400 @@ | |||
| package com.lecoo.kjg.web.meeting.api; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.jeesite.common.collect.ListUtils; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.jeesite.modules.sys.entity.Office; | |||
| import com.jeesite.modules.sys.entity.User; | |||
| import com.jeesite.modules.sys.service.OfficeService; | |||
| import com.jeesite.modules.sys.utils.UserUtils; | |||
| import com.lecoo.kjg.http.MyResponse; | |||
| import com.lecoo.kjg.web.meeting.dao.MeetingRoomDao; | |||
| import com.lecoo.kjg.web.meeting.dao.MeetingRoomOrderDao; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoom; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoomOrder; | |||
| import com.lecoo.kjg.web.meeting.service.MeetingRoomOrderService; | |||
| import com.lecoo.kjg.web.meeting.service.MeetingRoomService; | |||
| import com.lecoo.kjg.web.sys.constant.ResponseCode; | |||
| import com.lecoo.kjg.web.sys.service.EmpService; | |||
| import com.lecoo.kjg.web.sys.utils.DateUtils; | |||
| import com.lecoo.kjg.web.sys.utils.RedisUtils; | |||
| import com.lecoo.kjg.web.sys.utils.SendUtil; | |||
| import com.lecoo.kjg.web.sys.web.BaseController; | |||
| import me.chanjar.weixin.common.error.WxErrorException; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.http.MediaType; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.validation.Valid; | |||
| import java.text.SimpleDateFormat; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| @RestController | |||
| @RequestMapping(value = "/api/meeting", produces = MediaType.APPLICATION_JSON_UTF8_VALUE) | |||
| public class MeetingApiController extends BaseController { | |||
| @Autowired | |||
| private MeetingRoomOrderDao meetingRoomOrderDao; | |||
| @Autowired | |||
| private MeetingRoomDao meetingRoomDao; | |||
| @Autowired | |||
| private MeetingRoomService meetingRoomService; | |||
| @Autowired | |||
| private SendUtil sendUtil; | |||
| @Autowired | |||
| private EmpService empService; | |||
| @ResponseBody | |||
| @RequestMapping(value = "/new-order", method = RequestMethod.POST) | |||
| @Transactional | |||
| public Object upload(@Valid MeetingRoomOrder order, HttpServletRequest request) { | |||
| SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); | |||
| SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); | |||
| String dateStr = sdf2.format(order.getOrderDate()); | |||
| String timeStr = sdf.format(order.getOrderDate()); | |||
| if (order.getOrderDate().before(new Date())) { | |||
| return output(ResponseCode.MEETING_ORDER_TIME_ERROR); | |||
| } | |||
| order.setOrderTime(order.getOrderDate()); | |||
| order.setIsNewRecord(true); | |||
| Date endDate = DateUtils.addMinutes(order.getOrderTime(), order.getMeetingDuration()); | |||
| order.setEndTime(endDate); | |||
| String endTimeStr = sdf.format(order.getEndTime()); | |||
| List<MeetingRoomOrder> list = meetingRoomOrderDao.queryByOrder(order.getRoomId(), dateStr, timeStr, endTimeStr); | |||
| if (list.size() > 0) { | |||
| return output(ResponseCode.MEETING_ORDER_CONFLICT); | |||
| } else { | |||
| String userCode = empService.get(order.getOrderBy()).getJobNumber(); | |||
| User u = UserUtils.get(userCode); | |||
| order.setOrderByEmp(u.getUserName()); | |||
| meetingRoomOrderDao.insert(order); | |||
| MeetingRoomOrder newMro = meetingRoomOrderDao.findLastByEmpId(order.getOrderBy()); | |||
| MeetingRoom meetingRoom = meetingRoomService.get(order.getRoomId().toString()); | |||
| SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); | |||
| SimpleDateFormat dateFormat2 = new SimpleDateFormat("HH:mm"); | |||
| newMro.setMeetingRoom(meetingRoom); | |||
| String mms = dateFormat1.format(newMro.getOrderDate())+" "+dateFormat2.format( newMro.getOrderTime())+"于"+newMro.getMeetingRoom().getName(); | |||
| newMro.setOrderData(mms); | |||
| try { | |||
| if (null != u && StringUtils.isNotEmpty(u.getWxOpenid())) { | |||
| // sendUtil.sendToUser(u.getWxOpenid(), "恭喜您,预订会议室成功", newMro, 1); | |||
| sendUtil.sendTempMmsMeeting(u.getMobile(), newMro, 1); | |||
| } | |||
| } catch (WxErrorException e) { | |||
| e.printStackTrace(); | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| return outputSuccess(); | |||
| } | |||
| } | |||
| @ResponseBody | |||
| @RequestMapping(value = "/quit-order", method = RequestMethod.POST) | |||
| @Transactional | |||
| public Object quit(@Valid MeetingRoomOrder order, HttpServletRequest request) { | |||
| MeetingRoomOrder mro = meetingRoomOrderDao.get(order); | |||
| SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); | |||
| SimpleDateFormat dateFormat2 = new SimpleDateFormat("HH:mm"); | |||
| MeetingRoom meetingRoom = meetingRoomService.get(mro.getRoomId().toString()); | |||
| mro.setMeetingRoom(meetingRoom); | |||
| String mms = dateFormat1.format(mro.getOrderDate())+" "+dateFormat2.format( mro.getOrderTime())+"于"+mro.getMeetingRoom().getName(); | |||
| mro.setOrderData(mms); | |||
| if (null == mro) { | |||
| return output(ResponseCode.MEETING_RECORD_NOT_FOUND); | |||
| } else { | |||
| String userCode = empService.get(mro.getOrderBy()).getJobNumber(); | |||
| User u = UserUtils.get(userCode); | |||
| try { | |||
| if (null != u && StringUtils.isNotEmpty(u.getWxOpenid())) { | |||
| // sendUtil.sendToUser(u.getWxOpenid(), "您好,您取消会议室成功", mro, 2); | |||
| sendUtil.sendTempMmsMeeting(u.getMobile(), mro, 2); | |||
| } | |||
| } catch (WxErrorException e) { | |||
| e.printStackTrace(); | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| meetingRoomOrderDao.phyDelete(mro); | |||
| return outputSuccess(); | |||
| } | |||
| } | |||
| @ResponseBody | |||
| @RequestMapping(value = "/lists", method = RequestMethod.POST) | |||
| @Transactional | |||
| public MyResponse list(String dateStr, Integer roomId) { | |||
| return outputData(0, meetingRoomOrderDao.findListByDate(dateStr, roomId)); | |||
| } | |||
| @ResponseBody | |||
| @RequestMapping(value = "/listsByDate", method = RequestMethod.POST) | |||
| @Transactional | |||
| public MyResponse listByDate(String dateStr, String officeCode) { | |||
| return outputData(0, meetingRoomOrderDao.findListByDateStr(dateStr, officeCode)); | |||
| } | |||
| @ResponseBody | |||
| @RequestMapping(value = "/listsByDateAndRoom", method = RequestMethod.POST) | |||
| @Transactional | |||
| public MyResponse listByDateAndRoom(String dateStr, String roomId) { | |||
| return outputData(0, meetingRoomOrderDao.findListByDateAndRoom(dateStr, roomId)); | |||
| } | |||
| @ResponseBody | |||
| @RequestMapping(value = "/listsByDateAndEmp", method = RequestMethod.POST) | |||
| @Transactional | |||
| public MyResponse listByDateAndUser(String empId) { | |||
| List<MeetingRoomOrder> mrs = meetingRoomOrderDao.findListByDateAndEmp(empId); | |||
| for (MeetingRoomOrder m : mrs) { | |||
| MeetingRoom mr = meetingRoomService.get(m.getRoomId().toString()); | |||
| m.setRoomName(mr.getName()); | |||
| } | |||
| return outputData(0, mrs); | |||
| } | |||
| @Autowired | |||
| private OfficeService officeService; | |||
| @ResponseBody | |||
| @RequestMapping(value = "/person-lists", method = RequestMethod.POST) | |||
| @Transactional | |||
| public MyResponse personList(String orderBy) { | |||
| List<MeetingRoomOrder> mrs = meetingRoomOrderDao.findListByPerson(orderBy); | |||
| for (MeetingRoomOrder m : mrs) { | |||
| MeetingRoom mr = meetingRoomService.get(m.getRoomId().toString()); | |||
| m.setRoomName(mr.getName()); | |||
| } | |||
| return outputData(0, mrs); | |||
| } | |||
| @ResponseBody | |||
| @RequestMapping(value = "/room-lists", method = RequestMethod.POST) | |||
| @Transactional | |||
| public MyResponse roomList(@RequestParam(required = false) String officeCode) { | |||
| Office o = null; | |||
| if (StringUtils.isNotEmpty(officeCode)) { | |||
| o = officeService.get(officeCode); | |||
| if (o == null){ | |||
| outputData(-1, "传入的officeCode非法"); | |||
| } | |||
| } else { | |||
| o = officeService.get("6123731313956274818");//默认恒昌 | |||
| } | |||
| String offices = o.getParentCodes(); | |||
| System.err.println(offices); | |||
| List<String> list = ListUtils.newArrayList(offices.split(",")); | |||
| list.add(o.getOfficeCode()); | |||
| MeetingRoom mr = new MeetingRoom(); | |||
| mr.setOffice_in(list); | |||
| System.err.println(list); | |||
| return outputData(0, meetingRoomDao.findList(mr)); | |||
| } | |||
| @ResponseBody | |||
| @RequestMapping(value = "/test") | |||
| public MyResponse test() { | |||
| SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); | |||
| SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); | |||
| Date d1 = DateUtils.parseStrToDate("2023-01-29 14:11", "yyyy-MM-dd HH:mm"); | |||
| String s1 = sdf.format(d1); | |||
| String s2 = sdf2.format(d1); | |||
| System.err.println(s1); | |||
| System.err.println(s2); | |||
| return outputData(0, s1); | |||
| } | |||
| @ResponseBody | |||
| @RequestMapping(value = "/new-order2", method = RequestMethod.POST) | |||
| @Transactional | |||
| public Object upload2(@Valid MeetingRoomOrder order, HttpServletRequest request) { | |||
| String orderData = order.getOrderData(); | |||
| JSONArray jsonArray = JSONArray.parseArray(orderData); | |||
| System.err.println(orderData); | |||
| System.err.println(jsonArray); | |||
| if (!(jsonArray.size()>0)) { | |||
| return output(ResponseCode.CHECK_PARAMS_ERROR, "orderData"); | |||
| } | |||
| List<MeetingRoomOrder> list = ListUtils.newArrayList(); | |||
| String userCode = empService.get(order.getOrderBy()).getJobNumber(); | |||
| User u = UserUtils.get(userCode); | |||
| String mms = ""; | |||
| SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); | |||
| SimpleDateFormat dateFormat2 = new SimpleDateFormat("HH:mm"); | |||
| for (Object js : jsonArray) { | |||
| JSONObject temp = (JSONObject) js; | |||
| String date = temp.getString("date"); | |||
| JSONArray timeList = temp.getJSONArray("timeList"); | |||
| for (Object timeStr: timeList) { | |||
| String times = (String)timeStr; | |||
| String[] timeAry = times.split("-"); | |||
| Date orderDate = DateUtils.parseStrToDate(date+" "+timeAry[0], "yyyy-MM-dd HH:mm"); | |||
| Date endDate = DateUtils.parseStrToDate(date+" "+timeAry[1], "yyyy-MM-dd HH:mm"); | |||
| Integer duration = DateUtils.dateDiffMin(orderDate, endDate); | |||
| if (orderDate.before(new Date())) { | |||
| return output(ResponseCode.MEETING_ORDER_TIME_ERROR); | |||
| } | |||
| List<MeetingRoomOrder> lists = meetingRoomOrderDao.queryByOrder(order.getRoomId(), date, timeAry[0], timeAry[1]); | |||
| if (lists.size() > 0) { | |||
| return output(ResponseCode.MEETING_ORDER_CONFLICT); | |||
| } | |||
| MeetingRoomOrder mm = new MeetingRoomOrder(); | |||
| mm.setOrderBy(order.getOrderBy()); | |||
| mm.setRoomId(order.getRoomId()); | |||
| mm.setMeetingTitle(order.getMeetingTitle()); | |||
| mm.setMeetingDuration(duration); | |||
| mm.setOrderDate(orderDate); | |||
| mm.setOrderTime(orderDate); | |||
| mm.setEndTime(endDate); | |||
| mm.setIsNewRecord(true); | |||
| mm.setOrderByEmp(u.getUserName()); | |||
| list.add(mm); | |||
| mms += dateFormat1.format(mm.getOrderDate())+" "+dateFormat2.format( mm.getOrderTime())+","; | |||
| } | |||
| } | |||
| meetingRoomOrderDao.insertBatch(list); | |||
| MeetingRoomOrder newMro = meetingRoomOrderDao.findLastByEmpId(order.getOrderBy()); | |||
| MeetingRoom meetingRoom = meetingRoomService.get(order.getRoomId().toString()); | |||
| mms = mms.substring(0, mms.length()-1)+"于"+meetingRoom.getName(); | |||
| newMro.setOrderData(mms); | |||
| try { | |||
| if (null != u && StringUtils.isNotEmpty(u.getWxOpenid())) { | |||
| // sendUtil.sendToUser(u.getWxOpenid(), "恭喜您,预订会议室成功", newMro, 1); | |||
| sendUtil.sendTempMmsMeeting(u.getMobile(), newMro, 1); | |||
| } | |||
| } catch (WxErrorException e) { | |||
| e.printStackTrace(); | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| return outputSuccess(); | |||
| } | |||
| @ResponseBody | |||
| @RequestMapping(value = "/quit-order2", method = RequestMethod.POST) | |||
| @Transactional | |||
| public Object quit2(@RequestParam(required = true) String ids) { | |||
| String mms = ""; | |||
| JSONArray idList = JSONArray.parseArray(ids); | |||
| List<MeetingRoomOrder> list = ListUtils.newArrayList(); | |||
| for (Object id : idList) { | |||
| String idStr = String.valueOf(id); | |||
| MeetingRoomOrder mro = meetingRoomOrderService.get(idStr); | |||
| SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); | |||
| SimpleDateFormat dateFormat2 = new SimpleDateFormat("HH:mm"); | |||
| if (null == mro) { | |||
| return output(ResponseCode.MEETING_RECORD_NOT_FOUND); | |||
| } else { | |||
| list.add(mro); | |||
| } | |||
| mms += dateFormat1.format(mro.getOrderDate())+" "+dateFormat2.format( mro.getOrderTime())+","; | |||
| } | |||
| MeetingRoomOrder mmrroo = list.get(0); | |||
| String userCode = empService.get(mmrroo.getOrderBy()).getJobNumber(); | |||
| User u = UserUtils.get(userCode); | |||
| MeetingRoom meetingRoom = meetingRoomService.get(mmrroo.getRoomId().toString()); | |||
| mms = mms.substring(0, mms.length()-1)+"于"+meetingRoom.getName(); | |||
| mmrroo.setOrderData(mms); | |||
| try { | |||
| if (null != u && StringUtils.isNotEmpty(u.getWxOpenid())) { | |||
| // sendUtil.sendToUser(u.getWxOpenid(), "您好,您取消会议室成功", mro, 2); | |||
| sendUtil.sendTempMmsMeeting(u.getMobile(), mmrroo, 2); | |||
| } | |||
| } catch (WxErrorException e) { | |||
| e.printStackTrace(); | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| for(MeetingRoomOrder mr : list) { | |||
| meetingRoomOrderDao.phyDelete(mr); | |||
| } | |||
| return outputSuccess(); | |||
| } | |||
| @Autowired | |||
| private MeetingRoomOrderService meetingRoomOrderService; | |||
| @ResponseBody | |||
| @RequestMapping(value = "/test2") | |||
| public MyResponse test2(String orderDate, String orderTime, String endTime) { | |||
| // List<Long> ls = meetingRoomOrderService.getAbleOrderList(orderDate,orderTime,endTime); | |||
| int[] height = {0,1,0,2,1,0,1,3,2,1,2,3}; | |||
| int count = trap(height); | |||
| return outputData(0, "count"); | |||
| } | |||
| public int trap(int[] height) { | |||
| int len = height.length; | |||
| if (len < 3) { | |||
| return 0; | |||
| } | |||
| int max = height[0], maxInd = 0; | |||
| for (int ind = 1; ind < len; ind++) { | |||
| if (height[ind] > max) { | |||
| max = height[ind]; | |||
| maxInd = ind; | |||
| } | |||
| } | |||
| int i = 0, j = height.length - 1; | |||
| int count = 0, l = 0, r = height.length - 1; | |||
| while (l < r) { | |||
| if (l < maxInd) { | |||
| i++; | |||
| if (height[i] < height[l]) { | |||
| count += height[l] - height[i]; | |||
| } else { | |||
| l = i; | |||
| } | |||
| } | |||
| if (r > maxInd) { | |||
| j--; | |||
| if (height[j] < height[r]) { | |||
| count += height[r] - height[j]; | |||
| } else { | |||
| r = j; | |||
| } | |||
| } | |||
| } | |||
| return count; | |||
| } | |||
| } | |||
| @@ -0,0 +1,88 @@ | |||
| package com.lecoo.kjg.web.meeting.controller; | |||
| import com.jeesite.common.entity.Page; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.jeesite.common.mybatis.mapper.query.QueryType; | |||
| import com.jeesite.common.web.s.M; | |||
| import com.lecoo.kjg.web.meeting.dao.MeetingRoomDao; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoom; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoomOrder; | |||
| import com.lecoo.kjg.web.meeting.service.MeetingRoomOrderService; | |||
| import com.lecoo.kjg.web.sys.dao.TouristDao; | |||
| import com.lecoo.kjg.web.sys.entity.Emp; | |||
| import com.lecoo.kjg.web.sys.service.BlackRoleService; | |||
| import com.lecoo.kjg.web.sys.service.EmpService; | |||
| import com.lecoo.kjg.web.sys.web.BaseController; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Controller; | |||
| import org.springframework.ui.Model; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.ResponseBody; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| @Controller | |||
| @RequestMapping(value = "${adminPath}/sys/meeting") | |||
| public class MeetingController extends BaseController { | |||
| @Autowired | |||
| private TouristDao touristDao; | |||
| @Autowired | |||
| private BlackRoleService blackRoleService; | |||
| @Autowired | |||
| private MeetingRoomOrderService meetingRoomOrderService; | |||
| /** | |||
| * 根据条件查询会议室预订 | |||
| * | |||
| * @param request | |||
| * @param response | |||
| * @return | |||
| */ | |||
| @RequiresPermissions("user") | |||
| @RequestMapping(value = "/listData") | |||
| @ResponseBody | |||
| public Page<MeetingRoomOrder> listData(MeetingRoomOrder meetingRoomOrder, HttpServletRequest request, HttpServletResponse response) { | |||
| String timePart = meetingRoomOrder.getTimePart(); | |||
| if (StringUtils.isNotEmpty(timePart)) { | |||
| String[] times = timePart.split(" ~ "); | |||
| meetingRoomOrder.getSqlMap().getWhere().andBracket("order_date", QueryType.LTE, times[1]+" 23:59:59",1).and("order_date", QueryType.GTE, times[0],2).endBracket(1); | |||
| } | |||
| String optionName = meetingRoomOrder.getOptionName(); | |||
| if (!StringUtils.isEmpty(optionName)) { | |||
| meetingRoomOrder.getSqlMap().getWhere().andBracket("order_by_emp",QueryType.LIKE, optionName,2).or("meeting_title", QueryType.LIKE, optionName).endBracket(2); | |||
| } | |||
| System.err.println(meetingRoomOrder.getSqlMap().getWhere().toSql()); | |||
| Page<MeetingRoomOrder> pages = meetingRoomOrderService.findPage(new Page<>(request, response), meetingRoomOrder); | |||
| return pages; | |||
| } | |||
| @Autowired | |||
| private MeetingRoomDao meetingRoomDao; | |||
| @Autowired | |||
| private EmpService empService; | |||
| @RequiresPermissions("user") | |||
| @RequestMapping(value = "/list") | |||
| public String list(Model model, HttpServletRequest request, HttpServletResponse response) { | |||
| // public Page<VisitRecords> list(HttpServletRequest request, HttpServletResponse response) { | |||
| List<MeetingRoom> list = meetingRoomDao.findList(new MeetingRoom()); | |||
| model.addAttribute("roomList", list); | |||
| return "modules/sys/meeting/list"; | |||
| } | |||
| } | |||
| @@ -0,0 +1,141 @@ | |||
| package com.lecoo.kjg.web.meeting.controller; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.jeesite.common.codec.DesUtils; | |||
| import com.jeesite.common.config.Global; | |||
| import com.jeesite.common.lang.ObjectUtils; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.jeesite.common.web.http.ServletUtils; | |||
| import com.jeesite.modules.sys.entity.User; | |||
| import com.jeesite.modules.sys.entity.UserDataScope; | |||
| import com.jeesite.modules.sys.service.OfficeService; | |||
| import com.jeesite.modules.sys.utils.UserUtils; | |||
| import com.lecoo.kjg.web.config.RecordStatus; | |||
| import com.lecoo.kjg.web.config.WxMpProperties; | |||
| import com.lecoo.kjg.web.controller.WxBaseController; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoom; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoomOrder; | |||
| import com.lecoo.kjg.web.meeting.service.MeetingRoomOrderService; | |||
| import com.lecoo.kjg.web.meeting.service.MeetingRoomService; | |||
| import com.lecoo.kjg.web.sys.dao.EmpDao; | |||
| import com.lecoo.kjg.web.sys.dao.UserExtraDao; | |||
| import com.lecoo.kjg.web.sys.dao.VisitRecordsDao; | |||
| import com.lecoo.kjg.web.sys.entity.AuditRecords; | |||
| import com.lecoo.kjg.web.sys.entity.Emp; | |||
| import com.lecoo.kjg.web.sys.entity.VisitRecords; | |||
| import com.lecoo.kjg.web.sys.service.EmpService; | |||
| import com.lecoo.kjg.web.sys.utils.DateUtils; | |||
| import com.lecoo.kjg.web.sys.utils.RedisUtils; | |||
| import lombok.AllArgsConstructor; | |||
| import me.chanjar.weixin.common.api.WxConsts; | |||
| import me.chanjar.weixin.common.bean.WxJsapiSignature; | |||
| import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken; | |||
| import me.chanjar.weixin.common.error.WxErrorException; | |||
| import me.chanjar.weixin.mp.api.WxMpService; | |||
| import org.apache.http.HttpResponse; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Controller; | |||
| import org.springframework.ui.Model; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| import java.io.IOException; | |||
| import java.security.NoSuchAlgorithmException; | |||
| import java.util.ArrayList; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| @AllArgsConstructor | |||
| @Controller | |||
| @RequestMapping("${frontPath}/wx/meeting") | |||
| public class MeetingFrontController extends WxBaseController { | |||
| @Autowired | |||
| private MeetingRoomOrderService meetingRoomOrderService; | |||
| @Autowired | |||
| private RedisUtils redisUtils; | |||
| @Autowired | |||
| private EmpService empService; | |||
| @Autowired | |||
| private EmpDao empDao; | |||
| @Autowired | |||
| private MeetingRoomService meetingRoomService; | |||
| @RequestMapping(value = "/info/{id}") | |||
| public String photo(Model model, @PathVariable(required = true) String id) { | |||
| try { | |||
| MeetingRoomOrder mro = meetingRoomOrderService.get(id); | |||
| if (null != mro) { | |||
| model.addAttribute("meetingRoomOrder", mro); | |||
| Emp emp = mro.getEmp(); | |||
| User user = UserUtils.get(emp.getJobNumber()); | |||
| JSONObject userJson = redisUtils.getUserObject("0"+user.getWxOpenid()); | |||
| model.addAttribute("userJson", userJson); | |||
| return "modules/sys/meeting/meetingInfo"; | |||
| } else { | |||
| model.addAttribute("msg", "无指定的预约记录"); | |||
| model.addAttribute("type", 1); | |||
| return "wx/error"; | |||
| } | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| model.addAttribute("msg", e.getMessage()); | |||
| model.addAttribute("type", 1); | |||
| return "wx/error"; | |||
| } | |||
| } | |||
| @RequestMapping(value = "/my-meeting/{openid}") | |||
| public String myMeeting(Model model, @PathVariable(required = true) Object openid){ | |||
| String secretKey = Global.getConfig("shiro.loginSubmit.secretKey"); | |||
| String decodeOpenid = DesUtils.decode((String) openid, secretKey); | |||
| JSONObject userJson = null; | |||
| try { | |||
| userJson = redisUtils.getUserObject(decodeOpenid); | |||
| } catch (Exception e) { | |||
| model.addAttribute("msg", e.getMessage()); | |||
| model.addAttribute("type", 1); | |||
| return "wx/error"; | |||
| } | |||
| // String userType = UserUtils.getUser().getUserType(); | |||
| String userType = userJson.getString("userType"); | |||
| String empCode = userJson.getString("loginCode"); | |||
| String officeCode = userJson.getString("officeCode"); | |||
| List<MeetingRoomOrder> list; | |||
| Date d = new Date(); | |||
| Date startDate = DateUtils.getPushForwardDate(d, 15); | |||
| Date endDate = DateUtils.getPushForwardDate(d, -15); | |||
| if ("mgr".equals(userType)) { | |||
| List<Emp> emps = empService.findEmployeesByOfficeCode(officeCode); | |||
| List<String> empIds = emps.stream().map(Emp::getId).collect(Collectors.toList()); | |||
| list= this.meetingRoomOrderService.findListByEmps(startDate, endDate, empIds); | |||
| } else { | |||
| // list= this.auditRecordsService.findListByEmp(startDate, endDate, null); | |||
| // regList= this.auditRecordsService.findRegListByEmp(startDate, endDate, null); | |||
| list= this.meetingRoomOrderService.findListByEmp(startDate, endDate, empCode); | |||
| } | |||
| Emp emp = empService.get(list.get(0).getOrderBy()); | |||
| for (int i=0;i<list.size();i++) { | |||
| MeetingRoom mr = meetingRoomService.get(list.get(i).getRoomId().toString()); | |||
| list.get(i).setMeetingRoom(mr); | |||
| list.get(i).setEmp(emp); | |||
| } | |||
| model.addAttribute("meetingList", list); | |||
| model.addAttribute("userJson", userJson); | |||
| return "modules/sys/meeting/myMeetingOrder"; | |||
| } | |||
| } | |||
| @@ -0,0 +1,52 @@ | |||
| package com.lecoo.kjg.web.meeting.controller; | |||
| import com.jeesite.common.entity.Page; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoom; | |||
| import com.lecoo.kjg.web.meeting.service.MeetingRoomService; | |||
| import com.lecoo.kjg.web.sys.web.BaseController; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Controller; | |||
| import org.springframework.web.bind.annotation.RequestMapping; | |||
| import org.springframework.web.bind.annotation.ResponseBody; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import javax.servlet.http.HttpServletResponse; | |||
| @Controller | |||
| @RequestMapping(value = "${adminPath}/sys/meeting-room") | |||
| public class MeetingRoomController extends BaseController { | |||
| @Autowired | |||
| private MeetingRoomService meetingRoomService; | |||
| /** | |||
| * 根据条件查询会议室预订 | |||
| * | |||
| * @param request | |||
| * @param response | |||
| * @return | |||
| */ | |||
| @RequiresPermissions("user") | |||
| @RequestMapping(value = "/listData") | |||
| @ResponseBody | |||
| public Page<MeetingRoom> listData(MeetingRoom meetingRoom, HttpServletRequest request, HttpServletResponse response) { | |||
| Page<MeetingRoom> pages = meetingRoomService.findPage(new Page<>(request, response), meetingRoom); | |||
| return pages; | |||
| } | |||
| @RequiresPermissions("user") | |||
| @RequestMapping(value = "/list") | |||
| public String list(HttpServletRequest request, HttpServletResponse response) { | |||
| // public Page<VisitRecords> list(HttpServletRequest request, HttpServletResponse response) { | |||
| return "modules/sys/meeting/roomList"; | |||
| } | |||
| } | |||
| @@ -0,0 +1,18 @@ | |||
| /** | |||
| * Copyright (c) 2013-Now http://jeesite.com All rights reserved. | |||
| */ | |||
| package com.lecoo.kjg.web.meeting.dao; | |||
| import com.jeesite.common.dao.CrudDao; | |||
| import com.jeesite.common.mybatis.annotation.MyBatisDao; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoom; | |||
| /** | |||
| * meeting_roomDAO接口 | |||
| * @author yk | |||
| * @version 2022-11-25 | |||
| */ | |||
| @MyBatisDao | |||
| public interface MeetingRoomDao extends CrudDao<MeetingRoom> { | |||
| } | |||
| @@ -0,0 +1,34 @@ | |||
| /** | |||
| * Copyright (c) 2013-Now http://jeesite.com All rights reserved. | |||
| */ | |||
| package com.lecoo.kjg.web.meeting.dao; | |||
| import com.jeesite.common.dao.CrudDao; | |||
| import com.jeesite.common.mybatis.annotation.MyBatisDao; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoomOrder; | |||
| import java.util.List; | |||
| /** | |||
| * meeting_room_orderDAO接口 | |||
| * @author yk | |||
| * @version 2022-11-25 | |||
| */ | |||
| @MyBatisDao | |||
| public interface MeetingRoomOrderDao extends CrudDao<MeetingRoomOrder> { | |||
| public List<MeetingRoomOrder> queryByOrder(Long roomId, String orderDate, String orderTime, String endTime); | |||
| public List<MeetingRoomOrder> findListByDateStr(String orderDate, String officeCode); | |||
| public List<MeetingRoomOrder> findListByDateAndRoom(String orderDate, String roomId); | |||
| public List<MeetingRoomOrder> findListByDateAndEmp(String empId); | |||
| public List<MeetingRoomOrder> findListByDate(String orderDate, Integer roomId); | |||
| public List<MeetingRoomOrder> findListByPerson(String orderBy); | |||
| public List<MeetingRoomOrder> findListTodayHour(); | |||
| public List<MeetingRoomOrder> findListByEmps(String startDate, String endDate, List<String> empIds); | |||
| public List<MeetingRoomOrder> findListByEmp(String startDate, String endDate, String empId); | |||
| public List<MeetingRoomOrder> findListByEmpId(String empId); | |||
| public MeetingRoomOrder findLastByEmpId(String empId); | |||
| public List<MeetingRoomOrder> ableOrder(Long roomId, String orderDate, String orderTime, String endTime); | |||
| } | |||
| @@ -0,0 +1,97 @@ | |||
| /** | |||
| * Copyright (c) 2013-Now http://jeesite.com All rights reserved. | |||
| */ | |||
| package com.lecoo.kjg.web.meeting.entity; | |||
| import com.jeesite.common.entity.DataEntity; | |||
| import com.jeesite.common.lang.ObjectUtils; | |||
| import com.jeesite.common.mybatis.annotation.Column; | |||
| import com.jeesite.common.mybatis.annotation.Table; | |||
| import com.jeesite.common.mybatis.mapper.query.QueryType; | |||
| import org.hibernate.validator.constraints.Length; | |||
| import java.util.List; | |||
| /** | |||
| * meeting_roomEntity | |||
| * @author yk | |||
| * @version 2022-11-25 | |||
| */ | |||
| @Table(name="meeting_room", alias="a", columns={ | |||
| @Column(name="id", attrName="id", label="id", isPK=true), | |||
| @Column(name="name", attrName="name", label="name", queryType=QueryType.LIKE), | |||
| @Column(name="office_code", attrName="officeCode", label="officeCode"), | |||
| @Column(name="address", attrName="address", label="address"), | |||
| @Column(name="nick_name", attrName="nickName", label="nick_name", queryType=QueryType.LIKE), | |||
| }, orderBy="a.id ASC" | |||
| ) | |||
| public class MeetingRoom extends DataEntity<MeetingRoom> { | |||
| private static final long serialVersionUID = 1L; | |||
| private String name; // name | |||
| private String address; // address | |||
| private String nickName; // nick_name | |||
| private String officeCode; | |||
| public MeetingRoom() { | |||
| this(null); | |||
| } | |||
| public MeetingRoom(String id){ | |||
| super(id); | |||
| } | |||
| @Length(min=0, max=128, message="name长度不能超过 128 个字符") | |||
| public String getName() { | |||
| return name; | |||
| } | |||
| public void setName(String name) { | |||
| this.name = name; | |||
| } | |||
| @Length(min=0, max=128, message="address长度不能超过 128 个字符") | |||
| public String getAddress() { | |||
| return address; | |||
| } | |||
| public void setAddress(String address) { | |||
| this.address = address; | |||
| } | |||
| @Length(min=0, max=64, message="nick_name长度不能超过 64 个字符") | |||
| public String getNickName() { | |||
| return nickName; | |||
| } | |||
| public void setNickName(String nickName) { | |||
| this.nickName = nickName; | |||
| } | |||
| @Override | |||
| public void setId(String id) { | |||
| if (ObjectUtils.anyNotNull(id) && id.length()>15) { | |||
| this.id = null; | |||
| } else { | |||
| this.id = id; | |||
| } | |||
| } | |||
| @Override | |||
| public String getId (){ | |||
| return this.id; | |||
| } | |||
| public String getOfficeCode() { | |||
| return officeCode; | |||
| } | |||
| public void setOfficeCode(String officeCode) { | |||
| this.officeCode = officeCode; | |||
| } | |||
| public MeetingRoom setOffice_in(List<String> offices) { | |||
| this.getSqlMap().getWhere().and("office_code", QueryType.IN, offices); | |||
| return this; | |||
| } | |||
| } | |||
| @@ -0,0 +1,234 @@ | |||
| /** | |||
| * Copyright (c) 2013-Now http://jeesite.com All rights reserved. | |||
| */ | |||
| package com.lecoo.kjg.web.meeting.entity; | |||
| import com.jeesite.common.lang.ObjectUtils; | |||
| import com.jeesite.modules.sys.entity.Office; | |||
| import com.lecoo.kjg.web.sys.entity.Emp; | |||
| import com.lecoo.kjg.web.sys.entity.EmpFaceFeature; | |||
| import lombok.ToString; | |||
| import org.hibernate.validator.constraints.Length; | |||
| import java.util.Date; | |||
| import com.jeesite.common.mybatis.annotation.JoinTable; | |||
| import com.jeesite.common.mybatis.annotation.JoinTable.Type; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import com.jeesite.common.entity.DataEntity; | |||
| import com.jeesite.common.mybatis.annotation.Column; | |||
| import com.jeesite.common.mybatis.annotation.Table; | |||
| import com.jeesite.common.mybatis.mapper.query.QueryType; | |||
| import org.springframework.format.annotation.DateTimeFormat; | |||
| import org.springframework.stereotype.Component; | |||
| /** | |||
| * meeting_room_orderEntity | |||
| * @author yk | |||
| * @version 2022-11-25 | |||
| */ | |||
| @Table(name="meeting_room_order", alias="a", columns={ | |||
| @Column(name="id", attrName="id", label="id", isPK=true), | |||
| @Column(name="room_id", attrName="roomId", label="room_id"), | |||
| @Column(name="meeting_title", attrName="meetingTitle", label="meeting_title", queryType=QueryType.LIKE), | |||
| @Column(name="meeting_duration", attrName="meetingDuration", label="meeting_duration"), | |||
| @Column(name="order_date", attrName="orderDate", label="order_date"), | |||
| @Column(name="order_time", attrName="orderTime", label="order_time"), | |||
| @Column(name="end_time", attrName="endTime", label="end_time"), | |||
| @Column(name="order_by", attrName="orderBy", label="order_by"), | |||
| @Column(name="order_by_emp", attrName="orderByEmp", label="order_by_emp"), | |||
| @Column(name="created_at", attrName="createdAt", label="created_at"), | |||
| @Column(name="updated_at", attrName="updatedAt", label="updated_at"), | |||
| }, joinTable = { | |||
| @JoinTable(type = JoinTable.Type.LEFT_JOIN, entity = MeetingRoom.class, alias = "o", | |||
| on = "o.id = a.room_id", | |||
| columns = {@Column(includeEntity = MeetingRoom.class)}), | |||
| @JoinTable(type = JoinTable.Type.LEFT_JOIN, entity = Emp.class, alias = "e", | |||
| on = "e.id = a.order_by", | |||
| columns = {@Column(includeEntity = Emp.class)}) | |||
| },orderBy="a.id DESC" | |||
| ) | |||
| @ToString | |||
| @Component | |||
| public class MeetingRoomOrder extends DataEntity<MeetingRoomOrder> { | |||
| private static final long serialVersionUID = 1L; | |||
| private Long roomId; // room_id | |||
| private String meetingTitle; // meeting_title | |||
| private Integer meetingDuration; // meeting_duration | |||
| @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") | |||
| @DateTimeFormat(pattern="yyyy-MM-dd") | |||
| private Date orderDate; // order_date | |||
| @DateTimeFormat(pattern = "HH:mm") | |||
| @JsonFormat(timezone = "GMT+8", pattern = "HH:mm") | |||
| private Date orderTime; // order_time | |||
| @DateTimeFormat(pattern = "HH:mm") | |||
| @JsonFormat(timezone = "GMT+8", pattern = "HH:mm") | |||
| private Date endTime; // order_time | |||
| private String orderBy; // order_by | |||
| private String orderByEmp; // order_by | |||
| private Date createdAt; // created_at | |||
| private Date updatedAt; // updated_at | |||
| private String timePart; | |||
| private String optionName; | |||
| private MeetingRoom meetingRoom; | |||
| private Emp emp; | |||
| private String orderData; | |||
| private String roomName; | |||
| public MeetingRoom getMeetingRoom() { | |||
| return meetingRoom; | |||
| } | |||
| public void setMeetingRoom(MeetingRoom meetingRoom) { | |||
| this.meetingRoom = meetingRoom; | |||
| } | |||
| public Emp getEmp() { | |||
| return emp; | |||
| } | |||
| public void setEmp(Emp emp) { | |||
| this.emp = emp; | |||
| } | |||
| public MeetingRoomOrder() { | |||
| this(null); | |||
| } | |||
| public MeetingRoomOrder(String id){ | |||
| super(id); | |||
| } | |||
| public Long getRoomId() { | |||
| return roomId; | |||
| } | |||
| public void setRoomId(Long roomId) { | |||
| this.roomId = roomId; | |||
| } | |||
| @Length(min=0, max=128, message="meeting_title长度不能超过 128 个字符") | |||
| public String getMeetingTitle() { | |||
| return meetingTitle; | |||
| } | |||
| public void setMeetingTitle(String meetingTitle) { | |||
| this.meetingTitle = meetingTitle; | |||
| } | |||
| public Integer getMeetingDuration() { | |||
| return meetingDuration; | |||
| } | |||
| public void setMeetingDuration(Integer meetingDuration) { | |||
| this.meetingDuration = meetingDuration; | |||
| } | |||
| @JsonFormat(pattern = "yyyy-MM-dd") | |||
| public Date getOrderDate() { | |||
| return orderDate; | |||
| } | |||
| public void setOrderDate(Date orderDate) { | |||
| this.orderDate = orderDate; | |||
| } | |||
| @JsonFormat(pattern = "HH:mm") | |||
| public Date getOrderTime() { | |||
| return orderTime; | |||
| } | |||
| public void setOrderTime(Date orderTime) { | |||
| this.orderTime = orderTime; | |||
| } | |||
| @Length(min=0, max=128, message="order_by长度不能超过 128 个字符") | |||
| public String getOrderBy() { | |||
| return orderBy; | |||
| } | |||
| public void setOrderBy(String orderBy) { | |||
| this.orderBy = orderBy; | |||
| } | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| public Date getCreatedAt() { | |||
| return createdAt; | |||
| } | |||
| public void setCreatedAt(Date createdAt) { | |||
| this.createdAt = createdAt; | |||
| } | |||
| @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") | |||
| public Date getUpdatedAt() { | |||
| return updatedAt; | |||
| } | |||
| public void setUpdatedAt(Date updatedAt) { | |||
| this.updatedAt = updatedAt; | |||
| } | |||
| public Date getEndTime() { | |||
| return endTime; | |||
| } | |||
| public void setEndTime(Date endTime) { | |||
| this.endTime = endTime; | |||
| } | |||
| @Override | |||
| public void setId(String id) { | |||
| if (ObjectUtils.anyNotNull(id) && id.length()>15) { | |||
| this.id = null; | |||
| } else { | |||
| this.id = id; | |||
| } | |||
| } | |||
| @Override | |||
| public String getId (){ | |||
| return this.id; | |||
| } | |||
| public String getOrderByEmp() { | |||
| return orderByEmp; | |||
| } | |||
| public void setOrderByEmp(String orderByEmp) { | |||
| this.orderByEmp = orderByEmp; | |||
| } | |||
| public String getTimePart() { | |||
| return timePart; | |||
| } | |||
| public void setTimePart(String timePart) { | |||
| this.timePart = timePart; | |||
| } | |||
| public String getOptionName() { | |||
| return optionName; | |||
| } | |||
| public void setOptionName(String optionName) { | |||
| this.optionName = optionName; | |||
| } | |||
| public String getOrderData() { | |||
| return orderData; | |||
| } | |||
| public void setOrderData(String orderData) { | |||
| this.orderData = orderData; | |||
| } | |||
| public String getRoomName() { | |||
| return roomName; | |||
| } | |||
| public void setRoomName(String roomName) { | |||
| this.roomName = roomName; | |||
| } | |||
| } | |||
| @@ -0,0 +1,295 @@ | |||
| /** | |||
| * Copyright (c) 2013-Now http://jeesite.com All rights reserved. | |||
| */ | |||
| package com.lecoo.kjg.web.meeting.service; | |||
| import java.text.SimpleDateFormat; | |||
| import java.util.Collection; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.jeesite.common.collect.ListUtils; | |||
| import com.lecoo.kjg.web.meeting.dao.MeetingRoomDao; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoom; | |||
| import com.lecoo.kjg.web.sys.utils.DateUtils; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import com.jeesite.common.entity.Page; | |||
| import com.jeesite.common.service.CrudService; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoomOrder; | |||
| import com.lecoo.kjg.web.meeting.dao.MeetingRoomOrderDao; | |||
| /** | |||
| * meeting_room_orderService | |||
| * | |||
| * @author yk | |||
| * @version 2022-11-25 | |||
| */ | |||
| @Service | |||
| @Transactional(readOnly = true) | |||
| public class MeetingRoomOrderService extends CrudService<MeetingRoomOrderDao, MeetingRoomOrder> { | |||
| @Autowired | |||
| private MeetingRoomOrderDao meetingRoomOrderDao; | |||
| @Autowired | |||
| private MeetingRoomDao meetingRoomDao; | |||
| /** | |||
| * 获取单条数据 | |||
| * | |||
| * @param meetingRoomOrder | |||
| * @return | |||
| */ | |||
| @Override | |||
| public MeetingRoomOrder get(MeetingRoomOrder meetingRoomOrder) { | |||
| return super.get(meetingRoomOrder); | |||
| } | |||
| /** | |||
| * 查询分页数据 | |||
| * | |||
| * @param meetingRoomOrder 查询条件 | |||
| * @return | |||
| */ | |||
| @Override | |||
| public Page<MeetingRoomOrder> findPage(MeetingRoomOrder meetingRoomOrder) { | |||
| return super.findPage(meetingRoomOrder); | |||
| } | |||
| /** | |||
| * 保存数据(插入或更新) | |||
| * | |||
| * @param meetingRoomOrder | |||
| */ | |||
| @Override | |||
| @Transactional(readOnly = false) | |||
| public void save(MeetingRoomOrder meetingRoomOrder) { | |||
| super.save(meetingRoomOrder); | |||
| } | |||
| /** | |||
| * 更新状态 | |||
| * | |||
| * @param meetingRoomOrder | |||
| */ | |||
| @Override | |||
| @Transactional(readOnly = false) | |||
| public void updateStatus(MeetingRoomOrder meetingRoomOrder) { | |||
| super.updateStatus(meetingRoomOrder); | |||
| } | |||
| /** | |||
| * 删除数据 | |||
| * | |||
| * @param meetingRoomOrder | |||
| */ | |||
| @Override | |||
| @Transactional(readOnly = false) | |||
| public void delete(MeetingRoomOrder meetingRoomOrder) { | |||
| super.delete(meetingRoomOrder); | |||
| } | |||
| public List<MeetingRoomOrder> findListByEmps(Date startDate, Date endDate, List<String> empIds) { | |||
| SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); | |||
| return meetingRoomOrderDao.findListByEmps(sdf.format(startDate), sdf.format(endDate), empIds); | |||
| } | |||
| public List<MeetingRoomOrder> findListByEmp(Date startDate, Date endDate, String empId) { | |||
| SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); | |||
| return meetingRoomOrderDao.findListByEmp(sdf.format(startDate), sdf.format(endDate), empId); | |||
| } | |||
| public boolean ableOrder(String orderDate) { | |||
| Date orderD = DateUtils.parseStrToDate(orderDate, "yyyy-MM-dd"); | |||
| if (orderD.before(new Date())) { | |||
| return false; | |||
| } | |||
| if (orderD.after(DateUtils.addDays(new Date(), 5))) { | |||
| return false; | |||
| } | |||
| List<MeetingRoomOrder> ls = meetingRoomOrderDao.ableOrder(null, orderDate, null, null); | |||
| SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); | |||
| if (ls.size()>0 && sdf.format(ls.get(0).getOrderTime()).compareTo("08:00") > 0) {//第一个会议晚于早8点 | |||
| return true; | |||
| } | |||
| if (ls.size() > 1) | |||
| for (int i = 0; i < ls.size() - 1; i++) { | |||
| if (ls.get(i).getRoomId() == ls.get(i + 1).getRoomId()) { | |||
| if (sdf.format(ls.get(i).getOrderTime()).equals(sdf.format(ls.get(i + 1).getEndTime()))) { | |||
| } else { | |||
| return true; | |||
| } | |||
| } else { | |||
| if (sdf.format(ls.get(i + 1).getOrderTime()).compareTo("08:00") > 0) {//第一个会议晚于早8点 | |||
| return true; | |||
| } | |||
| } | |||
| } | |||
| else | |||
| return true; | |||
| if (sdf.format(ls.get(ls.size() - 1).getEndTime()).compareTo("20:00") > 0) {//超过晚8点 | |||
| return false; | |||
| } | |||
| return false; | |||
| } | |||
| public boolean ableOrder(String orderDate, String orderTime) { | |||
| return ableOrder(orderDate, orderTime, orderTime); | |||
| } | |||
| public boolean ableOrder(String orderDate, String orderTime, String endTime) { | |||
| List<MeetingRoomOrder> ls = meetingRoomOrderDao.ableOrder(null, orderDate, orderTime, endTime); | |||
| List<MeetingRoom> list = meetingRoomDao.findList(new MeetingRoom()); | |||
| if (list.size() == ls.size()) { | |||
| return false; | |||
| } | |||
| return true; | |||
| } | |||
| public JSONArray getAbleOrderList(String orderDate, String orderTime, String endTime) { | |||
| if (!(ableOrder(orderDate) && ableOrder(orderDate, orderTime, endTime))) { | |||
| return null; | |||
| } | |||
| List<MeetingRoomOrder> ls = meetingRoomOrderDao.ableOrder(null, orderDate, orderTime, endTime); | |||
| List<Long> originList = ls.stream().map(MeetingRoomOrder::getRoomId).collect(Collectors.toList()); | |||
| List<MeetingRoom> list = meetingRoomDao.findList(new MeetingRoom()); | |||
| List<String> roomIdList = list.stream().map(MeetingRoom::getId).collect(Collectors.toList()); | |||
| List<String> cdids = originList.stream().map(s -> s.toString()).collect(Collectors.toList()); | |||
| System.err.println((Collection<String>) roomIdList); | |||
| List<String> lss = ListUtils.subtract((Collection<String>) roomIdList, cdids); | |||
| JSONArray ja = new JSONArray(); | |||
| Date d = DateUtils.parseStrToDate(orderDate + " " + orderTime, "yyyy-MM-dd HH:mm"); | |||
| Date endD = DateUtils.parseStrToDate(orderDate + " " + endTime, "yyyy-MM-dd HH:mm"); | |||
| Integer diff = DateUtils.dateDiffMin(d, endD); | |||
| for (String ii : lss) { | |||
| JSONObject jo = new JSONObject(); | |||
| jo.put("orderDate", orderDate+" "+orderTime); | |||
| jo.put("meetingDuration", diff); | |||
| jo.put("roomId", Long.parseLong(ii)); | |||
| ja.add(jo); | |||
| } | |||
| return ja; | |||
| } | |||
| public boolean ableOrder(String orderDate, String orderTime, String endTime, Long roomId) { | |||
| List<MeetingRoomOrder> ls = meetingRoomOrderDao.ableOrder(roomId, orderDate, orderTime, endTime); | |||
| if (ls.size() > 0) { | |||
| return false; | |||
| } | |||
| return true; | |||
| } | |||
| public Object queryAble(Long roomId, String orderDate, String orderTime, String endTime) { | |||
| JSONObject js = new JSONObject(); | |||
| js.put("ableOrder", 1); | |||
| js.put("bestSuggestion", new JSONArray()); | |||
| if (null != orderDate && "" == orderTime) {//只有日期 | |||
| if (!ableOrder(orderDate)) { | |||
| js.put("ableOrder", 0); | |||
| js.put("err", "预订日期错误"); | |||
| } else { | |||
| js.put("ableOrder", 1); | |||
| } | |||
| } | |||
| JSONObject jsonObject = new JSONObject(); | |||
| if ("" != orderTime && orderTime.equals(endTime)) {//有日期和时间 | |||
| SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); | |||
| if (!ableOrder(orderDate, orderTime)) { | |||
| Date d = DateUtils.parseStrToDate(orderDate + " " + orderTime, "yyyy-MM-dd HH:mm"); | |||
| Date end = DateUtils.parseStrToDate(orderDate + " 19:31", "yyyy-MM-dd HH:mm"); | |||
| int i = 1; | |||
| while (true) { | |||
| Date temp = DateUtils.addMinutes(d, 30 * i); | |||
| String tempStr = sdf.format(temp); | |||
| if (ableOrder(orderDate, tempStr) && end.after(temp)) { | |||
| jsonObject.put("orderDate", orderDate + " " + tempStr); | |||
| js.put("ableOrder", 0); | |||
| js.put("bestSuggestion", jsonObject); | |||
| return js; | |||
| } | |||
| if (end.after(temp)) { | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| if (!orderTime.equals(endTime) && null == roomId) {//有日期和时间,时长 | |||
| SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); | |||
| if (!ableOrder(orderDate, orderTime)) { | |||
| Date d = DateUtils.parseStrToDate(orderDate + " " + orderTime, "yyyy-MM-dd HH:mm"); | |||
| Date endD = DateUtils.parseStrToDate(orderDate + " " + endTime, "yyyy-MM-dd HH:mm"); | |||
| Date end = DateUtils.parseStrToDate(orderDate + " 19:31", "yyyy-MM-dd HH:mm"); | |||
| int i = 1; | |||
| while (true) { | |||
| Date temp = DateUtils.addMinutes(d, 30 * i); | |||
| Date endTemp = DateUtils.addMinutes(endD, 30 * i++); | |||
| String tempStr = sdf.format(temp); | |||
| String endTempStr = sdf.format(endTemp); | |||
| if (ableOrder(orderDate, tempStr, endTempStr) && end.after(temp)) { | |||
| JSONArray ja = getAbleOrderList(orderDate, tempStr, endTempStr); | |||
| js.put("ableOrder", 0); | |||
| js.put("bestSuggestion", ja); | |||
| return js; | |||
| } | |||
| System.err.println("========="+sdf.format(end)+"-------"+sdf.format(temp)); | |||
| if (end.before(temp)) { | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| if (null != roomId) {//有日期和时间,时长,指定会议室 | |||
| if (!ableOrder(orderDate, orderTime, endTime, roomId)) { | |||
| List<MeetingRoom> list = meetingRoomDao.findList(new MeetingRoom()); | |||
| Date d = DateUtils.parseStrToDate(orderDate + " " + orderTime, "yyyy-MM-dd HH:mm"); | |||
| Date endD = DateUtils.parseStrToDate(orderDate + " " + endTime, "yyyy-MM-dd HH:mm"); | |||
| for (MeetingRoom mr : list) { | |||
| if (mr.getId().equals(roomId.toString())) { | |||
| continue; | |||
| } | |||
| if (ableOrder(orderDate, orderTime, endTime, Long.valueOf(mr.getId()))) { | |||
| JSONArray ja = getAbleOrderList(orderDate, orderTime, endTime); | |||
| js.put("ableOrder", 0); | |||
| js.put("bestSuggestion", ja); | |||
| return js; | |||
| } | |||
| } | |||
| int i = 1; | |||
| SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); | |||
| Date end = DateUtils.parseStrToDate(orderDate + " 19:31", "yyyy-MM-dd HH:mm"); | |||
| while (true) { | |||
| Date temp = DateUtils.addMinutes(d, 30 * i); | |||
| Date endTemp = DateUtils.addMinutes(endD, 30 * i++); | |||
| String tempStr = sdf.format(temp); | |||
| String endTempStr = sdf.format(endTemp); | |||
| if (ableOrder(orderDate, tempStr, endTempStr) && end.after(temp)) { | |||
| JSONArray ja = getAbleOrderList(orderDate, tempStr, endTempStr); | |||
| js.put("ableOrder", 0); | |||
| js.put("bestSuggestion", ja); | |||
| return js; | |||
| } | |||
| if (end.before(temp)) { | |||
| break; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| return js; | |||
| } | |||
| } | |||
| @@ -0,0 +1,76 @@ | |||
| /** | |||
| * Copyright (c) 2013-Now http://jeesite.com All rights reserved. | |||
| */ | |||
| package com.lecoo.kjg.web.meeting.service; | |||
| import java.util.List; | |||
| import org.springframework.stereotype.Service; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import com.jeesite.common.entity.Page; | |||
| import com.jeesite.common.service.CrudService; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoom; | |||
| import com.lecoo.kjg.web.meeting.dao.MeetingRoomDao; | |||
| /** | |||
| * meeting_roomService | |||
| * @author yk | |||
| * @version 2022-11-25 | |||
| */ | |||
| @Service | |||
| @Transactional(readOnly=true) | |||
| public class MeetingRoomService extends CrudService<MeetingRoomDao, MeetingRoom> { | |||
| /** | |||
| * 获取单条数据 | |||
| * @param meetingRoom | |||
| * @return | |||
| */ | |||
| @Override | |||
| public MeetingRoom get(MeetingRoom meetingRoom) { | |||
| return super.get(meetingRoom); | |||
| } | |||
| /** | |||
| * 查询分页数据 | |||
| * @param meetingRoom 查询条件 | |||
| * @param meetingRoom.page 分页对象 | |||
| * @return | |||
| */ | |||
| @Override | |||
| public Page<MeetingRoom> findPage(MeetingRoom meetingRoom) { | |||
| return super.findPage(meetingRoom); | |||
| } | |||
| /** | |||
| * 保存数据(插入或更新) | |||
| * @param meetingRoom | |||
| */ | |||
| @Override | |||
| @Transactional(readOnly=false) | |||
| public void save(MeetingRoom meetingRoom) { | |||
| super.save(meetingRoom); | |||
| } | |||
| /** | |||
| * 更新状态 | |||
| * @param meetingRoom | |||
| */ | |||
| @Override | |||
| @Transactional(readOnly=false) | |||
| public void updateStatus(MeetingRoom meetingRoom) { | |||
| super.updateStatus(meetingRoom); | |||
| } | |||
| /** | |||
| * 删除数据 | |||
| * @param meetingRoom | |||
| */ | |||
| @Override | |||
| @Transactional(readOnly=false) | |||
| public void delete(MeetingRoom meetingRoom) { | |||
| super.delete(meetingRoom); | |||
| } | |||
| } | |||
| @@ -72,4 +72,30 @@ public class BodyReaderRequestWrapper extends HttpServletRequestWrapper { | |||
| }; | |||
| return servletIns; | |||
| } | |||
| /** | |||
| * 全角字符串转换半角字符串 | |||
| * | |||
| * @param fullWidthStr | |||
| * 非空的全角字符串 | |||
| * @return 半角字符串 | |||
| */ | |||
| private static String fullWidth2halfWidth(String fullWidthStr) { | |||
| if (null == fullWidthStr || fullWidthStr.length() <= 0) { | |||
| return ""; | |||
| } | |||
| char[] charArray = fullWidthStr.toCharArray(); | |||
| //对全角字符转换的char数组遍历 | |||
| for (int i = 0; i < charArray.length; ++i) { | |||
| int charIntValue = (int) charArray[i]; | |||
| //如果符合转换关系,将对应下标之间减掉偏移量65248;如果是空格的话,直接做转换 | |||
| if (charIntValue >= 65281 && charIntValue <= 65374) { | |||
| charArray[i] = (char) (charIntValue - 65248); | |||
| } else if (charIntValue == 12288) { | |||
| charArray[i] = (char) 32; | |||
| } | |||
| } | |||
| return new String(charArray); | |||
| } | |||
| } | |||
| @@ -1,10 +1,8 @@ | |||
| package com.lecoo.kjg.web.sys.bean.req; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import lombok.Data; | |||
| import javax.validation.constraints.NotBlank; | |||
| import java.util.Date; | |||
| @Data | |||
| public class SavePassReq { | |||
| @@ -10,6 +10,7 @@ public class ResponseCode extends com.lenovo.nowgo.common.constant.ResponseCode | |||
| msg = {"人脸下发成功"} | |||
| ) | |||
| public static final Integer FACE_PUBLISH_SUCCESS = 1000; | |||
| @ResponseMessage( | |||
| msg = {"人脸下发失败(#p0#),请稍后重试!"} | |||
| ) | |||
| @@ -19,10 +20,12 @@ public class ResponseCode extends com.lenovo.nowgo.common.constant.ResponseCode | |||
| msg = {"人脸获取失败(#p0#)"} | |||
| ) | |||
| public static final Integer FACE_FETCH_FAIL = 1004; | |||
| @ResponseMessage( | |||
| msg = {"IC卡下发成功"} | |||
| ) | |||
| public static final Integer CARD_PUBLISH_SUCCESS = 2000; | |||
| @ResponseMessage( | |||
| msg = {"IC卡下发失败(#p0#)"} | |||
| ) | |||
| @@ -177,8 +180,38 @@ public class ResponseCode extends com.lenovo.nowgo.common.constant.ResponseCode | |||
| ) | |||
| public static final Integer QRCODE_USED_TIME_PAST = 5014; | |||
| @ResponseMessage( | |||
| msg = {"请求时间已过或错误"} | |||
| ) | |||
| public static final Integer REQUEST_TIME_PAST = 5015; | |||
| @ResponseMessage( | |||
| msg = {"场馆当日闭馆"} | |||
| ) | |||
| public static final Integer MUSEUM_CLOSE_DAY = 6001; | |||
| @ResponseMessage( | |||
| msg = {"未匹配到访客"} | |||
| ) | |||
| public static final Integer NOT_FOUND_VISITOR = 5404; | |||
| @ResponseMessage( | |||
| msg = {"预订失败,会议室预订时间点有冲突"} | |||
| ) | |||
| public static final Integer MEETING_ORDER_CONFLICT = 5501; | |||
| @ResponseMessage( | |||
| msg = {"预订失败,会议室预订时间错误"} | |||
| ) | |||
| public static final Integer MEETING_ORDER_TIME_ERROR = 5502; | |||
| @ResponseMessage( | |||
| msg = {"未匹配到指定的会议记录"} | |||
| ) | |||
| public static final Integer MEETING_RECORD_NOT_FOUND = 5503; | |||
| @ResponseMessage( | |||
| msg = {"请求参数不能全空"} | |||
| ) | |||
| public static final Integer MEETING_PARAMS_NOT_EXISTED = 5504; | |||
| } | |||
| @@ -5,6 +5,7 @@ package com.lecoo.kjg.web.sys.dao; | |||
| import com.jeesite.common.dao.CrudDao; | |||
| import com.jeesite.common.mybatis.annotation.MyBatisDao; | |||
| import com.lecoo.kjg.web.sys.entity.AccessControl; | |||
| import com.lecoo.kjg.web.sys.entity.AccessControlGroup; | |||
| import java.util.HashMap; | |||
| @@ -14,4 +15,6 @@ import java.util.List; | |||
| @MyBatisDao | |||
| public interface AccessControlGroupDao extends CrudDao<AccessControlGroup> { | |||
| public List<HashMap> findAcTreeList(String userCode); | |||
| public List<AccessControlGroup> findByUserCode(String userCode); | |||
| } | |||
| @@ -0,0 +1,13 @@ | |||
| /** | |||
| * Copyright (c) 2013-Now http://jeesite.com All rights reserved. | |||
| */ | |||
| package com.lecoo.kjg.web.sys.dao; | |||
| import com.jeesite.common.dao.CrudDao; | |||
| import com.jeesite.common.mybatis.annotation.MyBatisDao; | |||
| import com.lecoo.kjg.web.sys.entity.AdditionPerson; | |||
| @MyBatisDao | |||
| public interface AdditionPersonDao extends CrudDao<AdditionPerson> { | |||
| } | |||
| @@ -28,4 +28,6 @@ public interface CheckRecordsDao extends CrudDao<CheckRecords> { | |||
| List<Map<String,Object>> findPushForwardGuestCount(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("deviceIds") List<String> deviceIds); | |||
| List<CheckRecords> findTodayList(@Param("id") String id); | |||
| } | |||
| @@ -12,5 +12,7 @@ import com.lecoo.kjg.web.sys.entity.DeviceExt; | |||
| public interface DeviceExtDao extends CrudDao<DeviceExt> { | |||
| public DeviceExt findByDevId(String devId); | |||
| public DeviceExt findByRelationId(String devId); | |||
| public void deleteByDevId(String devId); | |||
| } | |||
| @@ -11,7 +11,7 @@ import com.lecoo.kjg.web.sys.entity.DeviceExtGate; | |||
| @MyBatisDao | |||
| public interface DeviceExtGateDao extends CrudDao<DeviceExtGate> { | |||
| public DeviceExt findByDevId(String devId); | |||
| public DeviceExtGate findByDevId(String devId); | |||
| public void deleteByDevId(String devId); | |||
| } | |||
| @@ -100,4 +100,8 @@ public interface EmpDao extends CrudDao<Emp> { | |||
| long deleteByOffice(String officeCode); | |||
| long realDeleteByOffice(String officeCode); | |||
| List<Emp> findByName(@Param("officeCode") String officeCode, @Param("name") String name); | |||
| List<Emp> findByName2(@Param("name") String name); | |||
| } | |||
| @@ -34,5 +34,8 @@ public interface MyOfficeDao { | |||
| */ | |||
| Office getOfficeByUserCode(@Param("userCode") String userCode); | |||
| List<Office> getOfficeListByUserCode(@Param("userCode") String userCode); | |||
| List<Office> getOfficeListByOffice(@Param("officeCode") String officeCode); | |||
| long deleteByOffice(String officeCode); | |||
| } | |||
| @@ -6,6 +6,7 @@ package com.lecoo.kjg.web.sys.dao; | |||
| import com.jeesite.common.dao.CrudDao; | |||
| import com.jeesite.common.mybatis.annotation.MyBatisDao; | |||
| import com.lecoo.kjg.web.sys.entity.OfficeAccessControl; | |||
| import org.apache.ibatis.annotations.Param; | |||
| import java.util.List; | |||
| @@ -39,4 +40,6 @@ public interface OfficeAccessControlDao extends CrudDao<OfficeAccessControl> { | |||
| List<OfficeAccessControl> findAccessControlByOfficeCode(String officeCode); | |||
| List<OfficeAccessControl> findAccessControlByOfficeCodes(@Param("officeCodes") List<String> officeCodes); | |||
| } | |||
| @@ -31,4 +31,5 @@ public interface UserExtraDao extends CrudDao<User> { | |||
| void clearWxOpenidByLoginCode(@Param("loginCode") String loginCode); | |||
| void updateUserCode(@Param("userCode") String userCode, @Param("newCode") String newCode); | |||
| } | |||
| @@ -28,6 +28,11 @@ public interface VisitRecordsDao extends CrudDao<VisitRecords> { | |||
| VisitRecords findByAccessCode(@Param("accessCode") String accessCode); | |||
| VisitRecords findByName(@Param("name") String name); | |||
| void updByName(@Param("name") String name); | |||
| List<VisitRecords> findByEmp(@Param("empCode") String empCode); | |||
| List<VisitRecords> findListToday(@Param("status") Integer status); | |||
| VisitRecords findByCarPlate(@Param("carPlate") String carPlate); | |||
| @@ -0,0 +1,61 @@ | |||
| /** | |||
| * Copyright (c) 2013-Now http://jeesite.com All rights reserved. | |||
| */ | |||
| package com.lecoo.kjg.web.sys.entity; | |||
| import com.fasterxml.jackson.annotation.JsonFormat; | |||
| import com.jeesite.common.entity.DataEntity; | |||
| import com.jeesite.common.lang.ObjectUtils; | |||
| import com.jeesite.common.mybatis.annotation.Column; | |||
| import com.jeesite.common.mybatis.annotation.Table; | |||
| import lombok.Data; | |||
| import lombok.ToString; | |||
| import org.springframework.format.annotation.DateTimeFormat; | |||
| import org.springframework.stereotype.Component; | |||
| import java.util.Date; | |||
| @Table(name = "tf_project_addition_person", alias = "a", columns = { | |||
| @Column(name = "id", attrName = "id", label = "id", isPK = true), | |||
| @Column(name = "name", attrName = "name", label = "name"), | |||
| @Column(name = "gender", attrName = "gender", label = "gender"), | |||
| @Column(name = "tag", attrName = "tag", label = "tag"), | |||
| @Column(name = "face_feature", attrName = "faceFeature", label = "faceFeature"), | |||
| @Column(name = "created_at", attrName = "createdAt", label = "createdAt"), | |||
| @Column(name = "updated_at", attrName = "updatedAt", label = "updatedAt"), | |||
| }, | |||
| orderBy = "a.updated_at DESC" | |||
| ) | |||
| @ToString | |||
| @Component | |||
| @Data | |||
| public class AdditionPerson extends DataEntity<AdditionPerson> { | |||
| private String name; | |||
| private Integer gender; | |||
| private Integer tag; | |||
| private String faceFeature; | |||
| public AdditionPerson() { | |||
| } | |||
| public AdditionPerson(String id){ | |||
| super(id); | |||
| } | |||
| @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") | |||
| @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") | |||
| private Date createdAt; | |||
| private String updatedAt; | |||
| @Override | |||
| public void setId(String id) { | |||
| if (ObjectUtils.anyNotNull(id) && id.length()>15) { | |||
| this.id = null; | |||
| } else { | |||
| this.id = id; | |||
| } | |||
| } | |||
| } | |||
| @@ -104,4 +104,13 @@ public class AuthMapping extends DataEntity<AuthMapping> { | |||
| String empStr = emp.getRealName()+emp.getCardNo()+feature; | |||
| return DigestUtils.md5DigestAsHex(empStr.getBytes()); | |||
| } | |||
| public String getExactDevId(){ | |||
| if (this.devId.contains("PAD")){ | |||
| return this.devId; | |||
| } else { | |||
| return this.devId.substring(3)+"_PAD1"; | |||
| } | |||
| } | |||
| } | |||
| @@ -82,6 +82,8 @@ public class DeviceExt extends DataEntity<DeviceExt> implements DeviceExtInter { | |||
| private Date createdAt; | |||
| private Date updatedAt; | |||
| private String relationId; | |||
| public String getDeviceId() { | |||
| return deviceId; | |||
| } | |||
| @@ -330,6 +332,14 @@ public class DeviceExt extends DataEntity<DeviceExt> implements DeviceExtInter { | |||
| this.gpuVer = gpuVer; | |||
| } | |||
| public String getRelationId() { | |||
| return relationId; | |||
| } | |||
| public void setRelationId(String relationId) { | |||
| this.relationId = relationId; | |||
| } | |||
| @Override | |||
| public String getJsonString() { | |||
| return null; | |||
| @@ -145,6 +145,7 @@ public class Emp extends DataEntity<Emp> { | |||
| private String empTypeCn; | |||
| public static final String STATUS_AVATAR_AUDIT = "10"; | |||
| public static final String STATUS_AVATAR_AUDIT_BACK = "11"; | |||
| @@ -532,4 +533,5 @@ public class Emp extends DataEntity<Emp> { | |||
| public void setEmpTypeCn(String empTypeCn) { | |||
| this.empTypeCn = empTypeCn; | |||
| } | |||
| } | |||
| @@ -66,6 +66,7 @@ public class EmpAttendance extends DataEntity<EmpAttendance> { | |||
| private Date updatedAt; // updated_at | |||
| private String timePart; | |||
| private String officeCode; | |||
| private String empName; | |||
| @ExcelField(title = "日期", attrName = "dateStr", sort = 10, width = 25 * 256, type = ExcelField.Type.EXPORT,dataFormat = "yyyy-MM-dd", align = ExcelField.Align.CENTER) | |||
| @@ -0,0 +1,68 @@ | |||
| package com.lecoo.kjg.web.sys.scheduler; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.jeesite.modules.sys.entity.User; | |||
| import com.jeesite.modules.sys.utils.UserUtils; | |||
| import com.lecoo.kjg.web.meeting.dao.MeetingRoomOrderDao; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoom; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoomOrder; | |||
| import com.lecoo.kjg.web.meeting.service.MeetingRoomService; | |||
| import com.lecoo.kjg.web.sys.service.EmpService; | |||
| import com.lecoo.kjg.web.sys.utils.SendUtil; | |||
| import me.chanjar.weixin.common.error.WxErrorException; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.scheduling.annotation.Scheduled; | |||
| import org.springframework.stereotype.Component; | |||
| import java.text.SimpleDateFormat; | |||
| import java.util.Calendar; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| @Component | |||
| public class MeetingScheduler { | |||
| @Autowired | |||
| private MeetingRoomOrderDao meetingRoomOrderDao; | |||
| @Autowired | |||
| private SendUtil sendUtil; | |||
| @Autowired | |||
| private EmpService empService; | |||
| @Autowired | |||
| private MeetingRoomService meetingRoomService; | |||
| @Scheduled(cron = "0 15 * * * ?") | |||
| @Scheduled(cron = "0 45 * * * ?") | |||
| public void execute(){ | |||
| List<MeetingRoomOrder> list = meetingRoomOrderDao.findListTodayHour(); | |||
| for(MeetingRoomOrder mro : list) { | |||
| String userCode = empService.get(mro.getOrderBy()).getJobNumber(); | |||
| User u = UserUtils.get(userCode); | |||
| MeetingRoom meetingRoom = meetingRoomService.get(mro.getRoomId().toString()); | |||
| mro.setMeetingRoom(meetingRoom); | |||
| SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); | |||
| SimpleDateFormat dateFormat2 = new SimpleDateFormat("HH:mm"); | |||
| mro.setMeetingRoom(meetingRoom); | |||
| String mms = dateFormat1.format(mro.getOrderDate())+" "+dateFormat2.format( mro.getOrderTime())+"于"+mro.getMeetingRoom().getName(); | |||
| mro.setOrderData(mms); | |||
| try { | |||
| System.err.println("send wx meeting........hour"); | |||
| if (null != u && StringUtils.isNotEmpty(u.getWxOpenid())) { | |||
| // sendUtil.sendToUser(u.getWxOpenid(), "您好,您预订的会议室将要开始了,请准备!", mro, 3); | |||
| sendUtil.sendTempMmsMeeting(u.getMobile(), mro, 3); | |||
| } | |||
| } catch (WxErrorException e) { | |||
| e.printStackTrace(); | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| } | |||
| System.err.println("exec meeting........hour"); | |||
| } | |||
| } | |||
| @@ -1,11 +1,14 @@ | |||
| package com.lecoo.kjg.web.sys.service; | |||
| import com.jeesite.common.service.api.CrudServiceApi; | |||
| import com.lecoo.kjg.web.sys.entity.AccessControl; | |||
| import com.lecoo.kjg.web.sys.entity.AccessControlGroup; | |||
| import java.util.List; | |||
| public interface AccessControlGroupService extends CrudServiceApi<AccessControlGroup> { | |||
| String getNewId(); | |||
| public List<AccessControlGroup> findByUserCode(String userCode); | |||
| } | |||
| @@ -19,4 +19,6 @@ public interface AccessControlService extends CrudServiceApi<AccessControl> { | |||
| List<AccessControl> getAccessControlsByOfficeCodes(String[] officeCodes); | |||
| List<AccessControl> getAccessControlsByOfficeCode(String officeCode); | |||
| List<AccessControl> getAccessControlsByOfficeCodes(List<String> officeCodes); | |||
| } | |||
| @@ -32,6 +32,9 @@ public class AccessControlGroupServiceSupport | |||
| @Autowired | |||
| private AccessControlServiceSupport accessControlServiceSupport; | |||
| @Autowired | |||
| private AccessControlGroupDao accessControlGroupDao; | |||
| @Override | |||
| public String getNewId() { | |||
| List<AccessControlGroup> accessControlGroups = findList(new AccessControlGroup()); | |||
| @@ -54,6 +57,11 @@ public class AccessControlGroupServiceSupport | |||
| } | |||
| } | |||
| @Override | |||
| public List<AccessControlGroup> findByUserCode(String userCode) { | |||
| return accessControlGroupDao.findByUserCode(userCode); | |||
| } | |||
| public void updateOfficeAndAc(AccessControlGroup accessControlGroup){ | |||
| officeAccessControlGroupDao.deleteByGroupId(accessControlGroup.getGroupCode()); | |||
| @@ -18,6 +18,7 @@ import org.springframework.transaction.annotation.Transactional; | |||
| import java.math.BigDecimal; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| @Service | |||
| @@ -148,16 +149,17 @@ public class AccessControlServiceSupport | |||
| empAccessControlService.deleteByAccessControlId(accessControlId);//待修改 | |||
| //添加OfficeDevice和EmpAccessControl关联 | |||
| if (ObjectUtils.anyNotNull(officeIds)) { | |||
| List<String> originList = Lists.newArrayList(); | |||
| // List<String> originList = Lists.newArrayList(); | |||
| // AccessControl ac = accessControlService.get(accessControl.getAccessControlId()); | |||
| OfficeAccessControl oac = new OfficeAccessControl(); | |||
| oac.setAccessControlId(accessControlId); | |||
| List<OfficeAccessControl> oacList = officeAccessControlService.findList(oac); | |||
| List<String> originList = oacList.stream().map(OfficeAccessControl::getOfficeId).collect(Collectors.toList()); | |||
| oacList.forEach(officeAccessControl -> { | |||
| /*oacList.forEach(officeAccessControl -> { | |||
| originList.add(officeAccessControl.getOfficeId()); | |||
| }); | |||
| });*/ | |||
| List<String> delIds = ListUtils.subtract(originList, officeIds); | |||
| List<String> addIds = ListUtils.subtract(officeIds, originList); | |||
| @@ -208,17 +210,14 @@ public class AccessControlServiceSupport | |||
| empAccessControlService.deleteByAccessControlId(accessControlId);//待修改 | |||
| //添加OfficeDevice和EmpAccessControl关联 | |||
| if (ObjectUtils.anyNotNull(officeIds)) { | |||
| List<String> originList = Lists.newArrayList(); | |||
| // List<String> originList = Lists.newArrayList(); | |||
| // AccessControl ac = accessControlService.get(accessControl.getAccessControlId()); | |||
| OfficeAccessControl oac = new OfficeAccessControl(); | |||
| oac.setAccessControlId(accessControlId); | |||
| List<OfficeAccessControl> oacList = officeAccessControlService.findList(oac); | |||
| oacList.forEach(officeAccessControl -> { | |||
| originList.add(officeAccessControl.getOfficeId()); | |||
| }); | |||
| List<String> originList = oacList.stream().map(OfficeAccessControl::getOfficeId).collect(Collectors.toList()); | |||
| List<String> delIds = ListUtils.subtract(originList, officeIds); | |||
| List<String> addIds = ListUtils.subtract(officeIds, originList); | |||
| @@ -274,6 +273,8 @@ public class AccessControlServiceSupport | |||
| @Override | |||
| public List<AccessControl> getAccessControlsByOfficeCode(String officeCode) { | |||
| List<OfficeAccessControl> list = officeAccessControlDao.findAccessControlByOfficeCode(officeCode); | |||
| List<AccessControl> accessControls = Lists.newArrayList(); | |||
| @@ -288,4 +289,22 @@ public class AccessControlServiceSupport | |||
| return accessControls; | |||
| } | |||
| @Override | |||
| public List<AccessControl> getAccessControlsByOfficeCodes(List<String> officeCodes) { | |||
| List<OfficeAccessControl> list = officeAccessControlDao.findAccessControlByOfficeCodes(officeCodes); | |||
| List<AccessControl> accessControls = Lists.newArrayList(); | |||
| for (OfficeAccessControl oac : list) { | |||
| AccessControl temp = accessControlService.get(oac.getAccessControlId()); | |||
| if (ObjectUtils.anyNotNull(temp)) { | |||
| accessControls.add(temp); | |||
| } | |||
| } | |||
| return accessControls; | |||
| } | |||
| } | |||
| @@ -115,11 +115,12 @@ public class AdminServiceSupport implements AdminService { | |||
| userDataScopes.add(userDataScope); | |||
| Office office = officeService.get(id); | |||
| if(RoleUtils.hasUserRole(userCode, "corpAdmin")) { | |||
| userDao.updateUserCorp(office.getOfficeName(), id, userCode); | |||
| /*if(RoleUtils.hasUserRole(userCode, "corpAdmin")) { | |||
| userDao.updateUserCorp("全部", "0", userCode); | |||
| } else { | |||
| userDao.updateUserCorp(office.getOfficeName(), id, userCode); | |||
| } | |||
| }*/ | |||
| } | |||
| userDataScope = new UserDataScope(); | |||
| userDataScope.setUserCode(userCode); | |||
| @@ -27,14 +27,6 @@ public class AuthMappingItemProcessorService implements ItemProcessor<AuthMappin | |||
| @Autowired | |||
| private EmpDao empDao; | |||
| @Autowired | |||
| private AuthMappingDao authMappingDao; | |||
| @Autowired | |||
| private DeviceServiceSupport deviceService; | |||
| @Autowired | |||
| private RedisUtils redisUtils; | |||
| @Override | |||
| public AuthMapping process(AuthMapping authMapping) throws Exception { | |||
| @@ -52,27 +44,7 @@ public class AuthMappingItemProcessorService implements ItemProcessor<AuthMappin | |||
| int status = jsonObject.getInteger("status"); | |||
| if (status == 0) { | |||
| String mis = DateUtils.getMillsSecondsDouble(); | |||
| authMappingDao.updateTsByEmp(authMapping.getEmpId(), mis); | |||
| List<AuthMapping> authMappings = authMappingDao.getByEmp(authMapping.getEmpId()); | |||
| List<String> list = Lists.newArrayList(); | |||
| authMappings.forEach(am->{ | |||
| list.add(am.getDevId()); | |||
| }); | |||
| System.err.println("============authmapping process===1"); | |||
| System.err.println(list); | |||
| System.err.println(mis); | |||
| System.err.println("============authmapping process===2"); | |||
| deviceService.updateAuthTs(list, mis); | |||
| for (String a : list) { | |||
| if (StringUtils.isNotEmpty(a) && Emp.STATUS_NORMAL.equals(emp.getStatus())) { | |||
| redisUtils.setGroupString(a+":face-latest-ts", mis); | |||
| } | |||
| } | |||
| empService.updAuthMapping(emp); | |||
| } | |||
| } | |||
| return null; | |||
| @@ -193,7 +193,7 @@ public class DeviceServiceSupport | |||
| // ac.setOffice(officeService.get()); | |||
| String userOfficeCode = ""; | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode)|| BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| @@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSON; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.beust.jcommander.internal.Lists; | |||
| import com.jeesite.common.cache.CacheUtils; | |||
| import com.jeesite.common.codec.DesUtils; | |||
| import com.jeesite.common.collect.ListUtils; | |||
| import com.jeesite.common.config.Global; | |||
| import com.jeesite.common.entity.Extend; | |||
| import com.jeesite.common.lang.ObjectUtils; | |||
| @@ -158,6 +160,9 @@ public class EmpServiceSupport | |||
| @Autowired | |||
| OfficeDeviceService officeDeviceService; | |||
| @Autowired | |||
| OfficeAccessControlService officeAccessControlService; | |||
| @Autowired | |||
| EmpAccessControlService empAccessControlService; | |||
| @@ -205,31 +210,35 @@ public class EmpServiceSupport | |||
| empAccessControlDao.batchInsertEmpAccessControlInfo(empDevicieList); | |||
| } | |||
| User u = new User(); | |||
| String uuid = UUID.randomUUID().toString().replaceAll("-", ""); | |||
| if(emp.getIsNewRecord()) { | |||
| User u = new User(); | |||
| String uuid = UUID.randomUUID().toString().replaceAll("-", ""); | |||
| emp.setJobNumber(emp.getJobNumber()+"_"+uuid.substring(0, 5)); | |||
| } | |||
| u.setMobile(emp.getPhoneNumber()); | |||
| u.setUserCode(emp.getJobNumber()); | |||
| u.setLoginCode(emp.getJobNumber()); | |||
| u.setAvatar(emp.getFaceImageName()); | |||
| u.setUserType(User.USER_TYPE_PERSION); | |||
| String secretKey = Global.getConfig("shiro.loginSubmit.secretKey"); | |||
| u.setPassword(DesUtils.encode(emp.getPhoneNumber(), secretKey)); | |||
| u.setUserName(emp.getRealName()); | |||
| u.setMgrType(User.MGR_TYPE_NOT_ADMIN); | |||
| if (emp.getIsNewRecord()) { | |||
| u.setMobile(emp.getPhoneNumber()); | |||
| u.setUserCode(emp.getJobNumber()); | |||
| u.setLoginCode(emp.getJobNumber()); | |||
| u.setAvatar(emp.getFaceImageName()); | |||
| u.setUserType(User.USER_TYPE_PERSION); | |||
| String secretKey = Global.getConfig("shiro.loginSubmit.secretKey"); | |||
| u.setPassword(DesUtils.encode(emp.getPhoneNumber(), secretKey)); | |||
| u.setUserName(emp.getRealName()); | |||
| u.setMgrType(User.MGR_TYPE_NOT_ADMIN); | |||
| userExtraDao.insert(u); | |||
| } else { | |||
| User user = UserUtils.get(emp.getJobNumber()); | |||
| Emp originEmp = empService.get(emp.getId()); | |||
| System.err.println(originEmp.getJobNumber()); | |||
| User user = UserUtils.get(originEmp.getJobNumber()); | |||
| System.err.println(user); | |||
| if (ObjectUtils.anyNotNull(user)) { | |||
| UserUtils.clearCache(user); | |||
| user.setAvatar(emp.getFaceImageName()); | |||
| user.setUserName(emp.getRealName()); | |||
| user.setMobile(emp.getPhoneNumber()); | |||
| // user.setUserCode(emp.getJobNumber()); | |||
| user.setLoginCode(emp.getJobNumber()); | |||
| userService.update(user); | |||
| } else { | |||
| userExtraDao.insert(u); | |||
| userExtraDao.updateUserCode(originEmp.getJobNumber(), emp.getJobNumber()); | |||
| } | |||
| } | |||
| @@ -298,8 +307,8 @@ public class EmpServiceSupport | |||
| if (ObjectUtils.anyNotNull(parent) && StringUtils.isNotEmpty(parent.getOfficeCode())) { | |||
| po = officeDao.get(parent); | |||
| office.setParentCode(po.getOfficeCode()); | |||
| office.setParentCodes(StringUtils.isNotEmpty(po.getParentCodes())?(po.getParentCodes()+","+po.getOfficeCode()) : po.getOfficeCode()); | |||
| office.setTreeNames(parent.getTreeNames() +"/"+ office.getFullName()); | |||
| office.setParentCodes((StringUtils.isNotEmpty(po.getParentCodes())?(po.getParentCodes()+po.getOfficeCode()) : po.getOfficeCode())+","); | |||
| office.setTreeNames(po.getTreeNames() +"/"+ office.getFullName()); | |||
| } else { | |||
| office.setTreeNames(office.getFullName()); | |||
| } | |||
| @@ -348,7 +357,7 @@ public class EmpServiceSupport | |||
| //对管理员进行操作 获取到登录的用户进行判断 | |||
| String loginCode = UserUtils.getUser().getLoginCode(); | |||
| if (!BusinessUtils.isSecAdmin(loginCode)) { | |||
| if (!BusinessUtils.isSecAdmin(loginCode)|| BusinessUtils.isCorpAdmin(loginCode)) { | |||
| if (!StringUtils.isEmpty(adminIds)) { | |||
| String[] adminList = adminIds.split(","); | |||
| List<UserDataScope> userDataScopes = new ArrayList<>(); | |||
| @@ -380,17 +389,55 @@ public class EmpServiceSupport | |||
| @Transactional(readOnly = false) | |||
| public void executeUpdateInfo(Office office, String empIds, String adminIds, Boolean flag) { | |||
| String oldOfficeCode = office.getOfficeCode(); | |||
| /*String oldOfficeCode = office.getOfficeCode(); | |||
| //批量修改操作 | |||
| updateToDefaultOffice(defaultOffice, oldOfficeCode); | |||
| //移除掉第一次添加的管理员 | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (!BusinessUtils.isSecAdmin(userCode)) { | |||
| if (!BusinessUtils.isSecAdmin(userCode)|| BusinessUtils.isCorpAdmin(userCode)) { | |||
| userDataScopeService.deleteByOfficeCode(office.getOfficeCode()); | |||
| } | |||
| //调用新增 | |||
| executeAddInfo(office, empIds, adminIds, flag); | |||
| executeAddInfo(office, empIds, adminIds, flag);*/ | |||
| List<Office> findList = officeService.findList(new Office()); | |||
| Integer maxSort = 0; | |||
| if (null != findList && findList.size() > 0) { | |||
| List<Integer> treeSorts = Lists.newArrayList(); | |||
| for (Office findOffice : findList) { | |||
| Integer treeSort = findOffice.getTreeSort(); | |||
| treeSorts.add(treeSort); | |||
| } | |||
| maxSort = Collections.max(treeSorts); | |||
| } | |||
| Office parent = office.getParent(); | |||
| Office po = null; | |||
| if (ObjectUtils.anyNotNull(parent) && StringUtils.isNotEmpty(parent.getOfficeCode())) { | |||
| po = officeDao.get(parent); | |||
| office.setParentCode(po.getOfficeCode()); | |||
| office.setParentCodes((StringUtils.isNotEmpty(po.getParentCodes())?(po.getParentCodes()+po.getOfficeCode()) : po.getOfficeCode())+","); | |||
| office.setTreeNames(po.getTreeNames() +"/"+ office.getFullName()); | |||
| } else { | |||
| office.setTreeNames(office.getFullName()); | |||
| } | |||
| if (true == flag) { | |||
| //保存对应公司 | |||
| office.setTreeSort(maxSort + 30); | |||
| Extend extend = new Extend(); | |||
| extend.setExtendS1("1"); | |||
| office.setExtend(extend); | |||
| officeService.save(office); | |||
| //新增公司的时候,添加公司对应的默认班次信息` | |||
| // Shift defaultShift = shiftService.getDefaultShift(office.getOfficeCode()); | |||
| // shiftService.insert(defaultShift); | |||
| } else { | |||
| officeService.update(office); | |||
| } | |||
| } | |||
| /** | |||
| @@ -582,21 +629,18 @@ public class EmpServiceSupport | |||
| return new ResponseInfo(ResponseCode.FACE_FETCH_FAIL, hasObj.getString("errMsg")); | |||
| } | |||
| JSONObject obj = faceServiceSupport.hasface(token, id, base64Image); | |||
| JSONObject faceRectangle = obj.getJSONObject("data"); | |||
| int status = obj.getInteger("status"); | |||
| JSONObject obj = faceServiceSupport.getFaceExtraction(token, id, base64Image); | |||
| if (status != 0) { | |||
| return new ResponseInfo(ResponseCode.FACE_FETCH_FAIL, obj.getString("errMsg")); | |||
| } | |||
| if (!ObjectUtils.anyNotNull(faceRectangle) || faceRectangle.getJSONObject("faceRectangle").isEmpty()) { | |||
| return new ResponseInfo(ResponseCode.CW_FACE_IMG_NO_FACE, "no face"); | |||
| if (!obj.containsKey("feature")) { | |||
| return new ResponseInfo(ResponseCode.FACE_FETCH_FAIL, obj.getString("errorMessage")); | |||
| } | |||
| Date date = new Date(); | |||
| emp.setUpdateTime(date); | |||
| emp.setFaceImageName(newFileName); | |||
| JSONArray array = faceRectangle.getJSONArray("feature"); | |||
| JSONArray array = obj.getJSONArray("feature"); | |||
| EmpFaceFeature empFaceFeature = new EmpFaceFeature(); | |||
| empFaceFeature.setEmpId(id); | |||
| @@ -624,8 +668,6 @@ public class EmpServiceSupport | |||
| } | |||
| this.updAuthMapping(emp); | |||
| // } | |||
| return new ResponseInfo(auditStatus); | |||
| } catch (UnsupportedFormatException e){ | |||
| @@ -633,6 +675,8 @@ public class EmpServiceSupport | |||
| } catch (IOException e) { | |||
| e.printStackTrace(); | |||
| return new ResponseInfo(ResponseCode.FILE_UPLOAD_FAIL); | |||
| } catch (Exception e) { | |||
| throw new RuntimeException(e); | |||
| } | |||
| } | |||
| @@ -694,7 +738,13 @@ public class EmpServiceSupport | |||
| } | |||
| } else if (direction == CheckRecords.TYPE_DIRECTION_OUT) { | |||
| empAttendance.setCheckOutTime(checkTime); | |||
| } else {} | |||
| } else { | |||
| if (null == empAttendance.getCheckInTime()) { | |||
| empAttendance.setCheckInTime(checkTime); | |||
| } else { | |||
| empAttendance.setCheckOutTime(checkTime); | |||
| } | |||
| } | |||
| if (null!=empAttendance.getCheckInTime() && null != empAttendance.getCheckOutTime()) { | |||
| Date cin = empAttendance.getCheckInTime(); | |||
| @@ -711,7 +761,9 @@ public class EmpServiceSupport | |||
| ea.setCheckInTime(checkDate); | |||
| } else if (direction == CheckRecords.TYPE_DIRECTION_OUT) { | |||
| ea.setCheckOutTime(checkDate); | |||
| } else {} | |||
| } else { | |||
| ea.setCheckInTime(checkDate); | |||
| } | |||
| ea.setIsNewRecord(true); | |||
| ea.setEmpName(emp.getRealName()); | |||
| ea.setDateStr(DateUtils.formatDate(new Date(), "yyyy-MM-dd")); | |||
| @@ -772,6 +824,8 @@ public class EmpServiceSupport | |||
| updMappingTs(deviceIds, emp); | |||
| updAuthMapping(emp); | |||
| } | |||
| @@ -895,21 +949,37 @@ public class EmpServiceSupport | |||
| return ; | |||
| } | |||
| OfficeDevice officeDevice = new OfficeDevice(); | |||
| officeDevice.setOfficeId(officeCode); | |||
| OfficeAccessControl ods = new OfficeAccessControl(); | |||
| ods.setOfficeId(officeCode); | |||
| List<OfficeDevice> list = officeDeviceService.findList(officeDevice); | |||
| Office o = officeDao.get(emp.getOffice()); | |||
| List<String> ids = new ArrayList<>(); | |||
| ids.addAll(Arrays.asList(StringUtils.split(o.getParentCodes(), ","))); | |||
| ids.add(o.getOfficeCode()); | |||
| List<AccessControl> list = accessControlService.getAccessControlsByOfficeCodes(ids); | |||
| System.err.println(list.size()+" "+ids); | |||
| if (list.size()>0) { | |||
| for (OfficeDevice od : list) { | |||
| String mis = DateUtils.getMillsSecondsDouble(); | |||
| for (AccessControl od : list) { | |||
| AuthMapping authMapping = new AuthMapping(); | |||
| String empId = emp.getId(); | |||
| authMapping.setEmpId(empId); | |||
| authMapping.setIsUpdFace(1);//新增记录默认脸已被改 | |||
| authMapping.setDevId(od.getDeviceId()); | |||
| authMapping.setHasAuth(0); | |||
| authMapping.setDevId(od.getAccessControlId()); | |||
| authMapping.setHasAuth(1); | |||
| authMapping.setIsNewRecord(true); | |||
| authMapping.setUpdatedAt("0");//新增记录设置update_at为0 | |||
| authMapping.setUpdatedAt(mis);//新增记录设置update_at为0 | |||
| authMappingDao.insert(authMapping); | |||
| System.err.println("=======---===="); | |||
| System.err.println("devId=="+od.getDeviceId()); | |||
| System.err.println("=======---===="); | |||
| if (od.getDeviceId().endsWith("_PAD1")){ | |||
| redisUtils.setGroupString(od.getDeviceId()+":face-latest-ts", mis); | |||
| } else { | |||
| redisUtils.setGroupString(od.getDeviceId()+"_PAD1"+":face-latest-ts", mis); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -920,7 +990,12 @@ public class EmpServiceSupport | |||
| } | |||
| public void updAuthMapping(Emp emp, int hasAuth){ | |||
| System.err.println("emp----id===111"); | |||
| System.err.println(emp.getId()); | |||
| List<AuthMapping> list = authMappingDao.getByEmp(emp.getId()); | |||
| System.err.println(list.size()); | |||
| System.err.println("emp----id===222"); | |||
| if (list.size()>0) { | |||
| String mis = DateUtils.getMillsSecondsDouble(); | |||
| for (AuthMapping am : list) { | |||
| @@ -928,9 +1003,12 @@ public class EmpServiceSupport | |||
| am.setHasAuth(hasAuth); | |||
| am.setIsUpdFace(1); | |||
| authMappingDao.update(am); | |||
| Device device = deviceService.findByDevId(am.getDevId()); | |||
| if (ObjectUtils.anyNotNull(device) && Emp.STATUS_NORMAL.equals(emp.getStatus())) { | |||
| redisUtils.setGroupString(am.getDevId()+":face-latest-ts", mis); | |||
| System.err.println("=======---===="+am.getDevId()); | |||
| System.err.println("=======---===="+am.getExactDevId()); | |||
| redisUtils.setGroupString(am.getExactDevId()+":face-latest-ts", mis); | |||
| Device device = deviceService.findByDevId(am.getExactDevId()); | |||
| if (ObjectUtils.anyNotNull(device)) { | |||
| device.setLatestAuthTs(new BigDecimal(mis)); | |||
| deviceService.update(device); | |||
| } | |||
| @@ -964,17 +1042,17 @@ public class EmpServiceSupport | |||
| public void reg(User user, Emp emp){ | |||
| this.save(emp); | |||
| userExtraDao.insert(user); | |||
| OfficeDevice od = new OfficeDevice(); | |||
| OfficeAccessControl od = new OfficeAccessControl(); | |||
| od.setOfficeId(emp.getOffice().getOfficeCode()); | |||
| List<OfficeDevice> list = officeDeviceService.findList(od); | |||
| List<EmpDevice> edList = Lists.newLinkedList(); | |||
| list.forEach(officeDevice -> { | |||
| EmpDevice ed = new EmpDevice(); | |||
| ed.setDeviceId(officeDevice.getDeviceId()); | |||
| List<OfficeAccessControl> list = officeAccessControlService.findList(od); | |||
| List<EmpAccessControl> edList = Lists.newLinkedList(); | |||
| list.forEach(officeAccessControl -> { | |||
| EmpAccessControl ed = new EmpAccessControl(); | |||
| ed.setAccessControlId(officeAccessControl.getAccessControlId()); | |||
| ed.setEmpId(emp.getId()); | |||
| edList.add(ed); | |||
| }); | |||
| empDeviceDao.insertBatch(edList); | |||
| empAccessControlDao.insertBatch(edList); | |||
| addAuthMapping(emp);//根据部门添加权限 | |||
| } | |||
| @@ -1030,7 +1108,7 @@ public class EmpServiceSupport | |||
| u.setStatus(User.STATUS_NORMAL); | |||
| u.setUserCode(u.getLoginCode()); | |||
| Extend extend = new Extend(); | |||
| extend.setExtendS1(User.STATUS_AUDIT); | |||
| extend.setExtendS1(User.STATUS_NORMAL); | |||
| u.setExtend(extend); | |||
| if (!StringUtils.isNotEmpty(o.getOfficeCode())) { | |||
| @@ -1045,7 +1123,7 @@ public class EmpServiceSupport | |||
| emp.setPhoneNumber(u.getMobile()); | |||
| emp.setIsNewRecord(true); | |||
| emp.setEmpType("1"); | |||
| emp.setStatus(Emp.STATUS_AUDIT); | |||
| emp.setStatus(Emp.STATUS_NORMAL); | |||
| emp.setOffice(office); | |||
| emp.setRegisterTime(new Date()); | |||
| emp.setDepartment(office.getOfficeName()); | |||
| @@ -1059,16 +1137,15 @@ public class EmpServiceSupport | |||
| faceImage = faceImage.replaceAll("data:image/jpeg;base64,", ""); | |||
| JSONObject faceRectangle = faceServiceSupport.hasface("", emp.getId(), faceImage); | |||
| int status = faceRectangle.getInteger("status"); | |||
| faceRectangle = faceRectangle.getJSONObject("data"); | |||
| String userName = emp.getRealName(); | |||
| if (status != 0) { | |||
| return "抱歉,您的账号 " + userName + " 注册失败,"+faceRectangle.getString("errMsg"); | |||
| JSONObject faceRectangle = null; | |||
| try { | |||
| faceRectangle = faceServiceSupport.getFaceExtraction("", emp.getId(), faceImage); | |||
| } catch (Exception e) { | |||
| return e.getMessage(); | |||
| } | |||
| if (!ObjectUtils.anyNotNull(faceRectangle) || faceRectangle.getJSONObject("faceRectangle").isEmpty()) { | |||
| return "抱歉,您的账号 " + userName + " 注册失败,上传的头像未找到人脸!"; | |||
| String userName = emp.getRealName(); | |||
| if (!faceRectangle.containsKey("feature")) { | |||
| return "抱歉,您的账号 " + userName + " 注册失败,"+faceRectangle.getString("errorMessage"); | |||
| } | |||
| JSONObject json = imageUtil.base64ToStorage(faceImage, true); | |||
| @@ -1084,6 +1161,9 @@ public class EmpServiceSupport | |||
| empFaceFeature.setFaceFeature(array.toJSONString()); | |||
| empFaceFeatureDao.insert(empFaceFeature); | |||
| emp.setEmpFaceFeature(empFaceFeature); | |||
| } else { | |||
| System.err.println("image stored failed"); | |||
| System.err.println(json.toJSONString()); | |||
| } | |||
| } | |||
| return ""; | |||
| @@ -1132,7 +1212,7 @@ public class EmpServiceSupport | |||
| int status = getJson.getInteger("status"); | |||
| String featureStr = ""; | |||
| if (0 == status) { | |||
| featureStr = getJson.getString("feature"); | |||
| featureStr = getJson.getJSONArray("feature").toJSONString(); | |||
| } else { | |||
| return getJson; | |||
| } | |||
| @@ -1166,11 +1246,15 @@ public class EmpServiceSupport | |||
| faceImage = faceImage.replaceAll("data:image/jpeg;base64,", ""); | |||
| JSONObject faceRectangle = faceServiceSupport.hasface("", emp.getId(), faceImage); | |||
| faceRectangle = faceRectangle.getJSONObject("data"); | |||
| JSONObject faceRectangle = null; | |||
| try { | |||
| faceRectangle = faceServiceSupport.getFaceExtraction("", emp.getId(), faceImage); | |||
| } catch (Exception e) { | |||
| throw new RuntimeException(e); | |||
| } | |||
| JSONObject json = imageUtil.base64ToStorage(faceImage, true); | |||
| if (json.getBoolean("ok")) { | |||
| if (faceRectangle.containsKey("feature")) { | |||
| String imgUrl = json.getString("imgUrl"); | |||
| emp.setFaceImageName(imgUrl); | |||
| @@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSON; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.jeesite.common.config.Global; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.lecoo.kjg.web.sys.utils.ImageUtil; | |||
| import com.lecoo.kjg.web.utils.OkHttpUtil; | |||
| import kong.unirest.HttpResponse; | |||
| import kong.unirest.Unirest; | |||
| import lombok.extern.slf4j.Slf4j; | |||
| @@ -24,6 +26,7 @@ import java.io.BufferedReader; | |||
| import java.io.IOException; | |||
| import java.io.InputStreamReader; | |||
| import java.util.Map; | |||
| import java.util.UUID; | |||
| @Slf4j | |||
| @Component | |||
| @@ -132,189 +135,55 @@ public class FaceServiceSupport { | |||
| return token;*/ | |||
| } | |||
| public JSONObject getFaceExtraction(String token, String imageId, String imgBase64) { | |||
| /********CURL 请求方式********/ | |||
| /*JSONObject paramJson = new JSONObject(); | |||
| paramJson.put("imageId", imageId); | |||
| paramJson.put("base64Data", imgBase64); | |||
| paramJson.put("detect", 1); | |||
| String content = paramJson.toJSONString(); | |||
| String[] cmds = {"curl", "--location", "--request", "POST", faceServer + extractionPath, "--header", "Authorization: Bearer "+token, "--header", "Content-Type: application/json", "--data", content}; | |||
| String res = execCurl(cmds); | |||
| log.info("----------------"); | |||
| log.info(faceServer); | |||
| log.info("----------------"); | |||
| log.info("Face Engine-detectFace return >> " + res); | |||
| JSONObject json = JSONObject.parseObject(res); | |||
| JSONObject data = json.getJSONArray("result").getJSONObject(0); | |||
| return data;*/ | |||
| public JSONObject getFaceExtraction(String token, String imageId, String imgBase64) throws Exception { | |||
| imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||
| JSONObject j1 = new JSONObject().fluentPut("faceName","faceName").fluentPut("base64Data", imgBase64).fluentPut("detect", true).fluentPut("quality", true); | |||
| JSONArray jsonArray = new JSONArray().fluentAdd(j1); | |||
| System.out.println("获取特征值地址:"+faceServer + extractionPath); | |||
| System.out.println("获取特征值地址参数:"+jsonArray.toJSONString()); | |||
| String result = OkHttpUtil.postCvJson(faceServer+extractionPath, new JSONObject().fluentPut("images", jsonArray)); | |||
| System.err.println("获取特征值结果:"+result); | |||
| /********restTemplate 请求方式*************/ | |||
| HttpHeaders headers = new HttpHeaders(); | |||
| headers.setContentType(MediaType.APPLICATION_JSON); | |||
| headers.set("Authorization", "Bearer "+token); | |||
| MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>(); | |||
| map.add("imageId", imageId); | |||
| map.add("base64Data", imgBase64); | |||
| map.add("detect", true); | |||
| map.add("quality", true); | |||
| HttpEntity<Map<String, Object>> entity = new HttpEntity<>(map.toSingleValueMap(), headers); | |||
| // System.err.println(faceServer + extractionPath); | |||
| String emps = Global.getConfig("face.modeUpdEmps"); | |||
| String path = faceServer; | |||
| System.err.println("emps==========1111"); | |||
| System.err.println(emps); | |||
| System.err.println(imageId); | |||
| if (emps.contains(imageId)) { | |||
| System.err.println("---------------uuuuuuuuu"); | |||
| path = updFaceServer; | |||
| } | |||
| System.err.println(faceServer); | |||
| System.err.println(updFaceServer); | |||
| System.err.println(path); | |||
| System.err.println(path + extractionPath); | |||
| System.err.println("emps==========2222"); | |||
| String result = restTemplate.postForObject(path + extractionPath, entity, String.class, "face-detection"); | |||
| // log.info("Face Engine-detectFace return >> " + result); | |||
| JSONObject resultJson = JSON.parseObject(result); | |||
| if (!resultJson.containsKey("errorCode") && 0==resultJson.getInteger("status")) { | |||
| return resultJson.getJSONArray("result").getJSONObject(0).getJSONArray("faces").getJSONObject(0); | |||
| } else { | |||
| return resultJson; | |||
| } | |||
| // System.err.println(resultJson.toJSONString()); | |||
| return resultJson.getJSONArray("result").getJSONObject(0); | |||
| /*****Unirest 请求方式*****/ | |||
| /*JSONObject paramJson = new JSONObject(); | |||
| paramJson.put("imageId", imageId); | |||
| paramJson.put("base64Data", imgBase64); | |||
| paramJson.put("detect", 1); | |||
| String content = paramJson.toJSONString(); | |||
| HttpResponse<String> response = Unirest.post(faceServer + extractionPath) | |||
| .header("Authorization", "Bearer "+token) | |||
| .header("Content-Type", "application/json") | |||
| .body(content) | |||
| .asString(); | |||
| String result = response.getBody(); | |||
| log.info("Face Engine-detectFace return >> " + result); | |||
| JSONObject resultJson = JSON.parseObject(result); | |||
| return resultJson.getJSONArray("result").getJSONObject(0);*/ | |||
| } | |||
| public JSONObject getFaceCheck(String token, String imageId, String imgBase64) throws Exception{ | |||
| /********CURL 请求方式********/ | |||
| /*JSONObject paramJson = new JSONObject(); | |||
| paramJson.put("imageId", imageId); | |||
| paramJson.put("base64Data", imgBase64); | |||
| paramJson.put("detect", 1); | |||
| String content = paramJson.toJSONString(); | |||
| String[] cmds = {"curl", "--location", "--request", "POST", faceServer + extractionPath, "--header", "Authorization: Bearer "+token, "--header", "Content-Type: application/json", "--data", content}; | |||
| String res = execCurl(cmds); | |||
| log.info("----------------"); | |||
| log.info(faceServer); | |||
| log.info("----------------"); | |||
| log.info("Face Engine-detectFace return >> " + res); | |||
| JSONObject json = JSONObject.parseObject(res); | |||
| JSONObject data = json.getJSONArray("result").getJSONObject(0); | |||
| return data;*/ | |||
| /********restTemplate 请求方式*************/ | |||
| try { | |||
| imgBase64 = imgBase64.replaceAll("data:image/jpeg;base64,", ""); | |||
| HttpHeaders headers = new HttpHeaders(); | |||
| headers.setContentType(MediaType.APPLICATION_JSON); | |||
| headers.set("Authorization", "Bearer "+token); | |||
| MultiValueMap<String, Object> map = new LinkedMultiValueMap<String, Object>(); | |||
| // map.add("imageId", imageId); | |||
| // map.add("base64Data", imgBase64); | |||
| JSONArray jsonArray = new JSONArray(); | |||
| JSONObject jsonObject = new JSONObject(); | |||
| jsonObject.put("imageId",imageId); | |||
| jsonObject.put("base64Data",imgBase64); | |||
| jsonArray.add(jsonObject); | |||
| map.add("detect", true); | |||
| map.add("images", jsonArray); | |||
| HttpEntity<Map<String, Object>> entity = new HttpEntity<>(map.toSingleValueMap(), headers); | |||
| System.err.println(faceServer + qualityPath); | |||
| String result = restTemplate.postForObject(faceServer + qualityPath, entity, String.class, "face-detection"); | |||
| // log.info("Face Engine-detectFace return >> " + result); | |||
| JSONObject resultJson = JSON.parseObject(result); | |||
| return resultJson.getJSONArray("result").getJSONObject(0); | |||
| } catch (Exception e) { | |||
| System.err.println("8888err"); | |||
| e.printStackTrace(); | |||
| throw e; | |||
| } | |||
| /*****Unirest 请求方式*****/ | |||
| /*JSONObject paramJson = new JSONObject(); | |||
| paramJson.put("imageId", imageId); | |||
| paramJson.put("base64Data", imgBase64); | |||
| paramJson.put("detect", 1); | |||
| String content = paramJson.toJSONString(); | |||
| HttpResponse<String> response = Unirest.post(faceServer + extractionPath) | |||
| .header("Authorization", "Bearer "+token) | |||
| .header("Content-Type", "application/json") | |||
| .body(content) | |||
| .asString(); | |||
| String result = response.getBody(); | |||
| log.info("Face Engine-detectFace return >> " + result); | |||
| imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||
| JSONObject jsonObject = new JSONObject(); | |||
| jsonObject.put("imageId", StringUtils.isEmpty(imageId)? UUID.randomUUID().toString():imageId); | |||
| jsonObject.put("base64Data",imgBase64); | |||
| jsonObject.put("detect", true); | |||
| JSONArray jsonArray = new JSONArray().fluentAdd(jsonObject); | |||
| System.out.println("获取特征值参数:"+jsonArray.toJSONString()); | |||
| System.out.println("获取特征值地址:"+faceServer + qualityPath); | |||
| String result = OkHttpUtil.postCvJson(faceServer+qualityPath, new JSONObject().fluentPut("images", jsonArray)); | |||
| System.err.println("人脸检测结果:"+result); | |||
| JSONObject resultJson = JSON.parseObject(result); | |||
| return resultJson.getJSONArray("result").getJSONObject(0);*/ | |||
| return resultJson.getJSONArray("result").getJSONObject(0); | |||
| } | |||
| public JSONObject hasface(String token, String imageId, String imgBase64) { | |||
| /********CURL 请求方式********/ | |||
| /*JSONObject paramJson = new JSONObject(); | |||
| paramJson.put("imageId", imageId); | |||
| paramJson.put("base64Data", imgBase64); | |||
| paramJson.put("detect", 1); | |||
| String content = paramJson.toJSONString(); | |||
| String[] cmds = {"curl", "--location", "--request", "POST", faceServer + extractionPath, "--header", "Authorization: Bearer "+token, "--header", "Content-Type: application/json", "--data", content}; | |||
| String res = execCurl(cmds); | |||
| log.info("----------------"); | |||
| log.info(faceServer); | |||
| log.info("----------------"); | |||
| log.info("Face Engine-detectFace return >> " + res); | |||
| JSONObject json = JSONObject.parseObject(res); | |||
| JSONObject data = json.getJSONArray("result").getJSONObject(0); | |||
| return data;*/ | |||
| JSONObject json = new JSONObject(); | |||
| try { | |||
| imgBase64 = imgBase64.replaceAll("data:image/jpeg;base64,", ""); | |||
| JSONObject res = this.getFaceExtraction(token, imageId, imgBase64); | |||
| JSONObject obj = res.getJSONArray("faces").getJSONObject(0); | |||
| imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||
| JSONObject res = this.getFaceCheck(token, imageId, imgBase64); | |||
| if (!obj.isEmpty()) { | |||
| if (res != null && res.getBoolean("passed")){ | |||
| json.put("status", 0); | |||
| json.put("data", obj); | |||
| json.put("data", res); | |||
| return json; | |||
| } else { | |||
| json.put("status", 500); | |||
| @@ -332,62 +201,17 @@ public class FaceServiceSupport { | |||
| } | |||
| /*****Unirest 请求方式*****/ | |||
| /*JSONObject paramJson = new JSONObject(); | |||
| paramJson.put("imageId", imageId); | |||
| paramJson.put("base64Data", imgBase64); | |||
| paramJson.put("detect", 1); | |||
| String content = paramJson.toJSONString(); | |||
| HttpResponse<String> response = Unirest.post(faceServer + extractionPath) | |||
| .header("Authorization", "Bearer "+token) | |||
| .header("Content-Type", "application/json") | |||
| .body(content) | |||
| .asString(); | |||
| String result = response.getBody(); | |||
| log.info("Face Engine-detectFace return >> " + result); | |||
| JSONObject resultJson = JSON.parseObject(result); | |||
| return resultJson.getJSONArray("result").getJSONObject(0);*/ | |||
| } | |||
| public JSONObject regCheckFace(String token, String imageId, String imgBase64) { | |||
| /********CURL 请求方式********/ | |||
| /*JSONObject paramJson = new JSONObject(); | |||
| paramJson.put("imageId", imageId); | |||
| paramJson.put("base64Data", imgBase64); | |||
| paramJson.put("detect", 1); | |||
| String content = paramJson.toJSONString(); | |||
| String[] cmds = {"curl", "--location", "--request", "POST", faceServer + extractionPath, "--header", "Authorization: Bearer "+token, "--header", "Content-Type: application/json", "--data", content}; | |||
| String res = execCurl(cmds); | |||
| log.info("----------------"); | |||
| log.info(faceServer); | |||
| log.info("----------------"); | |||
| log.info("Face Engine-detectFace return >> " + res); | |||
| JSONObject json = JSONObject.parseObject(res); | |||
| JSONObject data = json.getJSONArray("result").getJSONObject(0); | |||
| return data;*/ | |||
| JSONObject json = new JSONObject(); | |||
| try { | |||
| imgBase64 = imgBase64.replaceAll("data:image/jpeg;base64,", ""); | |||
| imgBase64 = imgBase64.replace("data:image/jpeg;base64,", ""); | |||
| JSONObject res = this.getFaceCheck(token, imageId, imgBase64); | |||
| Boolean passed = res.getBoolean("passed"); | |||
| if (!ObjectUtils.anyNotNull(passed)) { | |||
| json.put("status", 500); | |||
| json.put("data", null); | |||
| json.put("errMsg", "所拍摄的照片重人脸不存在"); | |||
| return json; | |||
| } | |||
| if (!passed) { | |||
| json.put("status", 500); | |||
| json.put("data", res); | |||
| if (res == null || !res.getBoolean("passed")){ | |||
| json.fluentPut("status", 500).fluentPut("data", res); | |||
| double blur = res.getDouble("blur"); | |||
| double pose = res.getDouble("pose"); | |||
| double occ = res.getDouble("occ"); | |||
| @@ -404,17 +228,12 @@ public class FaceServiceSupport { | |||
| errMsg = "人脸检测失败,光线太暗,请到明亮点的地方重新拍摄"; | |||
| } | |||
| json.put("errMsg", errMsg); | |||
| json.put("data", res); | |||
| json.fluentPut("errMsg", errMsg).fluentPut("data", res); | |||
| } else { | |||
| json.put("status", 0); | |||
| json.put("data", res); | |||
| json.put("errMsg", ""); | |||
| json.fluentPut("status", 0).fluentPut("data", res).fluentPut("errMsg", ""); | |||
| } | |||
| return json; | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| json.put("status", 500); | |||
| @@ -422,26 +241,6 @@ public class FaceServiceSupport { | |||
| json.put("errMsg", e.getMessage()); | |||
| return json; | |||
| } | |||
| /*****Unirest 请求方式*****/ | |||
| /*JSONObject paramJson = new JSONObject(); | |||
| paramJson.put("imageId", imageId); | |||
| paramJson.put("base64Data", imgBase64); | |||
| paramJson.put("detect", 1); | |||
| String content = paramJson.toJSONString(); | |||
| HttpResponse<String> response = Unirest.post(faceServer + extractionPath) | |||
| .header("Authorization", "Bearer "+token) | |||
| .header("Content-Type", "application/json") | |||
| .body(content) | |||
| .asString(); | |||
| String result = response.getBody(); | |||
| log.info("Face Engine-detectFace return >> " + result); | |||
| JSONObject resultJson = JSON.parseObject(result); | |||
| return resultJson.getJSONArray("result").getJSONObject(0);*/ | |||
| } | |||
| @@ -456,17 +255,18 @@ public class FaceServiceSupport { | |||
| json.put("errMsg", "imagePath不能为空"); | |||
| return json; | |||
| } | |||
| JSONObject faceRectangle = this.hasface("", empId, base64Image); | |||
| int status = faceRectangle.getInteger("status"); | |||
| faceRectangle = faceRectangle.getJSONObject("data"); | |||
| if (status != 0) { | |||
| json.put("status",status); | |||
| json.put("errMsg"," 特征值提取失败,"+faceRectangle.getString("errMsg")); | |||
| JSONObject faceRectangle = null; | |||
| try { | |||
| faceRectangle = this.getFaceExtraction("", empId, base64Image); | |||
| } catch (Exception e) { | |||
| json.put("status",504); | |||
| json.put("errMsg",e.getMessage()); | |||
| return json; | |||
| } | |||
| if (!ObjectUtils.anyNotNull(faceRectangle) || faceRectangle.getJSONObject("faceRectangle").isEmpty()) { | |||
| json.put("status",504); | |||
| json.put("errMsg"," 特征值提取失败,上传的头像未找到人脸!"); | |||
| if (!faceRectangle.containsKey("feature")) { | |||
| json.put("status",500); | |||
| json.put("errMsg"," 特征值提取失败,"+faceRectangle.getString("errorMessage")); | |||
| return json; | |||
| } | |||
| @@ -142,7 +142,7 @@ public class ShiftServiceSupport | |||
| List<String> officeCodes = Lists.newArrayList(); | |||
| List<Office> officesLists =null; | |||
| //获取到登陆用户下的所有公司 | |||
| if(BusinessUtils.isSecAdmin(userCode)){ | |||
| if(BusinessUtils.isSecAdmin(userCode)|| BusinessUtils.isCorpAdmin(userCode)){ | |||
| officesLists = myOfficeService.getOfficesByUserCode(userCode); | |||
| }else { | |||
| officesLists = myOfficeService.findList(new Office()); | |||
| @@ -18,12 +18,19 @@ import org.springframework.util.DigestUtils; | |||
| public class ApiSignUtil { | |||
| private static String KeySecrect; | |||
| public static String apiKey2; | |||
| @Value("${sys.api.KeySecrect}") | |||
| public void setKeySecrect(String keySecrect){ | |||
| ApiSignUtil.KeySecrect = keySecrect; | |||
| } | |||
| @Value("${sys.api.apiKey2}") | |||
| public void setApiKey2(String apiKey2){ | |||
| ApiSignUtil.apiKey2 = apiKey2; | |||
| } | |||
| public static String apiSign(String string){ | |||
| String str = string+KeySecrect; | |||
| System.err.println(str); | |||
| @@ -34,6 +34,10 @@ public class BusinessUtils { | |||
| return !(BusinessConsts.LOGIN_CODE_ADMIN.getCode().equals(userCode) || BusinessConsts.lOGIN_CODE_SYSTEM.getCode().equals(userCode)) && RoleUtils.hasUserRole(userCode, "secAdmin"); | |||
| } | |||
| public static Boolean isCorpAdmin(String userCode){ | |||
| return !(BusinessConsts.LOGIN_CODE_ADMIN.getCode().equals(userCode) || BusinessConsts.lOGIN_CODE_SYSTEM.getCode().equals(userCode)) && RoleUtils.hasUserRole(userCode, "corpAdmin"); | |||
| } | |||
| public static String getMmsJsonString(VisitRecords vr){ | |||
| JSONObject json = new JSONObject(); | |||
| json.put("name", vr.getVisitors().getName()); | |||
| @@ -63,4 +67,6 @@ public class BusinessUtils { | |||
| } | |||
| } | |||
| @@ -19,6 +19,7 @@ import sun.misc.BASE64Encoder; | |||
| import javax.imageio.ImageIO; | |||
| import java.awt.image.BufferedImage; | |||
| import java.io.*; | |||
| import java.nio.file.Files; | |||
| import java.util.Base64; | |||
| import java.util.Map; | |||
| import java.util.UUID; | |||
| @@ -200,11 +201,23 @@ public class ImageUtil { | |||
| */ | |||
| public static String convertFileToBase64(String imgPath) { | |||
| String base64Str = ""; | |||
| // 读取图片字节数组 | |||
| /*// 读取图片字节数组 | |||
| try { | |||
| InputStream in = new FileInputStream(imgPath); | |||
| base64Str = convertToBase64(in); | |||
| in.close(); | |||
| } catch (IOException e) { | |||
| e.printStackTrace(); | |||
| }*/ | |||
| File imageFile = new File(imgPath); | |||
| try { | |||
| // 读取图片文件 | |||
| byte[] imageBytes = Files.readAllBytes(imageFile.toPath()); | |||
| // 将图片数据编码为Base64 | |||
| base64Str = Base64.getEncoder().encodeToString(imageBytes); | |||
| } catch (IOException e) { | |||
| e.printStackTrace(); | |||
| } | |||
| @@ -234,13 +247,14 @@ public class ImageUtil { | |||
| String newFileName = getNewFileName("jpg"); | |||
| ByteArrayInputStream fileStream = new ByteArrayInputStream(bytes); | |||
| Boolean checkRes = ImageUtil.checkPixel(fileStream, 2000, 2000); | |||
| Boolean checkRes = ImageUtil.checkPixel(fileStream, 5000, 5000); | |||
| String path = ""; | |||
| if (isReg) { | |||
| path = faceFileRegisterPath; | |||
| } else { | |||
| path = faceFilePassRecordPath; | |||
| } | |||
| if (checkRes) { | |||
| FileCopyUtils.copy(bytes, new File(path + "/" + newFileName)); | |||
| @@ -263,4 +277,19 @@ public class ImageUtil { | |||
| } | |||
| } | |||
| public static void fileToOutputStream(String filePath, OutputStream outputStream) { | |||
| try { | |||
| System.err.println(filePath); | |||
| BufferedImage bufferedImage = ImageIO.read(new File(filePath)); | |||
| /* | |||
| * 区别就是以一句,输出到输出流中,如果第三个参数是 File,则输出到文件中 | |||
| */ | |||
| ImageIO.write(bufferedImage, "png", outputStream); | |||
| System.err.println("图片生成到输出流成功..."); | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| System.err.println("发生错误: {}!"+e.getMessage()); | |||
| } | |||
| } | |||
| } | |||
| @@ -12,9 +12,7 @@ package com.lecoo.kjg.web.sys.utils; | |||
| import com.jeesite.common.config.Global; | |||
| import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; | |||
| import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; | |||
| import org.springframework.beans.factory.annotation.Value; | |||
| import org.springframework.stereotype.Component; | |||
| import org.springframework.util.DigestUtils; | |||
| @Component | |||
| @@ -43,10 +41,8 @@ public class JasyptUtil { | |||
| public static String decrypt(String cryptStr){ | |||
| PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor(); | |||
| SimpleStringPBEConfig config = new SimpleStringPBEConfig(); | |||
| String jasyptPwd = System.getProperty("jasypt.encryptor.password"); | |||
| jasyptPwd = (null==jasyptPwd ? Global.getConfig("jasypt.encryptor.password"):jasyptPwd); | |||
| config.setPassword(jasyptPwd); | |||
| config.setAlgorithm("PBEWithMD5AndDES"); | |||
| @@ -16,6 +16,7 @@ import com.jeesite.modules.sys.utils.UserUtils; | |||
| import com.lecoo.kjg.web.sys.dao.EmpDao; | |||
| import com.lecoo.kjg.web.sys.dao.MyOfficeDao; | |||
| import com.lecoo.kjg.web.sys.dao.UserExtraDao; | |||
| import com.lecoo.kjg.web.sys.entity.Device; | |||
| import com.lecoo.kjg.web.sys.entity.Emp; | |||
| import com.lecoo.kjg.web.sys.service.UserDataScopeService; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| @@ -24,6 +25,7 @@ import org.springframework.stereotype.Component; | |||
| import javax.annotation.PostConstruct; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| @Component | |||
| public class OfficeEmpUtils { | |||
| @@ -51,10 +53,8 @@ public class OfficeEmpUtils { | |||
| @Autowired | |||
| private static UserExtraDao userDao2; | |||
| private static String topOffices; | |||
| private static MyOfficeDao myOfficeDaoIn; | |||
| private static OfficeService myOfficeService; | |||
| @@ -79,15 +79,9 @@ public class OfficeEmpUtils { | |||
| userDataScopeService = userDataScopeService2; | |||
| } | |||
| public OfficeEmpUtils() { | |||
| } | |||
| public static Office getOfficeByUserCode() { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| @@ -111,6 +105,20 @@ public class OfficeEmpUtils { | |||
| return myOffice; | |||
| } | |||
| public static List<Office> getOfficesByUserCode() { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| String userType = UserUtils.getUser().getUserType(); | |||
| List<Office> officeList = null; | |||
| if ("none".equals(userType)) { | |||
| officeList = myOfficeDaoIn.getOfficeListByUserCode(userCode); | |||
| } | |||
| return officeList; | |||
| } | |||
| public static Office getOfficeByUserCode(String userCode) { | |||
| User user = UserUtils.get(userCode); | |||
| @@ -119,7 +127,7 @@ public class OfficeEmpUtils { | |||
| Office myOffice = null; | |||
| if ("persion".equals(userType)) { | |||
| myOffice = myOfficeDaoIn.getOfficeByUserCode(userCode); | |||
| } else if(("employee".equals(userType)) ){ | |||
| } else if(("mgr".equals(userType)) || ("employee".equals(userType))){ | |||
| officeList = myOfficeDaoIn.getOfficesByUserCode(userCode, topOffices); | |||
| if (ObjectUtils.anyNotNull(officeList) && officeList.size()>0) { | |||
| myOffice = officeList.get(0); | |||
| @@ -193,6 +201,11 @@ public class OfficeEmpUtils { | |||
| } | |||
| public static List<Office> getOfficesByOffice(String officeCode) { | |||
| List<Office> officeList = myOfficeDaoIn.getOfficeListByOffice(officeCode); | |||
| return officeList; | |||
| } | |||
| /** | |||
| * 获得分配了管理员的公司 | |||
| * @return | |||
| @@ -7,7 +7,6 @@ | |||
| package com.lecoo.kjg.web.sys.utils; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.aliyun.dysmsapi20170525.models.SendSmsRequest; | |||
| import com.aliyun.dysmsapi20170525.models.SendSmsResponse; | |||
| @@ -19,8 +18,8 @@ import com.jeesite.common.lang.StringUtils; | |||
| import com.jeesite.modules.sys.entity.User; | |||
| import com.lecoo.kjg.web.config.SendMmsProperties; | |||
| import com.lecoo.kjg.web.config.WxMpProperties; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoomOrder; | |||
| import com.lecoo.kjg.web.sys.entity.*; | |||
| import com.lecoo.kjg.web.sys.service.TicketCountService; | |||
| import com.lecoo.kjg.web.sys.service.TicketSessionService; | |||
| import lombok.AllArgsConstructor; | |||
| import me.chanjar.weixin.common.error.WxErrorException; | |||
| @@ -63,7 +62,9 @@ public class SendUtil { | |||
| public final static int TYPE_CONFIRMED = 3; | |||
| public String getReceptionPhones(){ | |||
| return sendMmsProperties.getReceptionPhones(); | |||
| } | |||
| public SendSmsResponse sendTempMms(String phone, String paramStr, boolean hasCar) throws Exception { | |||
| @@ -136,6 +137,65 @@ public class SendUtil { | |||
| return res; | |||
| } | |||
| public SendSmsResponse sendTempMmsMeeting(String phone, MeetingRoomOrder meetingRoomOrder, Integer type) throws Exception { | |||
| Config config = new Config() | |||
| // 您的AccessKey ID | |||
| .setAccessKeyId(sendMmsProperties.getAccessKeyId()) | |||
| // 您的AccessKey Secret | |||
| .setAccessKeySecret(sendMmsProperties.getAccessKeySecrect()); | |||
| // 访问的域名 | |||
| config.endpoint = sendMmsProperties.getEndpoint(); | |||
| com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config); | |||
| String template = ""; | |||
| if (type == 1) { | |||
| template = sendMmsProperties.getMeetingOrderTemplate(); | |||
| } else if (type == 2) { | |||
| template = sendMmsProperties.getMeetingQuitTemplate(); | |||
| } else { | |||
| template = sendMmsProperties.getMeetingRemindTemplate(); | |||
| } | |||
| JSONObject json = new JSONObject(); | |||
| json.put("name", meetingRoomOrder.getOrderByEmp()); | |||
| json.put("dateStr", meetingRoomOrder.getOrderData()); | |||
| json.put("rebotName", sendMmsProperties.getRobotName()); | |||
| SendSmsRequest sendSmsRequest = new SendSmsRequest() | |||
| .setPhoneNumbers(phone) | |||
| .setSignName(sendMmsProperties.getSignName()) | |||
| .setTemplateCode(template) | |||
| .setTemplateParam(json.toJSONString()); | |||
| // 复制代码运行请自行打印 API 的返回值 | |||
| SendSmsResponse res = client.sendSms(sendSmsRequest); | |||
| return res; | |||
| } | |||
| public SendSmsResponse sendMmsToDefault(String phone) throws Exception{ | |||
| Config config = new Config() | |||
| // 您的AccessKey ID | |||
| .setAccessKeyId(sendMmsProperties.getAccessKeyId()) | |||
| // 您的AccessKey Secret | |||
| .setAccessKeySecret(sendMmsProperties.getAccessKeySecrect()); | |||
| // 访问的域名 | |||
| config.endpoint = sendMmsProperties.getEndpoint(); | |||
| com.aliyun.dysmsapi20170525.Client client = new com.aliyun.dysmsapi20170525.Client(config); | |||
| String template = sendMmsProperties.getDefaultRemindTemplate(); | |||
| JSONObject json = new JSONObject(); | |||
| SendSmsRequest sendSmsRequest = new SendSmsRequest() | |||
| .setPhoneNumbers(phone) | |||
| .setSignName(sendMmsProperties.getSignName()) | |||
| .setTemplateCode(template) | |||
| .setTemplateParam(json.toJSONString()); | |||
| // 复制代码运行请自行打印 API 的返回值 | |||
| SendSmsResponse res = client.sendSms(sendSmsRequest); | |||
| return res; | |||
| } | |||
| public String sendWxTemplateAudit(Map map) throws WxErrorException { | |||
| SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | |||
| @@ -416,5 +476,48 @@ public class SendUtil { | |||
| } | |||
| public void sendToUser(String openId, String title, MeetingRoomOrder meetingRoomOrder, int type) throws WxErrorException { | |||
| String tmpOpenid = openId; | |||
| if (StringUtils.isNotEmpty(tmpOpenid)) { | |||
| String url = Global.getFrontPath()+"/wx/meeting/info/"+meetingRoomOrder.getId(); | |||
| this.sendToUser(title, tmpOpenid, url, meetingRoomOrder, type); | |||
| } else { | |||
| String str = "预订人("+meetingRoomOrder.getOrderByEmp()+")未绑定微信号,发送通知消息失败"; | |||
| throw new WxErrorException(str); | |||
| } | |||
| } | |||
| public String sendToUser(String title, String openid, String url, MeetingRoomOrder meetingRoomOrder, int type) throws WxErrorException { | |||
| SimpleDateFormat dateFormat1 = new SimpleDateFormat("yyyy-MM-dd"); | |||
| SimpleDateFormat dateFormat2 = new SimpleDateFormat("HH:mm"); | |||
| // WxMpProperties.MpConfig mpConfig = WxMpProperties.MpConfig(); | |||
| WxMpProperties.MpConfig mpConfig = wxMpProperties.getConfigs().get(0); | |||
| WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() | |||
| .toUser(openid) | |||
| .templateId(mpConfig.getMeetingTemplateId()) | |||
| .url(mpConfig.getUrl()+"?redirect="+url) | |||
| .build(); | |||
| String remark = ""; | |||
| if (type == 2) { | |||
| remark = "期待您再次预订!"; | |||
| } else { | |||
| remark = "会议预计耗时"+meetingRoomOrder.getMeetingDuration()+"分钟,请您准时参加"; | |||
| } | |||
| templateMessage.addData(new WxMpTemplateData("first", title, "#FF00FF")) | |||
| .addData(new WxMpTemplateData("keyword1", dateFormat1.format(meetingRoomOrder.getOrderDate())+" "+dateFormat2.format( meetingRoomOrder.getOrderTime()), "#000")) | |||
| .addData(new WxMpTemplateData("keyword2", meetingRoomOrder.getMeetingRoom().getName(), "#000")) | |||
| .addData(new WxMpTemplateData("remark", remark, "#000"));; | |||
| String msgId = this.wxService.getTemplateMsgService().sendTemplateMsg(templateMessage); | |||
| return msgId; | |||
| } | |||
| } | |||
| @@ -0,0 +1,37 @@ | |||
| // | |||
| // Source code recreated from a .class file by IntelliJ IDEA | |||
| // (powered by FernFlower decompiler) | |||
| // | |||
| package com.lecoo.kjg.web.sys.utils; | |||
| public class StringUtils extends com.jeesite.common.lang.StringUtils { | |||
| public StringUtils() { | |||
| } | |||
| /** | |||
| * @Author yangkai | |||
| * @Description 全角转半角 | |||
| * @Date 2023/3/2 | |||
| * @Param | |||
| * @return | |||
| **/ | |||
| public static String fullWidth2halfWidth(String fullWidthStr) { | |||
| if (null == fullWidthStr || fullWidthStr.length() <= 0) { | |||
| return ""; | |||
| } | |||
| char[] charArray = fullWidthStr.toCharArray(); | |||
| //对全角字符转换的char数组遍历 | |||
| for (int i = 0; i < charArray.length; ++i) { | |||
| int charIntValue = (int) charArray[i]; | |||
| //如果符合转换关系,将对应下标之间减掉偏移量65248;如果是空格的话,直接做转换 | |||
| if (charIntValue >= 65281 && charIntValue <= 65374) { | |||
| charArray[i] = (char) (charIntValue - 65248); | |||
| } else if (charIntValue == 12288) { | |||
| charArray[i] = (char) 32; | |||
| } | |||
| } | |||
| return new String(charArray); | |||
| } | |||
| } | |||
| @@ -104,7 +104,7 @@ public class AccessControlController extends BaseController { | |||
| office.setParentCode(topOffice); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| @@ -148,7 +148,7 @@ public class AccessControlController extends BaseController { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| Page<AccessControl> page = new Page<AccessControl>(request, response); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> deviceIds = accessControlService.findByUserCode(userCode) | |||
| .stream().map(AccessControl::getDeviceId).collect(Collectors.toList()); | |||
| if (deviceIds.size() > 0) { | |||
| @@ -222,9 +222,10 @@ public class AccessControlController extends BaseController { | |||
| public List<AccessControl> treeData(){ | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (!BusinessUtils.isSecAdmin(userCode)) { | |||
| if (!BusinessUtils.isSecAdmin(userCode) && !BusinessUtils.isCorpAdmin(userCode)) { | |||
| userCode = null; | |||
| } | |||
| return accessControlDao.findAcTreeList(userCode); | |||
| } | |||
| @@ -17,10 +17,7 @@ import com.lecoo.kjg.web.sys.dao.AccessControlGroupDao; | |||
| import com.lecoo.kjg.web.sys.dao.AccessControlGroupDetailDao; | |||
| import com.lecoo.kjg.web.sys.dao.DeviceDao; | |||
| import com.lecoo.kjg.web.sys.dao.OfficeAccessControlGroupDao; | |||
| import com.lecoo.kjg.web.sys.entity.AccessControlGroup; | |||
| import com.lecoo.kjg.web.sys.entity.AccessControlGroupDetail; | |||
| import com.lecoo.kjg.web.sys.entity.Device; | |||
| import com.lecoo.kjg.web.sys.entity.OfficeAccessControlGroup; | |||
| import com.lecoo.kjg.web.sys.entity.*; | |||
| import com.lecoo.kjg.web.sys.service.AccessControlGroupService; | |||
| import com.lecoo.kjg.web.sys.service.support.AccessControlGroupServiceSupport; | |||
| import com.lecoo.kjg.web.sys.utils.BusinessUtils; | |||
| @@ -115,7 +112,7 @@ public class AccessControlGroupController extends BaseController { | |||
| office.setParentCode("2000"); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| @@ -155,6 +152,18 @@ public class AccessControlGroupController extends BaseController { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| Page<AccessControlGroup> page = new Page<AccessControlGroup>(request, response); | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> acgIds = accessControlGroupService.findByUserCode(userCode) | |||
| .stream().map(AccessControlGroup::getGroupCode).collect(Collectors.toList()); | |||
| if (acgIds.size() > 0) { | |||
| String[] ids = new String[acgIds.size()]; | |||
| acgIds.toArray(ids); | |||
| accessControlGroup.getSqlMap().getWhere().and("group_code", QueryType.IN, ids); | |||
| } else { | |||
| return page; | |||
| } | |||
| } | |||
| return accessControlGroupServiceSupport.findPage(new Page<>(request, response), accessControlGroup); | |||
| } | |||
| @@ -203,9 +212,10 @@ public class AccessControlGroupController extends BaseController { | |||
| @RequestMapping(value = "/treeData") | |||
| @ResponseBody | |||
| public List<HashMap> treeData(){ | |||
| // String userCode = UserUtils.getUser().getUserCode(); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| List<HashMap> acgs = accessControlGroupDao.findAcTreeList(null); | |||
| List<HashMap> acgs = accessControlGroupDao.findAcTreeList(userCode); | |||
| // List<HashMap> acgs = accessControlGroupDao.findAcTreeList(null); | |||
| List<DictData> dlist = DictUtils.getDictList("sys_citys"); | |||
| @@ -7,6 +7,7 @@ package com.lecoo.kjg.web.sys.web; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.beust.jcommander.internal.Lists; | |||
| import com.jeesite.common.codec.DesUtils; | |||
| import com.jeesite.common.config.Global; | |||
| import com.jeesite.common.entity.Extend; | |||
| @@ -37,6 +38,7 @@ import com.lecoo.kjg.web.sys.service.UserDataScopeService; | |||
| import com.lecoo.kjg.web.sys.service.support.EmpServiceSupport; | |||
| import com.lecoo.kjg.web.sys.service.support.FaceServiceSupport; | |||
| import com.lecoo.kjg.web.sys.utils.*; | |||
| import com.lenovo.nowgo.common.http.response.MyResponse; | |||
| import lombok.AllArgsConstructor; | |||
| import me.chanjar.weixin.common.error.WxErrorException; | |||
| import org.apache.shiro.SecurityUtils; | |||
| @@ -436,20 +438,61 @@ public class Account2Controller extends WxBaseController { | |||
| } | |||
| /** | |||
| * 用户注册 | |||
| * @param u 对应用户 | |||
| * @param emp 对应员工 | |||
| * @param o 注册员工所属公司 | |||
| * @param model | |||
| * @return | |||
| */ | |||
| @RequestMapping(value = "/account2/reg2") | |||
| @Transactional | |||
| @ResponseBody | |||
| public String reg2(User u, Emp emp, Office o, Model model) { | |||
| empService.regInit(emp, u, o); | |||
| String msg = empService.faceReg(emp); | |||
| if (StringUtils.isNotEmpty(msg)) { | |||
| return this.renderResult("false", msg); | |||
| } | |||
| u.setAvatar(emp.getFaceImageName()); | |||
| empService.reg(u, emp); | |||
| LogUtils.saveLog(u, null, emp.getRealName()+"注册成功", "register"); | |||
| //清除redis | |||
| redisUtils.delKey("regOrLogin:phone:"+u.getMobile()); | |||
| model.addAttribute("msg", "恭喜你,您的账号 " + emp.getRealName() + " 注册成功!"); | |||
| return this.renderResult("true", "恭喜你,您的账号 " + emp.getRealName() + " 注册成功!"); | |||
| } | |||
| @RequestMapping(value = "/account2/regUser") | |||
| public String reg(@RequestParam Map map, Model model, HttpServletResponse response){ | |||
| String openid = (String)map.get("openid"); | |||
| String type = (String)map.get("type"); | |||
| Office office = new Office(); | |||
| String officeCode = (String)map.get("officeCode"); | |||
| List<Office> list = Lists.newArrayList(); | |||
| if (StringUtils.isNotEmpty(officeCode)) { | |||
| Office o = officeService.get(officeCode); | |||
| if (null != o) { | |||
| list.add(o); | |||
| } | |||
| } else { | |||
| Office office = new Office(); | |||
| // office.setParentCode("2000"); | |||
| Extend extend = new Extend(); | |||
| extend.setExtendS1("1"); | |||
| office.setExtend(extend); | |||
| List<String> officeCodes = userDataScopeService.getOffices(); | |||
| Extend extend = new Extend(); | |||
| extend.setExtendS1("1"); | |||
| office.setExtend(extend); | |||
| List<String> officeCodes = userDataScopeService.getOffices(); | |||
| office.getSqlMap().getWhere().andBracket("office_code", QueryType.IN, officeCodes).or("parent_code", QueryType.IN, officeCodes).endBracket(); | |||
| list = this.officeService.findList(office); | |||
| } | |||
| office.getSqlMap().getWhere().and("office_code", QueryType.IN, officeCodes); | |||
| List<Office> list = this.officeService.findList(office); | |||
| model.addAttribute("offices", list); | |||
| model.addAttribute("openid", openid); | |||
| @@ -463,6 +506,7 @@ public class Account2Controller extends WxBaseController { | |||
| return "themes/default/modules/sys/account/registerUser"; | |||
| // return "themes/default/modules/sys/account/registerEmp"; | |||
| } | |||
| @@ -728,9 +772,9 @@ public class Account2Controller extends WxBaseController { | |||
| extend.setExtendS1(User.STATUS_NORMAL); | |||
| user.setExtend(extend); | |||
| user.setUserName(emp.getRealName()); | |||
| user.setUserType(User.USER_TYPE_EMPLOYEE); | |||
| user.setUserType("mgr"); | |||
| userService.update(user); | |||
| userDao.updateUserType(User.USER_TYPE_EMPLOYEE, userCode); | |||
| userDao.updateUserType("mgr", userCode); | |||
| AuditRecords auditRecords = new AuditRecords(1,1,emp2.getId(), loginCode, new Date(), user.getAvatar(), ""); | |||
| @@ -886,8 +930,6 @@ public class Account2Controller extends WxBaseController { | |||
| String secretKey = Global.getConfig("shiro.loginSubmit.secretKey"); | |||
| String wxOpenid = (String) openid; | |||
| wxOpenid = DesUtils.decode(wxOpenid, secretKey); | |||
| System.err.println("======req...info.......start........====="); | |||
| System.err.println(DateUtils.getMillsSecondsDouble()); | |||
| JSONObject userJson; | |||
| try { | |||
| redisUtils.setUserVariables(wxOpenid.substring(1),wxOpenid.substring(0,1)); | |||
| @@ -898,9 +940,6 @@ public class Account2Controller extends WxBaseController { | |||
| model.addAttribute("type", wxOpenid.substring(0,1)); | |||
| return "wx/error"; | |||
| } | |||
| System.err.println(userJson.toJSONString()); | |||
| System.err.println("======req...info.......end........====="); | |||
| System.err.println(DateUtils.getMillsSecondsDouble()); | |||
| model.addAttribute("userJson", userJson); | |||
| return "wx/sysIndex"; | |||
| } | |||
| @@ -925,4 +964,59 @@ public class Account2Controller extends WxBaseController { | |||
| subject.logout(); | |||
| return "modules/sys/sysAdminLogin"; | |||
| } | |||
| @Autowired | |||
| private UserExtraDao userExtraDao; | |||
| @RequestMapping(value = "/account2/updateEmp") | |||
| @ResponseBody | |||
| @Transactional | |||
| public MyResponse upd(@RequestParam Map map) throws Exception{ | |||
| String secretKey = Global.getConfig("shiro.loginSubmit.secretKey"); | |||
| String userCode = (String)map.get("userCode"); | |||
| String openid = (String)map.get("openid"); | |||
| String phone = (String)map.get("phone"); | |||
| String base64 = (String)map.get("base64"); | |||
| userCode = DesUtils.decode(userCode, secretKey); | |||
| User user = UserUtils.get(userCode); | |||
| if (null == user) { | |||
| return outputError(1, "绑定失败,未找到对应账户!"); | |||
| } | |||
| Emp emp = empDao.findByJobNum(userCode); | |||
| emp.setBase64(base64); | |||
| String msg = empService.faceReg(emp); | |||
| if (StringUtils.isNotEmpty(msg)) { | |||
| return output(-1, msg); | |||
| } | |||
| user.setAvatar(emp.getFaceImageName()); | |||
| if (StringUtils.isNotEmpty(user.getWxOpenid())) { | |||
| user.setMobile(phone); | |||
| emp.setPhoneNumber(phone); | |||
| empService.update(emp); | |||
| userService.update(user); | |||
| return outputError(1, "绑定失败,该账号已绑定别的微信号!"); | |||
| } else { | |||
| System.err.println(openid); | |||
| openid = DesUtils.decode(openid, secretKey); | |||
| String userType = "0"; | |||
| if ("estate".equals(user.getUserType())) { | |||
| userType = "1"; | |||
| } | |||
| User u = userExtraDao.findByWxOpenid(openid, userType); | |||
| if (ObjectUtils.anyNotNull(u)) { | |||
| u.setWxOpenid(null); | |||
| userService.update(u); | |||
| } | |||
| user.setWxOpenid(openid); | |||
| user.setMobile(phone); | |||
| emp.setPhoneNumber(phone); | |||
| empService.update(emp); | |||
| userService.update(user); | |||
| // RedisUtils.setUserVariables(user.getWxOpenid(), user.getUserType().equals("estate")?"1":"0"); | |||
| return outputSuccess(user); | |||
| } | |||
| } | |||
| } | |||
| @@ -37,6 +37,7 @@ import javax.servlet.http.HttpServletResponse; | |||
| import java.util.ArrayList; | |||
| import java.util.Arrays; | |||
| import java.util.List; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| * Admin Controller | |||
| @@ -117,7 +118,33 @@ public class AdminController extends BaseController { | |||
| * 公司管理园,如奥北,需要登陆到公众号页面 | |||
| */ | |||
| // user.setUserType("none"); | |||
| user.getSqlMap().getWhere().and("user_code", QueryType.NE, "admin", 1).and("user_code", QueryType.NE, "system", 2).andBracket("user_type", QueryType.EQ, "none",1).or("user_type", QueryType.EQ, "employee",2).endBracket(); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| List<UserDataScope> userDataScopes = userDataScopeDao.findList(uds); | |||
| List<String> officeIds = userDataScopes.stream().map(UserDataScope::getCtrlData).collect(Collectors.toList()); | |||
| List<String> iids = com.beust.jcommander.internal.Lists.newArrayList(); | |||
| if (officeIds.size()>0) { | |||
| for (String str : officeIds) { | |||
| if (!topOffice.equals(str)) { | |||
| iids.add(str); | |||
| } | |||
| } | |||
| if(iids.size()>0) { | |||
| user.getSqlMap().getWhere().and("corp_code", QueryType.IN, iids); | |||
| } | |||
| } | |||
| } else { | |||
| user.getSqlMap().getWhere().and("user_code", QueryType.NE, "admin", 1).and("user_code", QueryType.NE, "system", 2).andBracket("user_type", QueryType.EQ, "none",1).or("user_type", QueryType.EQ, "employee",2).endBracket(); | |||
| } | |||
| String loginCode = user.getLoginCode(); | |||
| if ("_".equals(loginCode)) { | |||
| user.setLoginCode("\\_"); | |||
| @@ -155,6 +182,29 @@ public class AdminController extends BaseController { | |||
| office.setParentCode(topOffice); | |||
| // List<String> hasMgrs = OfficeEmpUtils.getHasMgrOffices(); | |||
| // office.getSqlMap().getWhere().and("office_code", QueryType.NOT_IN, hasMgrs); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| List<UserDataScope> userDataScopes = userDataScopeDao.findList(uds); | |||
| List<String> officeIds = userDataScopes.stream().map(UserDataScope::getCtrlData).collect(Collectors.toList()); | |||
| List<String> iids = com.beust.jcommander.internal.Lists.newArrayList(); | |||
| if (officeIds.size()>0) { | |||
| for (String str : officeIds) { | |||
| if (!topOffice.equals(str)) { | |||
| iids.add(str); | |||
| } | |||
| } | |||
| if(iids.size()>0) { | |||
| office.getSqlMap().getWhere().and("office_code", QueryType.IN, iids); | |||
| } | |||
| } | |||
| } | |||
| List<Office> officeList = officeService.findList(office); | |||
| List<String> officeIdIn = new ArrayList<>(); | |||
| @@ -261,6 +311,29 @@ public class AdminController extends BaseController { | |||
| emp.setEmpType("1"); | |||
| emp.setRegisterTime(new Date()); | |||
| empDao.insert(emp);*/ | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| List<UserDataScope> userDataScopes = userDataScopeDao.findList(uds); | |||
| List<String> officeIds = userDataScopes.stream().map(UserDataScope::getCtrlData).collect(Collectors.toList()); | |||
| List<String> iids = com.beust.jcommander.internal.Lists.newArrayList(); | |||
| if (officeIds.size()>0) { | |||
| for (String str : officeIds) { | |||
| if (!topOffice.equals(str)) { | |||
| iids.add(str); | |||
| } | |||
| } | |||
| if(iids.size()>0) { | |||
| officeCode = iids.get(0); | |||
| } | |||
| } | |||
| } | |||
| User user = adminService.createAdminAccount(loginCode, password, userType); | |||
| @@ -285,17 +358,20 @@ public class AdminController extends BaseController { | |||
| userDataScopes.add(userDataScope2); | |||
| if(RoleUtils.hasUserRole(user.getUserCode(), "corpAdmin")) { | |||
| userDao.updateUserCorp("全部", "0", user.getUserCode()); | |||
| } else { | |||
| if(BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| userDao.updateUserCorp(office.getOfficeName(), officeCode, user.getUserCode()); | |||
| } else { | |||
| userDao.updateUserCorp("全部", "0", user.getUserCode()); | |||
| } | |||
| List<String> listId = new ArrayList<>(); | |||
| listId.add(officeCode); | |||
| adminService.updateOfficeAuth(user.getUserCode(), listId); | |||
| userDataScopeDao.insertBatch(userDataScopes); | |||
| } else { | |||
| userDataScopeDao.insert(userDataScope2); | |||
| } | |||
| userDao.updateUserType(User.USER_TYPE_NONE, loginCode); | |||
| return renderResult(Global.TRUE, "添加管理员成功"); | |||
| } | |||
| @@ -83,7 +83,7 @@ public class AdminLogController extends BaseController { | |||
| adminLog.getSqlMap().getWhere().and("create_date", QueryType.GTE, startDateStr).and("create_date", QueryType.LTE, endDateStr).and("log_title", QueryType.NOT_IN, logArr); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| String loginCode = UserUtils.getUser().getLoginCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| adminLog.setCreateBy(loginCode); | |||
| } | |||
| return adminLogService.findPage(new Page<>(request, response), adminLog); | |||
| @@ -1,11 +1,12 @@ | |||
| package com.lecoo.kjg.web.sys.web; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.jeesite.common.config.Global; | |||
| import com.jeesite.common.idgen.IdGen; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.jeesite.common.shiro.session.SessionManager; | |||
| import com.jeesite.modules.sys.service.OfficeService; | |||
| import com.lecoo.kjg.web.meeting.dao.MeetingRoomOrderDao; | |||
| import com.lecoo.kjg.web.meeting.entity.MeetingRoomOrder; | |||
| import com.lecoo.kjg.web.sys.dto.HistoryRecord; | |||
| import com.lecoo.kjg.web.sys.entity.Device; | |||
| import com.lecoo.kjg.web.sys.entity.FaceHistory; | |||
| @@ -15,17 +16,21 @@ import com.lecoo.kjg.web.sys.service.DeviceService; | |||
| import com.lecoo.kjg.web.sys.service.EmpService; | |||
| import com.lecoo.kjg.web.sys.service.FaceHistoryService; | |||
| import com.lecoo.kjg.web.sys.service.PasswordLogService; | |||
| import com.lecoo.kjg.web.sys.utils.DateUtils; | |||
| import com.lecoo.kjg.web.sys.utils.JasyptUtil; | |||
| import com.lecoo.kjg.web.sys.utils.RedisUtils; | |||
| import com.lecoo.kjg.web.sys.utils.StringUtils; | |||
| import com.lenovo.nowgo.common.constant.ResponseCode; | |||
| import com.lenovo.nowgo.common.http.response.MyResponse; | |||
| import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; | |||
| import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Value; | |||
| import org.springframework.stereotype.Controller; | |||
| import org.springframework.transaction.annotation.Transactional; | |||
| import org.springframework.util.DigestUtils; | |||
| import org.springframework.web.bind.annotation.*; | |||
| import javax.servlet.http.HttpServletRequest; | |||
| import java.io.UnsupportedEncodingException; | |||
| import java.text.SimpleDateFormat; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| @@ -216,6 +221,7 @@ public class ApiController extends BaseController { | |||
| @GetMapping("/jasypt") | |||
| @ResponseBody | |||
| public MyResponse jasypt2(@RequestParam(required = true) String pwd){ | |||
| System.err.println(pwd); | |||
| String cryptStr = JasyptUtil.encrypt(pwd); | |||
| System.err.println(cryptStr); | |||
| String pwdStr = JasyptUtil.decrypt(cryptStr); | |||
| @@ -224,10 +230,77 @@ public class ApiController extends BaseController { | |||
| return outputData(0, cryptStr); | |||
| } | |||
| @PostMapping("/jasypt2") | |||
| @ResponseBody | |||
| public String jasypt22(@RequestParam("pwd") String pwd){ | |||
| System.err.println("原密文:"+pwd); | |||
| pwd = StringUtils.fullWidth2halfWidth(pwd);//解决#等特殊字符传过来变成全角的问题 | |||
| System.err.println("原密文:"+pwd); | |||
| String cryptStr = JasyptUtil.encrypt(pwd); | |||
| System.err.println("加密文:"+cryptStr); | |||
| return cryptStr; | |||
| } | |||
| @PostMapping("/jasyptDecrypt2") | |||
| @ResponseBody | |||
| public String jasyptDecrypt2(@RequestParam("str") String str){ | |||
| System.err.println("加密文1:"+str); | |||
| str = StringUtils.fullWidth2halfWidth(str); | |||
| System.err.println("加密文2:"+str); | |||
| String pwdStr = JasyptUtil.decrypt(str); | |||
| System.err.println("解密文:"+pwdStr); | |||
| return pwdStr; | |||
| } | |||
| @GetMapping("/jasyptDecrypt") | |||
| @ResponseBody | |||
| public MyResponse jasyptDecrypt(@RequestParam(required = true) String cryptStr){ | |||
| String pwdStr = JasyptUtil.decrypt(cryptStr); | |||
| return outputData(0, pwdStr); | |||
| } | |||
| @Autowired | |||
| private RedisUtils redisUtils; | |||
| @Autowired | |||
| private MeetingRoomOrderDao meetingRoomOrderDao; | |||
| @ResponseBody | |||
| @RequestMapping(value = "/notifyToday", method = RequestMethod.POST) | |||
| @Transactional | |||
| public Object notifyToday(@RequestParam(required = true) String officeCode) { | |||
| SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd"); | |||
| SimpleDateFormat sdf = new SimpleDateFormat("HH:mm"); | |||
| String dateStr = sdf2.format(new Date()); | |||
| String data = redisUtils.getDefaultString("notifyToday"); | |||
| JSONArray re = new JSONArray(); | |||
| if (com.jeesite.common.lang.StringUtils.isNotEmpty(data)) { | |||
| re = JSONArray.parseArray(data); | |||
| } else { | |||
| List<MeetingRoomOrder> ll = meetingRoomOrderDao.findListByDateStr(dateStr, officeCode); | |||
| for(MeetingRoomOrder mr : ll) { | |||
| System.err.println(sdf.format(mr.getOrderTime())); | |||
| JSONObject jo = new JSONObject(); | |||
| jo.put("orderBy", mr.getOrderBy()); | |||
| jo.put("orderByEmp", mr.getOrderByEmp()); | |||
| if (StringUtils.compare(sdf.format(mr.getOrderTime()), sdf.format(new Date())) > 0 && StringUtils.compare(sdf.format(DateUtils.addMinutes(new Date(), 120)), sdf.format(mr.getOrderTime())) > 0) { | |||
| jo.put("msg", "温馨提示,"+sdf.format(mr.getOrderTime())+"的会议别忘了"); | |||
| } else { | |||
| jo.put("msg", ""); | |||
| } | |||
| jo.put("orderTime", sdf.format(mr.getOrderTime())); | |||
| re.add(jo); | |||
| } | |||
| redisUtils.setDefaultString("notifyToday", JSONArray.toJSONString(re), 60); | |||
| } | |||
| //stream().map(Office::getOfficeCode).collect(Collectors.toList()); | |||
| return outputData(0, re); | |||
| } | |||
| } | |||
| @@ -7,8 +7,11 @@ import com.jeesite.common.entity.Page; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.jeesite.common.mybatis.mapper.query.QueryType; | |||
| import com.jeesite.modules.sys.dao.UserDao; | |||
| import com.jeesite.modules.sys.dao.UserDataScopeDao; | |||
| import com.jeesite.modules.sys.entity.Office; | |||
| import com.jeesite.modules.sys.entity.UserDataScope; | |||
| import com.jeesite.modules.sys.service.OfficeService; | |||
| import com.jeesite.modules.sys.utils.UserUtils; | |||
| import com.lecoo.kjg.web.sys.dao.EmpDao; | |||
| import com.lecoo.kjg.web.sys.dao.UserExtraDao; | |||
| import com.lecoo.kjg.web.sys.entity.*; | |||
| @@ -16,6 +19,8 @@ import com.lecoo.kjg.web.sys.service.DeviceService; | |||
| import com.lecoo.kjg.web.sys.service.EmpAttendanceService; | |||
| import com.lecoo.kjg.web.sys.service.OfficeDeviceService; | |||
| import com.lecoo.kjg.web.sys.utils.BackupUtils; | |||
| import com.lecoo.kjg.web.sys.utils.BusinessUtils; | |||
| import com.lecoo.kjg.web.sys.utils.OfficeEmpUtils; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Value; | |||
| @@ -30,6 +35,7 @@ import javax.servlet.http.HttpServletResponse; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import java.util.stream.Collectors; | |||
| /** | |||
| * 签到推送控制器 | |||
| @@ -54,15 +60,30 @@ public class AttendanceController extends BaseController { | |||
| @Autowired | |||
| private BackupUtils backupUtils; | |||
| @Autowired | |||
| private OfficeService officeService; | |||
| @RequiresPermissions("sys:attendance:view") | |||
| @GetMapping(value = "/list") | |||
| public String list(Model model) { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| List<Office> officeList = Lists.newArrayList(); | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| officeList = OfficeEmpUtils.getOfficesByUserCode(); | |||
| } else { | |||
| officeList = officeService.findList(new Office()); | |||
| } | |||
| model.addAttribute("offices", officeList); | |||
| return "modules/sys/empAttendance/list"; | |||
| /*model.addAttribute("device", device); | |||
| return "modules/sys/attendance/setup-list";*/ | |||
| } | |||
| /** | |||
| * 考勤列表 | |||
| * | |||
| @@ -81,6 +102,22 @@ public class AttendanceController extends BaseController { | |||
| List<String> empIds = Lists.newArrayList(); | |||
| Emp t = new Emp(); | |||
| boolean flag = false; | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (null!=empAttendance.getOfficeCode() && empAttendance.getOfficeCode().length()<3) { | |||
| if ((BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode))) { | |||
| List<Office> officeList = OfficeEmpUtils.getOfficesByUserCode(); | |||
| List<String> officeIds = officeList.stream().map(Office::getOfficeCode).collect(Collectors.toList()); | |||
| t.getSqlMap().getWhere().and("office_code", QueryType.IN, officeIds); | |||
| flag = true; | |||
| } | |||
| } else { | |||
| List<Office> officeList = OfficeEmpUtils.getOfficesByOffice(empAttendance.getOfficeCode()); | |||
| List<String> officeIds = officeList.stream().map(Office::getOfficeCode).collect(Collectors.toList()); | |||
| t.getSqlMap().getWhere().and("office_code", QueryType.IN, officeIds); | |||
| flag = true; | |||
| } | |||
| if (null != empType && empType>-1) { | |||
| t.getSqlMap().getWhere().and("emp_type", QueryType.EQ, empType); | |||
| @@ -122,10 +159,27 @@ public class AttendanceController extends BaseController { | |||
| public String exportData(EmpAttendance empAttendance, HttpServletRequest request, HttpServletResponse response) { | |||
| String timePart = empAttendance.getTimePart(); | |||
| String empName = empAttendance.getEmpName(); | |||
| String officeCode = empAttendance.getOfficeCode(); | |||
| Integer empType = empAttendance.getEmpType(); | |||
| List<String> empIds = Lists.newArrayList(); | |||
| Emp t = new Emp(); | |||
| boolean flag = false; | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (null!=officeCode && officeCode.length()<3) { | |||
| if ((BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode))) { | |||
| List<Office> officeList = OfficeEmpUtils.getOfficesByUserCode(); | |||
| List<String> officeIds = officeList.stream().map(Office::getOfficeCode).collect(Collectors.toList()); | |||
| t.getSqlMap().getWhere().and("office_code", QueryType.IN, officeIds); | |||
| flag = true; | |||
| } | |||
| } else { | |||
| List<Office> officeList = OfficeEmpUtils.getOfficesByOffice(empAttendance.getOfficeCode()); | |||
| List<String> officeIds = officeList.stream().map(Office::getOfficeCode).collect(Collectors.toList()); | |||
| t.getSqlMap().getWhere().and("office_code", QueryType.IN, officeIds); | |||
| flag = true; | |||
| } | |||
| if (null != empType && empType>-1) { | |||
| t.getSqlMap().getWhere().and("emp_type", QueryType.EQ, empType); | |||
| @@ -1,22 +1,29 @@ | |||
| package com.lecoo.kjg.web.sys.web; | |||
| import com.beust.jcommander.internal.Lists; | |||
| import com.google.common.collect.Maps; | |||
| import com.jeesite.common.config.Global; | |||
| import com.jeesite.common.entity.Page; | |||
| import com.jeesite.common.lang.ObjectUtils; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.jeesite.common.mybatis.mapper.query.QueryType; | |||
| import com.jeesite.modules.sys.entity.Office; | |||
| import com.jeesite.modules.sys.service.OfficeService; | |||
| import com.jeesite.modules.sys.utils.UserUtils; | |||
| import com.lecoo.kjg.web.sys.constant.CommonConsts; | |||
| import com.lecoo.kjg.web.sys.dao.DeviceDao; | |||
| import com.lecoo.kjg.web.sys.dao.EmpDao; | |||
| import com.lecoo.kjg.web.sys.entity.CheckRecords; | |||
| import com.lecoo.kjg.web.sys.entity.Device; | |||
| import com.lecoo.kjg.web.sys.entity.Emp; | |||
| import com.lecoo.kjg.web.sys.entity.VisitRecords; | |||
| import com.lecoo.kjg.web.sys.service.CheckRecordsService; | |||
| import com.lecoo.kjg.web.sys.service.EmpService; | |||
| import com.lecoo.kjg.web.sys.service.VisitRecordsService; | |||
| import com.lecoo.kjg.web.sys.utils.BackupUtils; | |||
| import com.lecoo.kjg.web.sys.utils.BusinessUtils; | |||
| import com.lecoo.kjg.web.sys.utils.DateUtils; | |||
| import com.lecoo.kjg.web.sys.utils.OfficeEmpUtils; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.stereotype.Controller; | |||
| @@ -31,6 +38,7 @@ import javax.servlet.http.HttpServletResponse; | |||
| import java.util.Date; | |||
| import java.util.List; | |||
| import java.util.Map; | |||
| import java.util.stream.Collectors; | |||
| @Controller | |||
| @RequestMapping(value = "${adminPath}/sys/check") | |||
| @@ -72,6 +80,9 @@ public class CheckRecorderController extends BaseController { | |||
| // 添加获取所有公司信息,返还到页面 | |||
| return "modules/sys/check/list"; | |||
| } | |||
| @Autowired | |||
| private OfficeService officeService; | |||
| /** | |||
| * 根据条件查询访客邀约列表 | |||
| * | |||
| @@ -83,6 +94,23 @@ public class CheckRecorderController extends BaseController { | |||
| @RequestMapping(value = "/listData") | |||
| @ResponseBody | |||
| public Page<CheckRecords> listData(@RequestParam(required = false, defaultValue = "1") String btnType, HttpServletRequest request, HttpServletResponse response) { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| List<Emp> emps = Lists.newArrayList(); | |||
| List<Office> officeList = Lists.newArrayList(); | |||
| CheckRecords findCheckRecord = new CheckRecords(); | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| officeList = OfficeEmpUtils.getOfficesByUserCode(); | |||
| List<String> officeCodes = officeList.stream().map(Office::getOfficeCode).collect(Collectors.toList()); | |||
| Emp emp = new Emp(); | |||
| emp.setOfficeCode_in(officeCodes.toArray(new String[officeCodes.size()])); | |||
| emps = empDao.findList(emp); | |||
| List<String> ids = emps.stream().map(Emp::getId).collect(Collectors.toList()); | |||
| if (ids.size() == 0) { | |||
| findCheckRecord.getSqlMap().getWhere().and("user_id", QueryType.IN, new String[]{"1null1"}); | |||
| } else | |||
| findCheckRecord.getSqlMap().getWhere().and("user_id", QueryType.IN, ids); | |||
| } | |||
| Map<String, String[]> map = request.getParameterMap(); | |||
| String[] authMode = map.get("authMode"); | |||
| @@ -91,7 +119,7 @@ public class CheckRecorderController extends BaseController { | |||
| String[] startDate = map.get("startDate"); | |||
| String[] endDate = map.get("endDate"); | |||
| String[] userName = map.get("userName"); | |||
| CheckRecords findCheckRecord = new CheckRecords(); | |||
| int authModeStr = -1; | |||
| int authOkStr = -1; | |||
| if (ObjectUtils.anyNotNull(authMode) && !authMode[0].equals("")) { | |||
| @@ -130,6 +158,8 @@ public class CheckRecorderController extends BaseController { | |||
| findCheckRecord.getSqlMap().getWhere().and("check_time", QueryType.GT, findCheckRecord.getStartDate()); | |||
| findCheckRecord.getSqlMap().getWhere().and("check_time", QueryType.LTE, findCheckRecord.getEndDate()); | |||
| System.err.println(findCheckRecord.getSqlMap().getWhere().toSql()); | |||
| page = checkRecordsService.findPage(page, findCheckRecord); | |||
| return page; | |||
| @@ -24,6 +24,7 @@ import com.lecoo.kjg.web.sys.utils.DateUtils; | |||
| import com.lecoo.kjg.web.sys.utils.RedisUtils; | |||
| import kong.unirest.HttpResponse; | |||
| import kong.unirest.Unirest; | |||
| import org.apache.shiro.authz.annotation.RequiresAuthentication; | |||
| import org.apache.shiro.authz.annotation.RequiresPermissions; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.beans.factory.annotation.Value; | |||
| @@ -148,7 +149,7 @@ public class DeviceController extends BaseController { | |||
| List<String> devIds = Lists.newArrayList(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| @@ -408,7 +409,7 @@ public class DeviceController extends BaseController { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| Page<Device> page = new Page<Device>(request, response); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> deviceIds = deviceService.getGateListByUserCode(userCode) | |||
| .stream().map(Device::getId).collect(Collectors.toList()); | |||
| if (deviceIds.size() > 0) { | |||
| @@ -87,7 +87,7 @@ public class DeviceExtGateEventController extends BaseController { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<Device> list = deviceDao.findGatesByUserCode(userCode); | |||
| List<String> ids = Lists.newArrayList(); | |||
| for (Device d : list) { | |||
| @@ -64,7 +64,7 @@ public class DeviceLogController extends BaseController { | |||
| String[] logArr = new String[]{LOG_OPERATE_INFO}; | |||
| adminLog.getSqlMap().getWhere().and("log_title", QueryType.NOT_IN, logArr); | |||
| String loginCode = UserUtils.getUser().getLoginCode(); | |||
| if (BusinessUtils.isSecAdmin(loginCode)) { | |||
| if (BusinessUtils.isSecAdmin(loginCode) || BusinessUtils.isCorpAdmin(loginCode)) { | |||
| adminLog.setCreateBy(loginCode); | |||
| } | |||
| return adminLogService.findPage(new Page<>(request, response), adminLog); | |||
| @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.google.common.collect.Lists; | |||
| import com.google.common.collect.Maps; | |||
| import com.jeesite.common.collect.ListUtils; | |||
| import com.jeesite.common.config.Global; | |||
| import com.jeesite.common.entity.DataEntity; | |||
| import com.jeesite.common.entity.Page; | |||
| @@ -14,6 +15,7 @@ import com.jeesite.common.mybatis.mapper.query.QueryType; | |||
| import com.jeesite.modules.sys.dao.UserDataScopeDao; | |||
| import com.jeesite.modules.sys.entity.Office; | |||
| import com.jeesite.modules.sys.entity.User; | |||
| import com.jeesite.modules.sys.entity.UserDataScope; | |||
| import com.jeesite.modules.sys.utils.UserUtils; | |||
| import com.lecoo.kjg.web.sys.constant.CommonConsts; | |||
| import com.lecoo.kjg.web.sys.dao.AuthHandleDao; | |||
| @@ -222,12 +224,13 @@ public class EmployeeController extends BaseController { | |||
| } | |||
| if (!DataEntity.STATUS_NORMAL.equals(emp.getStatus())) {//状态值不正常会被真删除 | |||
| userExtraDao.delByLoginCode(emp.getJobNumber()); | |||
| empService.delByJobNumber(emp.getJobNumber()); | |||
| } else { | |||
| empService.delete(emp); | |||
| empService.delMappingByEmp(emp); | |||
| // empService.delMappingByEmp(emp); | |||
| User user = UserUtils.getByLoginCode(emp.getJobNumber()); | |||
| if (ObjectUtils.anyNotNull(user)) { | |||
| @@ -264,7 +267,7 @@ public class EmployeeController extends BaseController { | |||
| .or("department", QueryType.LIKE, emp.getRealName()).endBracket(); | |||
| emp.setRealName(null); | |||
| } | |||
| if(BusinessUtils.isSecAdmin(userCode)) { | |||
| if(BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> officeCodes = userDataScopeService.getOfficeCodeByUserCode(userCode); | |||
| if(officeCodes != null && officeCodes.size() > 0){ | |||
| emp.getSqlMap().getWhere().and("office_code", QueryType.IN, officeCodes); | |||
| @@ -357,15 +360,14 @@ public class EmployeeController extends BaseController { | |||
| office.setParentCode(topOffice); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| List<AccessControl> accessControlList = Lists.newLinkedList(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> officeCodes = userDataScopeService.getOfficeCodeByUserCode(UserUtils.getUser().getUserCode()); | |||
| office.getSqlMap().getWhere().and("office_code", QueryType.IN, officeCodes); | |||
| accessControlList = accessControlService.getAccessControlsByOfficeCodes(officeCodes.toArray(new String[0])); | |||
| accessControlList = accessControlService.getAccessControlsByOfficeCodes(officeCodes); | |||
| } else { | |||
| accessControlList = accessControlService.findList(new AccessControl()); | |||
| } | |||
| accessControlList = accessControlService.findList(new AccessControl()); | |||
| List<Office> officeList = officeService.findList(office); | |||
| model.addAttribute("officeList", officeList); | |||
| @@ -458,7 +460,7 @@ public class EmployeeController extends BaseController { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| List<Office> offices; | |||
| //Sec-admin filter | |||
| if(BusinessUtils.isSecAdmin(userCode)) { | |||
| if(BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| offices = officeService.getOfficesByUserCode(userCode); | |||
| } else { | |||
| Office office = new Office(); | |||
| @@ -481,7 +483,6 @@ public class EmployeeController extends BaseController { | |||
| @RequestMapping(value = "/listData") | |||
| @ResponseBody | |||
| public Page<Emp> listData(Emp emp, @RequestParam(required = false, defaultValue = "1") String btnType,@RequestParam(required = false, defaultValue = "") String officeCodes, HttpServletRequest request, HttpServletResponse response) { | |||
| redisUtils.setDefaultString("hjjh", "hkkejj"); | |||
| Emp findEmp = new Emp(); | |||
| Page<Emp> page = new Page<Emp>(request, response); | |||
| @@ -501,8 +502,7 @@ public class EmployeeController extends BaseController { | |||
| List<Office> offices = officeService.findList(findOffice); | |||
| officeCodeList = offices.stream().map(Office::getOfficeCode).collect(Collectors.toList()); | |||
| } | |||
| System.err.println(officeCodeList); | |||
| System.err.println(officeCodeList.size()); | |||
| //Sec-admin filter | |||
| // String loginCode = UserUtils.getUser().getLoginCode(); | |||
| // if (BusinessUtils.isSecAdmin(loginCode) ) { | |||
| @@ -529,20 +529,33 @@ public class EmployeeController extends BaseController { | |||
| findEmp.setStatus_in(Emp.STATUS_ABLE_SHOW); | |||
| } | |||
| if (StringUtils.isNotEmpty(emp.getEmpType()) && Integer.valueOf(emp.getEmpType())>=0) { | |||
| findEmp.setEmpType(emp.getEmpType()); | |||
| } | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| /*if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (StringUtils.isEmpty(officeCodes) && (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode))) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| List<UserDataScope> userDataScopes = userDataScopeDao.findList(uds); | |||
| List<String> offices = userDataScopes.stream().map(UserDataScope::getCtrlData).collect(Collectors.toList()); | |||
| List<String> offices2 = ListUtils.newArrayList(); | |||
| offices2.addAll(offices); | |||
| for (String s : offices2) { | |||
| if (topOffice.equals(s)) { | |||
| continue; | |||
| } | |||
| Office find = new Office(); | |||
| find.setParentCode(s); | |||
| List<String> temp = officeService.findList(find).stream().map(Office::getOfficeCode).collect(Collectors.toList()); | |||
| offices.addAll(temp); | |||
| } | |||
| if (offices.size()>0) { | |||
| findEmp.getSqlMap().getWhere().and("office_code", QueryType.IN, offices); | |||
| } | |||
| }*/ | |||
| } | |||
| page = empService.findPage(page, findEmp); | |||
| List<Emp> empList = page.getList(); | |||
| @@ -568,7 +581,6 @@ public class EmployeeController extends BaseController { | |||
| @Transactional(readOnly = false) | |||
| public String save(@Validated Emp emp, Model model, @RequestParam(value = "accessControlIds", required = true) List<String> accessControlIds, @RequestParam(value = "delAccessControlIds", required = true) List<String> delAccessControlIds,@RequestParam(value = "addAccessControlIds", required = true) List<String> addAccessControlIds, String extendVals ,String empAccessControlAttendanceAndOpenDoorInfo) { | |||
| List<Map<String,String>> requestData = (List<Map<String,String>>)JSONArray.parse(empAccessControlAttendanceAndOpenDoorInfo); | |||
| if (null != accessControlIds && accessControlIds.size() > 0){ | |||
| emp.setAccessControls(accessControlIds); | |||
| } | |||
| @@ -580,37 +592,35 @@ public class EmployeeController extends BaseController { | |||
| if ("0".equals(emp.getNextShiftType())){ | |||
| emp.setNextShiftType(""); | |||
| } | |||
| Date date = new Date(); | |||
| Emp originEmp = empService.get(emp.getId()); | |||
| if(null != originEmp && !Objects.equals(originEmp.getShiftType(), emp.getShiftType())) { | |||
| Calendar cal = Calendar.getInstance(); | |||
| cal.setTime(date); | |||
| cal.set(Calendar.HOUR_OF_DAY, 0); | |||
| cal.set(Calendar.MINUTE, 0); | |||
| cal.set(Calendar.SECOND, 0); | |||
| cal.set(Calendar.MILLISECOND, 0); | |||
| if(emp.getShiftValidTime().before(cal.getTime())) { | |||
| return renderResult(Global.FALSE, "换班时间不能早于当前时间"); | |||
| } | |||
| } | |||
| emp.setUpdateTime(new Date()); | |||
| Date date = new Date(); | |||
| if (null == emp.getId()) { | |||
| emp.setRegisterTime(new Date()); | |||
| emp.setRegisterTime(date); | |||
| emp.setFaceImageName(""); | |||
| if (StringUtils.isEmpty(emp.getJobNumber())) { | |||
| emp.setJobNumber(emp.getRealName()); | |||
| } | |||
| emp.setNickName(emp.getRealName()); | |||
| emp.setId(UUID.randomUUID().toString().replaceAll("-", "")); | |||
| emp.setIsNewRecord(true); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> acIds = accessControlService.findByUserCode(userCode) | |||
| .stream().map(AccessControl::getAccessControlId).collect(Collectors.toList()); | |||
| addAccessControlIds.addAll(acIds); | |||
| } | |||
| addAccessControlIds = accessControlIds; | |||
| } | |||
| emp.setStatus(Emp.STATUS_NORMAL); | |||
| empService.handleAuth(delAccessControlIds, addAccessControlIds, accessControlIds, emp); | |||
| empService.save(emp, accessControlIds); | |||
| if (StringUtils.isNotEmpty(emp.getBase64())) { | |||
| emp = empService.faceReg2(emp); | |||
| } | |||
| @@ -84,7 +84,7 @@ public class ExtendsPropertyController extends BaseController { | |||
| } | |||
| //Sec-admin filter | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if(BusinessUtils.isSecAdmin(userCode)) { | |||
| if(BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope userDataScope = new UserDataScope(); | |||
| userDataScope.setUserCode(UserUtils.getUser().getUserCode()); | |||
| userDataScope.setCtrlType("Office"); | |||
| @@ -108,7 +108,7 @@ public class ExtendsPropertyController extends BaseController { | |||
| office.setParentCode(TOP_OFFICE); | |||
| office.setOfficeCode(extendRela.getRelaId()); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if(BusinessUtils.isSecAdmin(userCode)) { | |||
| if(BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope userDataScope = new UserDataScope(); | |||
| userDataScope.setUserCode(UserUtils.getUser().getUserCode()); | |||
| userDataScope.setCtrlType("Office"); | |||
| @@ -95,7 +95,7 @@ public class FaceController extends BaseController { | |||
| //添加所有公司下拉选 / 对不同登录用户做公司限定 | |||
| List<Office> officeList = null; | |||
| List<Device> devices = null; | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| officeList = officeService.getOfficesByUserCode(userCode); | |||
| devices = deviceService.getGateListByUserCode(userCode); | |||
| } else { | |||
| @@ -182,7 +182,7 @@ public class FaceController extends BaseController { | |||
| faceHistory.setFaceId_ne(); | |||
| //Sec-admin filter | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> deviceIds = deviceService.getGateListByUserCode(userCode) | |||
| .stream().map(Device::getId).collect(Collectors.toList()); | |||
| if (null == deviceIds || deviceIds.size() <= 0) { | |||
| @@ -208,7 +208,7 @@ public class FaceController extends BaseController { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| //由于前端是下拉选择框,默认显示"所有",所以这里加了一个不存在的设备表示所有 | |||
| List<Device> devices = null; | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| devices = deviceService.getDeviceListByUserCode(userCode); | |||
| } else { | |||
| devices = deviceService.findList(new Device()); | |||
| @@ -244,7 +244,7 @@ public class FaceController extends BaseController { | |||
| } | |||
| //Sec-admin filter | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> deviceIds = deviceService.getDeviceListByUserCode(userCode) | |||
| .stream().map(Device::getId).collect(Collectors.toList()); | |||
| if (deviceIds == null || deviceIds.size() <= 0) { | |||
| @@ -323,7 +323,7 @@ public class FaceController extends BaseController { | |||
| //Sec-admin filter | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| List<FaceHistory> list = new ArrayList<>(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> deviceIds = deviceService.getDeviceListByUserCode(userCode) | |||
| .stream().map(Device::getId).collect(Collectors.toList()); | |||
| if (deviceIds != null && deviceIds.size() > 0) { | |||
| @@ -147,7 +147,7 @@ public class IndexController extends BaseController { | |||
| List<Device> devices = null; | |||
| if (BusinessUtils.isSecAdmin(userCode)){ | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)){ | |||
| devices = deviceDao.findByUserCode(userCode); | |||
| } else { | |||
| Device d = new Device(); | |||
| @@ -439,7 +439,7 @@ public class IndexController extends BaseController { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| Long empCount = 0L; | |||
| List<Device> devices = null; | |||
| if (BusinessUtils.isSecAdmin(userCode)){ | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)){ | |||
| devices = deviceDao.findByUserCode(userCode); | |||
| } else { | |||
| Device d = new Device(); | |||
| @@ -571,7 +571,7 @@ public class IndexController extends BaseController { | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| Long count = 0L; | |||
| List<Device> devices = null; | |||
| if (BusinessUtils.isSecAdmin(userCode)){ | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)){ | |||
| devices = deviceDao.findByUserCode(userCode); | |||
| } else { | |||
| Device d = new Device(); | |||
| @@ -124,7 +124,7 @@ public class MonthlyAttendanceController extends BaseController { | |||
| } | |||
| //Sec-admin filter | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if(BusinessUtils.isSecAdmin(userCode)) { | |||
| if(BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> officeCodes = userDataScopeService.getOfficeCodeByUserCode(userCode); | |||
| if(officeCodes != null && officeCodes.size() > 0){ | |||
| emp.setOfficeCode_in(officeCodes.toArray(new String[officeCodes.size()])); | |||
| @@ -197,7 +197,7 @@ public class MonthlyAttendanceController extends BaseController { | |||
| Emp emp = setEmpInfo(monthlyAttendance); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| List<MonthlyAttendance> list = new ArrayList<>(); | |||
| if(BusinessUtils.isSecAdmin(userCode)) { | |||
| if(BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> officeCodes = userDataScopeService.getOfficeCodeByUserCode(userCode); | |||
| if(officeCodes != null && officeCodes.size() > 0){ | |||
| emp.getSqlMap().getWhere().and("office_code", QueryType.IN, officeCodes); | |||
| @@ -63,6 +63,9 @@ public class MyOfficeController extends BaseController { | |||
| private static final int OFFICE_ID_LENGTH = 19; | |||
| @Value("${office.topOffice}") | |||
| private String topOffice; | |||
| @Value("${office.defaultOffice}") | |||
| private String defaultOffice; | |||
| @@ -231,19 +234,19 @@ public class MyOfficeController extends BaseController { | |||
| public Page<Office> listData(Office office, String ctrlPermi, HttpServletRequest request, HttpServletResponse response) { | |||
| Page<Office> page = new Page<>(request, response); | |||
| if (StringUtils.isBlank(office.getParentCode())) { | |||
| office.setParentCode("0"); | |||
| // office.setParentCode("0"); | |||
| } | |||
| if (StringUtils.isNotBlank(office.getViewCode()) || StringUtils.isNotBlank(office.getOfficeName()) || StringUtils.isNotBlank(office.getFullName())) { | |||
| office.setParentCode(null); | |||
| } | |||
| this.officeService.addDataScopeFilter(office, ctrlPermi); | |||
| // this.officeService.addDataScopeFilter(office, ctrlPermi); | |||
| office.setStatus(""); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (office.getOfficeCode()==null && (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode))) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| @@ -251,8 +254,20 @@ public class MyOfficeController extends BaseController { | |||
| List<UserDataScope> userDataScopes = userDataScopeDao.findList(uds); | |||
| List<String> officeIds = userDataScopes.stream().map(UserDataScope::getCtrlData).collect(Collectors.toList()); | |||
| List<String> iids = Lists.newArrayList(); | |||
| if (officeIds.size()>0) { | |||
| office.getSqlMap().getWhere().and("office_code", QueryType.IN, officeIds); | |||
| for (String str : officeIds) { | |||
| if (!topOffice.equals(str)) { | |||
| iids.add(str); | |||
| } | |||
| } | |||
| office.getSqlMap().getWhere().andBracket("office_code", QueryType.IN, officeIds); | |||
| if(iids.size()>0) { | |||
| office.getSqlMap().getWhere().or("parent_code", QueryType.IN, iids); | |||
| } | |||
| office.getSqlMap().getWhere().endBracket(); | |||
| } | |||
| } | |||
| @@ -356,15 +371,10 @@ public class MyOfficeController extends BaseController { | |||
| // true表示新增 false表示修改 | |||
| boolean isNewRecord = office.getIsNewRecord(); | |||
| List<String> sstr = Lists.newArrayList(); | |||
| if (!(ObjectUtils.anyNotNull(empIds))) { | |||
| List<Emp> empList = empService.findEmployeesByOfficeCode(office.getOfficeCode()); | |||
| if (empList.size()>0) { | |||
| empList.forEach(emp -> { | |||
| System.err.println(emp.getId()); | |||
| sstr.add(emp.getId()); | |||
| }); | |||
| } | |||
| List<String> sstr = empList.stream().map(Emp::getId).collect(Collectors.toList()); | |||
| if (ObjectUtils.anyNotNull(sstr)) | |||
| empIds = StringUtils.join(sstr, ","); | |||
| } | |||
| @@ -465,13 +475,13 @@ public class MyOfficeController extends BaseController { | |||
| where.setCompanyCode(companyCode); | |||
| where.getSqlMap().getWhere().disableAutoAddStatusWhere(); | |||
| if (isAll == null || !isAll) { | |||
| this.officeService.addDataScopeFilter(where, ctrlPermi); | |||
| // this.officeService.addDataScopeFilter(where, ctrlPermi); | |||
| } | |||
| where.setStatus_in(Emp.STATUS_ABLE_SHOW); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| UserDataScope uds = new UserDataScope(); | |||
| uds.setUserCode(userCode); | |||
| uds.setCtrlType("Office"); | |||
| @@ -479,8 +489,20 @@ public class MyOfficeController extends BaseController { | |||
| List<UserDataScope> userDataScopes = userDataScopeDao.findList(uds); | |||
| List<String> officeIds = userDataScopes.stream().map(UserDataScope::getCtrlData).collect(Collectors.toList()); | |||
| List<String> iids = Lists.newArrayList(); | |||
| if (officeIds.size()>0) { | |||
| where.getSqlMap().getWhere().and("office_code", QueryType.IN, officeIds); | |||
| for (String str : officeIds) { | |||
| if (!topOffice.equals(str)) { | |||
| iids.add(str); | |||
| } | |||
| } | |||
| where.getSqlMap().getWhere().andBracket("office_code", QueryType.IN, officeIds); | |||
| if(iids.size()>0) { | |||
| where.getSqlMap().getWhere().or("parent_code", QueryType.IN, iids); | |||
| } | |||
| where.getSqlMap().getWhere().endBracket(); | |||
| } | |||
| } | |||
| @@ -63,7 +63,7 @@ public class PasswordLogController extends BaseController { | |||
| PasswordLog passwordLog = new PasswordLog(); | |||
| String userCode = UserUtils.getUser().getUserCode(); | |||
| Device device = new Device(); | |||
| if (BusinessUtils.isSecAdmin(userCode)) { | |||
| if (BusinessUtils.isSecAdmin(userCode) || BusinessUtils.isCorpAdmin(userCode)) { | |||
| List<String> deviceIds = deviceService.getDeviceListByUserCode(userCode).stream().map(Device::getId).collect(Collectors.toList()); | |||
| if (null != deviceIds && deviceIds.size() > 0) { | |||
| device.setId_in(deviceIds.toArray(new String[deviceIds.size()])); | |||
| @@ -1,7 +1,6 @@ | |||
| package com.lecoo.kjg.web.sys.web; | |||
| import com.alibaba.fastjson.JSONArray; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import com.jeesite.common.codec.DesUtils; | |||
| import com.jeesite.common.config.Global; | |||
| @@ -56,8 +56,6 @@ public class VisitSysController extends BaseController { | |||
| VisitRecords findVisitRecord = new VisitRecords(); | |||
| if (map.get("hasCar") != null && map.get("hasCar")[0]!="") { | |||
| findVisitRecord.setHasCar(Integer.valueOf(map.get("hasCar")[0])); | |||
| } else { | |||
| findVisitRecord.setHasCar(-1); | |||
| } | |||
| if (map.get("reason") != null && map.get("reason")[0]!="") { | |||
| @@ -0,0 +1,55 @@ | |||
| package com.lecoo.kjg.web.sys.web.api; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.lecoo.kjg.web.sys.constant.ResponseCode; | |||
| import com.lecoo.kjg.web.sys.dao.DeviceExtDao; | |||
| import com.lecoo.kjg.web.sys.entity.DeviceExt; | |||
| import com.lecoo.kjg.web.sys.web.BaseController; | |||
| import com.lenovo.nowgo.common.http.response.MyResponse; | |||
| import org.springframework.beans.factory.annotation.Autowired; | |||
| import org.springframework.http.MediaType; | |||
| import org.springframework.validation.annotation.Validated; | |||
| import org.springframework.web.bind.annotation.*; | |||
| @RestController | |||
| @RequestMapping(value = "/api/device") | |||
| public class DeviceApiController extends BaseController { | |||
| @Autowired | |||
| private DeviceExtDao deviceExtDao; | |||
| /** | |||
| * 上传pad参数 | |||
| * @return | |||
| */ | |||
| @RequestMapping(value = "/uploadPadExt", method = {RequestMethod.POST}, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) | |||
| @ResponseBody | |||
| public MyResponse upload(@Validated @RequestBody DeviceExt deviceExt){ | |||
| if (StringUtils.isEmpty(deviceExt.getDeviceId())) { | |||
| return output(ResponseCode.DEVICE_NOT_FOUND); | |||
| } | |||
| deviceExtDao.update(deviceExt); | |||
| return outputSuccess(); | |||
| } | |||
| @RequestMapping(value = "/getPadExt", method = {RequestMethod.GET}) | |||
| @ResponseBody | |||
| public MyResponse getPadExt(String deviceId){ | |||
| if (StringUtils.isEmpty(deviceId)) { | |||
| return output(ResponseCode.PARAMS_TYPE_ERROR); | |||
| } | |||
| DeviceExt de = new DeviceExt(); | |||
| de.setId(deviceId); | |||
| DeviceExt det = deviceExtDao.get(de); | |||
| if (null == det) { | |||
| det = deviceExtDao.findByRelationId(deviceId); | |||
| } | |||
| return outputSuccess(det); | |||
| } | |||
| } | |||
| @@ -2,7 +2,10 @@ package com.lecoo.kjg.web.sys.web.api; | |||
| import com.google.common.collect.Sets; | |||
| import com.jeesite.common.lang.DateUtils; | |||
| import com.jeesite.common.lang.StringUtils; | |||
| import com.lecoo.kjg.web.sys.dao.EmpDao; | |||
| import com.lecoo.kjg.web.sys.dto.EmpDTO; | |||
| import com.lecoo.kjg.web.sys.entity.Emp; | |||
| import com.lecoo.kjg.web.sys.web.BaseController; | |||
| import com.lecoo.kjg.web.sys.entity.FaceHistory; | |||
| import com.lecoo.kjg.web.sys.service.DeviceService; | |||
| @@ -48,6 +51,9 @@ public class EmpApiController extends BaseController { | |||
| @Autowired | |||
| private FaceHistoryService faceHistoryService; | |||
| @Autowired | |||
| private EmpDao empDao; | |||
| /** | |||
| * H5注册人脸 | |||
| @@ -154,4 +160,15 @@ public class EmpApiController extends BaseController { | |||
| } | |||
| return outputSuccess(faceMapList); | |||
| } | |||
| @GetMapping("/getByName") | |||
| @ResponseBody | |||
| public MyResponse getEmpList(String name, String officeCode) { | |||
| List<Emp> emps = null; | |||
| if (StringUtils.isNotEmpty(name)) { | |||
| emps = this.empDao.findByName(officeCode, name); | |||
| } | |||
| return outputData(0, emps); | |||
| } | |||
| } | |||
| @@ -84,7 +84,6 @@ public class FaceApiController extends BaseController { | |||
| String base64Image = ""; | |||
| JSONObject json; | |||
| JSONArray obj = new JSONArray(); | |||
| JSONObject faceRectangle = new JSONObject(); | |||
| EmpFaceFeature empFaceFeature = emp.getEmpFaceFeature(); | |||
| if (!(ObjectUtils.anyNotNull(empFaceFeature) && StringUtils.isNotEmpty(empFaceFeature.getFaceFeature()))){ | |||
| @@ -103,11 +102,12 @@ public class FaceApiController extends BaseController { | |||
| json = faceServiceSupport.getFaceExtraction(token, empId, base64Image); | |||
| obj = json.getJSONArray("faces").getJSONObject(0).getJSONArray("feature"); | |||
| faceRectangle = json.getJSONArray("faces").getJSONObject(0).getJSONObject("faceRectangle"); | |||
| if (!faceRectangle.isEmpty()) { | |||
| if (json.containsKey("feature")) { | |||
| obj = json.getJSONArray("feature"); | |||
| faceFlag = true; | |||
| } else { | |||
| return "人脸特征值提取失败!"; | |||
| } | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| @@ -0,0 +1,332 @@ | |||
| package com.lecoo.kjg.web.utils; | |||
| /** | |||
| * @author yk | |||
| * @description | |||
| * @date 2024-05-07 18:08 | |||
| */ | |||
| import com.alibaba.fastjson.JSON; | |||
| import com.alibaba.fastjson.JSONObject; | |||
| import okhttp3.Call; | |||
| import okhttp3.Callback; | |||
| import okhttp3.FormBody; | |||
| import okhttp3.MediaType; | |||
| import okhttp3.OkHttpClient; | |||
| import okhttp3.Request; | |||
| import okhttp3.RequestBody; | |||
| import okhttp3.Response; | |||
| import javax.net.ssl.SSLContext; | |||
| import javax.net.ssl.SSLSocketFactory; | |||
| import javax.net.ssl.TrustManager; | |||
| import javax.net.ssl.X509TrustManager; | |||
| import java.io.IOException; | |||
| import java.net.URLEncoder; | |||
| import java.security.SecureRandom; | |||
| import java.security.cert.X509Certificate; | |||
| import java.util.LinkedHashMap; | |||
| import java.util.Map; | |||
| import java.util.concurrent.Semaphore; | |||
| import java.util.concurrent.TimeUnit; | |||
| public class OkHttpUtil { | |||
| private static volatile OkHttpClient okHttpClient = null; | |||
| private static volatile Semaphore semaphore = null; | |||
| private Map<String, String> headerMap; | |||
| private Map<String, String> paramMap; | |||
| private String url; | |||
| private Request.Builder request; | |||
| /** | |||
| * 初始化okHttpClient,并且允许https访问 | |||
| */ | |||
| private OkHttpUtil() { | |||
| if (okHttpClient == null) { | |||
| synchronized (OkHttpUtil.class) { | |||
| if (okHttpClient == null) { | |||
| TrustManager[] trustManagers = buildTrustManagers(); | |||
| okHttpClient = new OkHttpClient.Builder() | |||
| .connectTimeout(15, TimeUnit.SECONDS) | |||
| .writeTimeout(20, TimeUnit.SECONDS) | |||
| .readTimeout(20, TimeUnit.SECONDS) | |||
| .sslSocketFactory(createSSLSocketFactory(trustManagers), (X509TrustManager) trustManagers[0]) | |||
| .hostnameVerifier((hostName, session) -> true) | |||
| .retryOnConnectionFailure(true) | |||
| .build(); | |||
| addHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * 用于异步请求时,控制访问线程数,返回结果 | |||
| * | |||
| * @return | |||
| */ | |||
| private static Semaphore getSemaphoreInstance() { | |||
| //只能1个线程同时访问 | |||
| synchronized (OkHttpUtil.class) { | |||
| if (semaphore == null) { | |||
| semaphore = new Semaphore(0); | |||
| } | |||
| } | |||
| return semaphore; | |||
| } | |||
| /** | |||
| * 创建OkHttpUtil | |||
| * | |||
| * @return | |||
| */ | |||
| public static OkHttpUtil builder() { | |||
| return new OkHttpUtil(); | |||
| } | |||
| /** | |||
| * 添加url | |||
| * | |||
| * @param url | |||
| * @return | |||
| */ | |||
| public OkHttpUtil url(String url) { | |||
| this.url = url; | |||
| return this; | |||
| } | |||
| /** | |||
| * 添加参数 | |||
| * | |||
| * @param key 参数名 | |||
| * @param value 参数值 | |||
| * @return | |||
| */ | |||
| public OkHttpUtil addParam(String key, String value) { | |||
| if (paramMap == null) { | |||
| paramMap = new LinkedHashMap<>(16); | |||
| } | |||
| paramMap.put(key, value); | |||
| return this; | |||
| } | |||
| /** | |||
| * 添加请求头 | |||
| * | |||
| * @param key 参数名 | |||
| * @param value 参数值 | |||
| * @return | |||
| */ | |||
| public OkHttpUtil addHeader(String key, String value) { | |||
| if (headerMap == null) { | |||
| headerMap = new LinkedHashMap<>(16); | |||
| } | |||
| headerMap.put(key, value); | |||
| return this; | |||
| } | |||
| /** | |||
| * 初始化get方法 | |||
| * | |||
| * @return | |||
| */ | |||
| public OkHttpUtil get() { | |||
| request = new Request.Builder().get(); | |||
| StringBuilder urlBuilder = new StringBuilder(url); | |||
| if (paramMap != null) { | |||
| urlBuilder.append("?"); | |||
| try { | |||
| for (Map.Entry<String, String> entry : paramMap.entrySet()) { | |||
| urlBuilder.append(URLEncoder.encode(entry.getKey(), "utf-8")). | |||
| append("="). | |||
| append(URLEncoder.encode(entry.getValue(), "utf-8")). | |||
| append("&"); | |||
| } | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| urlBuilder.deleteCharAt(urlBuilder.length() - 1); | |||
| } | |||
| request.url(urlBuilder.toString()); | |||
| return this; | |||
| } | |||
| /** | |||
| * 初始化post方法 | |||
| * | |||
| * @param isJsonPost true等于json的方式提交数据,类似postman里post方法的raw | |||
| * false等于普通的表单提交 | |||
| * @return | |||
| */ | |||
| public OkHttpUtil post(boolean isJsonPost) { | |||
| RequestBody requestBody; | |||
| if (isJsonPost) { | |||
| String json = ""; | |||
| if (paramMap != null) { | |||
| json = JSON.toJSONString(paramMap); | |||
| } | |||
| requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); | |||
| } else { | |||
| FormBody.Builder formBody = new FormBody.Builder(); | |||
| if (paramMap != null) { | |||
| paramMap.forEach(formBody::add); | |||
| } | |||
| requestBody = formBody.build(); | |||
| } | |||
| request = new Request.Builder().post(requestBody).url(url); | |||
| return this; | |||
| } | |||
| /** | |||
| * 同步请求 | |||
| * | |||
| * @return | |||
| */ | |||
| public String sync() { | |||
| setHeader(request); | |||
| try { | |||
| Response response = okHttpClient.newCall(request.build()).execute(); | |||
| assert response.body() != null; | |||
| return response.body().string(); | |||
| } catch (IOException e) { | |||
| e.printStackTrace(); | |||
| return "请求失败:" + e.getMessage(); | |||
| } | |||
| } | |||
| /** | |||
| * 异步请求,有返回值 | |||
| */ | |||
| public String async() { | |||
| StringBuilder buffer = new StringBuilder(""); | |||
| setHeader(request); | |||
| okHttpClient.newCall(request.build()).enqueue(new Callback() { | |||
| @Override | |||
| public void onFailure(Call call, IOException e) { | |||
| buffer.append("请求出错:").append(e.getMessage()); | |||
| } | |||
| @Override | |||
| public void onResponse(Call call, Response response) throws IOException { | |||
| assert response.body() != null; | |||
| buffer.append(response.body().string()); | |||
| getSemaphoreInstance().release(); | |||
| } | |||
| }); | |||
| try { | |||
| getSemaphoreInstance().acquire(); | |||
| } catch (InterruptedException e) { | |||
| e.printStackTrace(); | |||
| } | |||
| return buffer.toString(); | |||
| } | |||
| /** | |||
| * 异步请求,带有接口回调 | |||
| * | |||
| * @param callBack | |||
| */ | |||
| public void async(ICallBack callBack) { | |||
| setHeader(request); | |||
| okHttpClient.newCall(request.build()).enqueue(new Callback() { | |||
| @Override | |||
| public void onFailure(Call call, IOException e) { | |||
| callBack.onFailure(call, e.getMessage()); | |||
| } | |||
| @Override | |||
| public void onResponse(Call call, Response response) throws IOException { | |||
| assert response.body() != null; | |||
| callBack.onSuccessful(call, response.body().string()); | |||
| } | |||
| }); | |||
| } | |||
| /** | |||
| * 为request添加请求头 | |||
| * | |||
| * @param request | |||
| */ | |||
| private void setHeader(Request.Builder request) { | |||
| if (headerMap != null) { | |||
| try { | |||
| for (Map.Entry<String, String> entry : headerMap.entrySet()) { | |||
| request.addHeader(entry.getKey(), entry.getValue()); | |||
| } | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * 生成安全套接字工厂,用于https请求的证书跳过 | |||
| * | |||
| * @return | |||
| */ | |||
| private static SSLSocketFactory createSSLSocketFactory(TrustManager[] trustAllCerts) { | |||
| SSLSocketFactory ssfFactory = null; | |||
| try { | |||
| SSLContext sc = SSLContext.getInstance("SSL"); | |||
| sc.init(null, trustAllCerts, new SecureRandom()); | |||
| ssfFactory = sc.getSocketFactory(); | |||
| } catch (Exception e) { | |||
| e.printStackTrace(); | |||
| } | |||
| return ssfFactory; | |||
| } | |||
| private static TrustManager[] buildTrustManagers() { | |||
| return new TrustManager[]{ | |||
| new X509TrustManager() { | |||
| @Override | |||
| public void checkClientTrusted(X509Certificate[] chain, String authType) { | |||
| } | |||
| @Override | |||
| public void checkServerTrusted(X509Certificate[] chain, String authType) { | |||
| } | |||
| @Override | |||
| public X509Certificate[] getAcceptedIssuers() { | |||
| return new X509Certificate[]{}; | |||
| } | |||
| } | |||
| }; | |||
| } | |||
| /** | |||
| * 自定义一个接口回调 | |||
| */ | |||
| public interface ICallBack { | |||
| void onSuccessful(Call call, String data); | |||
| void onFailure(Call call, String errorMsg); | |||
| } | |||
| /** | |||
| * @Author yangkai | |||
| * @Description 联想研究院新算法,请求模版 | |||
| * @Date 2024/5/8 | |||
| * @Param [url, json] | |||
| * @return java.lang.String | |||
| **/ | |||
| public static String postCvJson(String url, JSONObject json) throws Exception{ | |||
| OkHttpClient client = new OkHttpClient().newBuilder() | |||
| .build(); | |||
| MediaType mediaType = MediaType.parse("application/json"); | |||
| RequestBody body = RequestBody.create(mediaType, json.toJSONString()); | |||
| Request request = new Request.Builder() | |||
| .url(url) | |||
| .method("POST", body) | |||
| .addHeader("Content-Type", "application/json") | |||
| .addHeader("Authorization", "Basic ZmFjZS1tYW5hZ2VtZW50OmZhY2UtbWFuYWdlbWVudA==") | |||
| .build(); | |||
| Response response = client.newCall(request).execute(); | |||
| return response.body().string(); | |||
| } | |||
| } | |||
| @@ -15,13 +15,13 @@ server: | |||
| session: | |||
| timeout: 1800 | |||
| redis: | |||
| timeout: 600000 | |||
| password: ENC(5pXr3t6cME1jduXpYq+8IA==) | |||
| group: leface:pad | |||
| cluster: | |||
| max-redirects: 3 # 获取失败 最大重定向次数 | |||
| nodes: 39.105.85.176:6371,39.105.85.176:6372,39.105.85.176:6373,39.105.85.176:6374,39.105.85.176:6375,39.105.85.176:6376 | |||
| #redis: | |||
| # timeout: 600000 | |||
| # password: ENC(5pXr3t6cME1jduXpYq+8IA==) | |||
| # group: leface:pad | |||
| # cluster: | |||
| # max-redirects: 3 # 获取失败 最大重定向次数 | |||
| # nodes: 39.105.85.176:6371,39.105.85.176:6372,39.105.85.176:6373,39.105.85.176:6374,39.105.85.176:6375,39.105.85.176:6376 | |||
| # 数据库连接配置 | |||
| mysql: | |||
| @@ -31,11 +31,13 @@ mysql: | |||
| # username: root | |||
| # password: Lecoo@hj | |||
| host: ${DB_HOST:39.105.85.176} | |||
| port: ${DB_PORT:3306} | |||
| database: ${DB_NAME:hj2} | |||
| # host: ${DB_HOST:8.131.78.156} | |||
| # port: ${DB_PORT:23306} | |||
| host: ${DB_HOST:127.0.0.1} | |||
| port: ${DB_PORT:3308} | |||
| database: ${DB_NAME:lecoo} | |||
| username: ${DB_USER:root} | |||
| password: ${DB_PASSWORD:Lecooai@2021} | |||
| password: ${DB_PASSWORD:Digimeta@123} | |||
| # 业务相关配置 | |||
| biz: | |||
| @@ -200,15 +202,16 @@ mqttClient: | |||
| serverPort: 1883 | |||
| clientId: mqtt_clientid_dev_2002 | |||
| faceServerII: | |||
| ip: 8.131.78.156 | |||
| ip: 39.105.51.226 | |||
| port: 5000 | |||
| user: lecooai_hw01 | |||
| password: lecooai@2021 | |||
| hasAuthorize: false | |||
| faceServerI: | |||
| ip: 39.105.51.226 | |||
| port: 5000 | |||
| ip: 123.56.73.158 | |||
| port: 30306 | |||
| user: lecooai_hw01 | |||
| password: lecooai@2021 | |||
| hasAuthorize: false | |||
| @@ -36,7 +36,7 @@ spring: | |||
| devtools: | |||
| restart: | |||
| enabled: true | |||
| enabled: false | |||
| # # 缓存配置 | |||
| # redis: | |||
| # # 缓存及会话共享(专业版) | |||
| @@ -46,11 +46,13 @@ spring: | |||
| # # Redis 连接参数 (RedisProperties) | |||
| redis: | |||
| host: 39.105.85.176 | |||
| port: 6379 | |||
| #host: 39.105.85.176 | |||
| host: 127.0.0.1 | |||
| port: 6381 | |||
| ssl: false | |||
| database: 0 | |||
| password: lecooai-redis | |||
| #password: lecooai-redis | |||
| password: | |||
| group: leface:pad | |||
| timeout: 10000 | |||
| # lettuce: | |||
| @@ -89,7 +91,7 @@ copyrightYear: 2022 | |||
| # 软件提供商公司或个人名称 | |||
| companyName: Lecoo | |||
| productName: 黄江科技馆票务系统 | |||
| productName: 数字人后台管理系统 | |||
| #是否演示模式 | |||
| @@ -167,7 +169,7 @@ user: | |||
| # # JSON格式说明:{"用户类型":{"dao":"Dao的Bean名称","loginView":"登录视图","indexView":"主页框架面视图"}} | |||
| userTypeMap: > | |||
| { | |||
| "employee":{"dao":"employeeDao","loginView":"wx/sysLogin","indexView":"wx/sysIndex"}, | |||
| "employee":{"dao":"employeeDao","loginView":"wx/sysLogin","indexView":"wx/sysIndex2"}, | |||
| "member":{"dao":"memberDao","loginView":"","indexView":"modules/sys/sysIndexMember"}, | |||
| "btype":{"dao":"btypeInfoDao","loginView":"","indexView":"modules/sys/sysIndexBtype"}, | |||
| "persion":{"dao":"persionDao","loginView":"wx/sysLogin","indexView":"wx/sysIndex"}, | |||
| @@ -199,8 +201,10 @@ shiro: | |||
| /backup/** = anon | |||
| /visitor/** = anon | |||
| /f/** = anon | |||
| #/ReportServer/** = user | |||
| #${adminPath}/** = user | |||
| #${adminPath}/sys/device/remoteConfig = anon | |||
| ## Session 相关 | |||
| #session: | |||
| @@ -389,37 +393,48 @@ wx: | |||
| host: 127.0.0.1 | |||
| port: 6379 | |||
| configs: | |||
| - appId: wx225662102fc5f39a # 第一个公众号的appid | |||
| # - appId: wx80dc26b645077e97 # 第一个公众号的appid | |||
| - appId: ENC(eZxOTsJO31L8EmjECBVsUWbv0DUa9hGU0l3LqPUrLDQ=) # 第一个公众号的appid | |||
| # - appId: wxcea6b4840efb906e # 第一个公众号的appid | |||
| # - appId: ENC(5ZzYjATZAQK3mSkZKTPuHEqgIQRv8ADix8SsVZdfeAg=) # 第一个公众号的appid | |||
| # secret: 5fea919f2cb1b320cebdb9896f697361 # 公众号的appsecret | |||
| secret: ENC(XHPy8rxb7MlPaeBbmPjHZGu9bqRGWY8IKWCmG3NSwygAMXqcqcFNUksMKukd5eHH) # 公众号的appsecret | |||
| secret: ff4080ff5a16a378bd8804acd507d468 # 公众号的appsecret | |||
| # secret: ENC(XHPy8rxb7MlPaeBbmPjHZGu9bqRGWY8IKWCmG3NSwygAMXqcqcFNUksMKukd5eHH) # 公众号的appsecret | |||
| token: 83u4h # 接口配置里的Token值 | |||
| templateSendUrl: http://www.hjkjg.top:49180/sendMsg | |||
| pushMsgTemplateId: jJhwX7j8DXM_aWME5aLcVfasNAuV5a0EEA4qJCAMJdg #成功预约 | |||
| refundMsgTemplateId: jJhwX7j8DXM_aWME5aLcVfasNAuV5a0EEA4qJCAMJdg #退票预约 | |||
| confirmMsgTemplateId: jJhwX7j8DXM_aWME5aLcVfasNAuV5a0EEA4qJCAMJdg #确认预约 | |||
| auditTemplateId: Y1qGJ7SjY4GFky9V101dV8rYQzDR1uZ8g3e6d16M1Ts | |||
| meetingTemplateId: XvooIa-05NHGWGyD6Cf4mE1-LaruFFGJMjxaXyLC73M | |||
| regAuditTemplateId: RYDfkUjIRHnCWSy_O1XfDaFT9uE-jYqDAtrpkp49350 | |||
| url: ${sys.baseUrl}/f/wx/oauth2 | |||
| sys: | |||
| baseUrl: https://dev.hjkjg.top | |||
| baseUrl: http://ai.lecooai.com | |||
| # baseUrl: http://127.0.0.1:${server.port} | |||
| error: | |||
| returnButton: 返回登陆页面 | |||
| api: | |||
| apiKey: sys_ticket_hj | |||
| apiKey2: sys_digimeta_ai | |||
| KeySecrect: 68c62ff7-d9e2-414b-aba9-2aadf8adca20 | |||
| mms: | |||
| accessKeyId: LTAI5tQr5ydtSqnzcXMRxR1G | |||
| accessKeySecrect: 86wHdKw1kMR3apCMnWES5NuJk28iM2 | |||
| receptionPhones: 18910801519 | |||
| accessKeyId: LTAI5tR67Z2jD21XdjZppe2E | |||
| accessKeySecrect: 1q8QkQEzc8UZ3JmH8nt73tP1etO5Px | |||
| endpoint: dysmsapi.aliyuncs.com | |||
| signName: 国泰 | |||
| signName: 来酷智能 | |||
| signNameVisitor: 国泰访客 | |||
| template: SMS_228835440 | |||
| carTemplate: SMS_228850376 | |||
| fixedTemplate: SMS_228835443 | |||
| codeTemplate: SMS_229300003 | |||
| meetingOrderTemplate: SMS_269450061 | |||
| meetingQuitTemplate: SMS_269585065 | |||
| meetingRemindTemplate: SMS_269405069 | |||
| defaultRemindTemplate: SMS_269580409 | |||
| robotName: 小酷 | |||
| record: | |||
| status: | |||
| @@ -446,7 +461,7 @@ mqtt: | |||
| # 心跳 | |||
| keepalive: 30 | |||
| httpServer: http://39.105.85.176:8008 | |||
| httpServer: http://172.17.0.1:8008 | |||
| devCmdPath: /api/mqtt_dev_cmd | |||
| @@ -454,9 +469,8 @@ face: | |||
| server: http://${faceServerI.ip}:${faceServerI.port} | |||
| updServer: http://${faceServerII.ip}:${faceServerII.port} | |||
| authorizePath: /authorize | |||
| # extractionPath: /apps/v1/function/cv/face-extraction | |||
| extractionPath: /cv/feature-extraction-service/1.7 | |||
| qualityPath: /cv/quality/1.7 | |||
| extractionPath: /apps/v1/solution/cv/face-extraction | |||
| qualityPath: /apps/v1/solution/cv/face-quality | |||
| modeUpdate: true | |||
| modeUpdEmps: "'beeefac44ef94daca475ff85a5c720cd','65f061754e204484a955aba8154eec14','a0a0f615ec374d9bb1e1ace496e586d7','e83e30d959144a65b83beb3b841c10b5','0601b9fc00204224a671bcd47040be30','7cabfde922354b41ae66841e3d0cc4d3'" | |||
| @@ -476,6 +490,10 @@ jasypt: | |||
| algorithm: PBEWithMD5AndDES | |||
| iv-generator-classname: org.jasypt.iv.NoIvGenerator | |||
| proxy-property-sources: true | |||
| password: lecooHjkjg | |||
| # property: | |||
| # prefix: "ENC@[" | |||
| # suffix: "]" | |||
| # suffix: "]" | |||
| @@ -15,4 +15,8 @@ | |||
| </if> | |||
| </select> | |||
| <select id="findByUserCode" parameterType="String" resultType="com.lecoo.kjg.web.sys.entity.AccessControlGroup"> | |||
| select * from tf_project_access_control_group acg where acg.office_code in (select ctrl_data from tf_sys_user_data_scope where user_code=#{userCode}) | |||
| </select> | |||
| </mapper> | |||
| @@ -79,5 +79,14 @@ | |||
| GROUP BY date | |||
| </select> | |||
| <select id="findTodayList" parameterType="String" resultType="com.lecoo.kjg.web.sys.entity.CheckRecords"> | |||
| SELECT cr.* FROM an_check_records cr | |||
| <where> | |||
| <if test="id != null and id != ''">AND cr.user_id = #{id}</if> | |||
| AND check_time <![CDATA[>=]]> current_date | |||
| </where> | |||
| order by check_time desc limit 2 | |||
| </select> | |||
| </mapper> | |||
| @@ -10,6 +10,12 @@ | |||
| </select> | |||
| <select id="findByRelationId" parameterType="String" resultType="DeviceExt"> | |||
| SELECT * FROM tf_project_device_ext WHERE relation_id = #{devId} limit 1; | |||
| </select> | |||
| <delete id="deleteByDevId" parameterType="String"> | |||
| delete from tf_project_device_ext where device_id = #{devId} | |||
| </delete> | |||
| @@ -38,6 +38,10 @@ | |||
| select * from tf_project_emp e where e.office_code in (select s.ctrl_data from tf_sys_user_data_scope s where s.user_code = #{userCode} and s.ctrl_type='Office'); | |||
| </select> | |||
| <select id="findByName" parameterType="java.lang.String" resultType="com.lecoo.kjg.web.sys.entity.Emp"> | |||
| select * from tf_project_emp e where e.office_code = #{officeCode} AND e.real_name = #{name}; | |||
| </select> | |||
| <select id="findEmployeeCountByOfficeCode" parameterType="String" resultType="java.lang.Long"> | |||
| SELECT count(id) FROM tf_project_emp WHERE office_code = #{officeCode} AND status in ("0", "4", "10", "11") | |||
| </select> | |||
| @@ -91,4 +95,7 @@ | |||
| where office_code in (SELECT DISTINCT office_code FROM tf_sys_office o where parent_codes like concat(#{officeCode}, ',%') or parent_codes like concat('%,', #{officeCode}, ',%') or office_code = #{officeCode}) | |||
| </delete> | |||
| <select id="findByName2" parameterType="java.lang.String" resultType="com.lecoo.kjg.web.sys.entity.Emp"> | |||
| select * from tf_project_emp e where e.real_name like concat('%', #{name}, '%') or e.nick_name like concat('%', #{name}, '%'); | |||
| </select> | |||
| </mapper> | |||
| @@ -22,5 +22,15 @@ | |||
| </delete> | |||
| <select id="getOfficeListByUserCode" parameterType="String" resultType="com.jeesite.modules.sys.entity.Office"> | |||
| SELECT * FROM tf_sys_office o join tf_sys_user e on (o.office_code=e.corp_code or o.parent_codes like concat('%,',e.corp_code,',%')) and e.user_code=#{userCode}; | |||
| </select> | |||
| <select id="getOfficeListByOffice" parameterType="String" resultType="com.jeesite.modules.sys.entity.Office"> | |||
| SELECT * FROM tf_sys_office o where o.office_code=#{officeCode} or o.parent_codes like concat('%,',#{officeCode},',%'); | |||
| </select> | |||
| </mapper> | |||
| @@ -23,4 +23,12 @@ | |||
| </select> | |||
| <select id="findAccessControlByOfficeCodes" parameterType="Object" resultType="com.lecoo.kjg.web.sys.entity.OfficeAccessControl"> | |||
| SELECT * FROM tf_project_office_access_control WHERE office_id in | |||
| <foreach item="item" collection="officeCodes" index="index" open="(" separator="," close=")"> | |||
| #{item} | |||
| </foreach> | |||
| </select> | |||
| </mapper> | |||
| @@ -55,4 +55,8 @@ | |||
| update tf_sys_user set corp_code = #{corpCode}, corp_name = #{corpName} where user_code = #{userCode} | |||
| </update> | |||
| <update id="updateUserCode" parameterType="String" flushCache="true" > | |||
| update tf_sys_user set user_code = #{newCode}, login_code = #{newCode} where user_code = #{userCode} | |||
| </update> | |||
| </mapper> | |||
| @@ -138,6 +138,35 @@ | |||
| </select> | |||
| <select id="findByName" parameterType="String" resultMap="selectMap2"> | |||
| SELECT avr.id, avr.access_code,avr.record_status, avr.visit_date, car_plate, has_car, fee_type,emp_code, visit_time, visit_time_common, visitor_id,company_name, company_code, av.name visitor_name,av.phone visitor_phone, o.office_name, num, o.address, avr.duration FROM an_visit_records avr join an_visitors av on av.id=avr.visitor_id join tf_sys_office o on o.office_code=avr.company_code | |||
| <where> | |||
| <!-- AND visit_date <![CDATA[>=]]> CURRENT_DATE --> | |||
| <if test="name != null" > | |||
| AND visitor_id in (select a.* from (select id from an_visitors v where v.name = #{name} order by v.created_at desc limit 1 )a) | |||
| </if> | |||
| </where> | |||
| order by avr.created_at desc | |||
| limit 1; | |||
| </select> | |||
| <delete id="updByName" parameterType="String"> | |||
| DELETE FROM an_visitors where id = (select a.* from (select id from an_visitors v where v.name = #{name} order by v.created_at desc limit 1) a) | |||
| </delete> | |||
| <select id="findByEmp" parameterType="String" resultMap="selectMap2"> | |||
| SELECT avr.id, avr.access_code,avr.record_status, avr.visit_date, car_plate, has_car, fee_type,emp_code, visit_time, visit_time_common, visitor_id,company_name, company_code, av.name visitor_name,av.phone visitor_phone, o.office_name, num, o.address, avr.duration FROM an_visit_records avr join an_visitors av on av.id=avr.visitor_id join tf_sys_office o on o.office_code=avr.company_code | |||
| <where> | |||
| AND emp_code = #{empCode} | |||
| </where> | |||
| order by avr.created_at desc | |||
| </select> | |||
| <select id="findListToday" parameterType="Integer" resultMap="selectMap2"> | |||
| @@ -1,9 +1,9 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.lecoo.kjg.web.sys.dao.MuseumDao"> | |||
| <mapper namespace="com.lecoo.kjg.web.meeting.dao.MeetingRoomDao"> | |||
| <!-- 查询数据 | |||
| <select id="findList" resultType="Museum"> | |||
| <select id="findList" resultType="MeetingRoom"> | |||
| SELECT ${sqlMap.column.toSql()} | |||
| FROM ${sqlMap.table.toSql()} | |||
| <where> | |||
| @@ -0,0 +1,73 @@ | |||
| <?xml version="1.0" encoding="UTF-8" ?> | |||
| <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||
| <mapper namespace="com.lecoo.kjg.web.meeting.dao.MeetingRoomOrderDao"> | |||
| <!-- 查询数据 | |||
| <select id="findList" resultType="MeetingRoomOrder"> | |||
| SELECT ${sqlMap.column.toSql()} | |||
| FROM ${sqlMap.table.toSql()} | |||
| <where> | |||
| ${sqlMap.where.toSql()} | |||
| </where> | |||
| ORDER BY ${sqlMap.order.toSql()} | |||
| </select> --> | |||
| <select id="queryByOrder" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order WHERE room_id=#{roomId} AND order_date = #{orderDate} AND ((order_time <![CDATA[<=]]> #{orderTime} AND end_time<![CDATA[>]]> #{orderTime}) or (order_time <![CDATA[<]]> #{endTime} AND end_time <![CDATA[>=]]> #{endTime})) | |||
| </select> | |||
| <select id="findListByDate" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order WHERE order_date = #{orderDate} AND room_id = #{roomId} | |||
| </select> | |||
| <select id="findListByDateStr" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order WHERE order_date = #{orderDate} AND room_id in (select id from meeting_room where office_code = #{officeCode}) | |||
| </select> | |||
| <select id="findListByDateAndRoom" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order WHERE order_date = #{orderDate} AND room_id = #{roomId} | |||
| </select> | |||
| <select id="findListByDateAndEmp" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order WHERE order_by = #{empId} AND order_date <![CDATA[>=]]> current_date | |||
| </select> | |||
| <select id="findListByPerson" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order where order_date <![CDATA[>=]]> CURRENT_DATE AND order_by = #{orderBy} | |||
| </select> | |||
| <select id="findListByEmps" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order where order_date <![CDATA[>=]]> #{startDate} AND order_date <![CDATA[<]]> #{endDate} AND order_by in | |||
| <foreach item="item" collection="empIds" index="index" open="(" separator="," close=")"> | |||
| #{item} | |||
| </foreach> | |||
| </select> | |||
| <select id="findListByEmp" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order where order_date <![CDATA[>=]]> #{startDate} AND order_date <![CDATA[<]]> #{endDate} AND order_by = #{empId} | |||
| </select> | |||
| <select id="findListByEmpId" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order where order_date <![CDATA[>=]]> CURRENT_DATE AND order_by = #{empId} | |||
| </select> | |||
| <select id="findLastByEmpId" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order where order_by = #{empId} order By id desc LIMIT 1 | |||
| </select> | |||
| <select id="findListTodayHour" resultType="MeetingRoomOrder"> | |||
| select * from meeting_room_order where order_date = CURRENT_DATE AND DATE_FORMAT(CURRENT_TIME,"%H:%i:00") = date_add(order_time,interval -15 minute) | |||
| </select> | |||
| <select id="ableOrder" parameterType="Object" resultType="MeetingRoomOrder"> | |||
| SELECT * FROM meeting_room_order | |||
| <where> | |||
| <if test="roomId != null and roomId != ''">AND room_id=#{roomId} </if> | |||
| <if test="orderDate != null and orderDate != ''">AND order_date=#{orderDate} </if> | |||
| <if test="orderTime != null and orderTime != ''">AND ((order_time <![CDATA[<=]]> #{orderTime} AND end_time<![CDATA[>]]> #{orderTime}) or (order_time <![CDATA[<]]> #{endTime} AND end_time <![CDATA[>=]]> #{endTime})) </if> | |||
| </where> | |||
| order by room_id, order_time | |||
| </select> | |||
| </mapper> | |||
| @@ -1,8 +1,8 @@ | |||
| @font-face { | |||
| font-family: "iconfont"; /* Project id 3294465 */ | |||
| src: url('../font/iconfont2.woff2?t=1656085665505') format('woff2'), | |||
| url('../font/iconfont2.woff?t=1656085665505') format('woff'), | |||
| url('../font/iconfont2.ttf?t=1656085665505') format('truetype'); | |||
| src: url('../font/iconfont2.woff2?t=1669647660511') format('woff2'), | |||
| url('../font/iconfont2.woff?t=1669647660511') format('woff'), | |||
| url('../font/iconfont2.ttf?t=1669647660511') format('truetype'); | |||
| } | |||
| .iconfont { | |||
| @@ -13,6 +13,15 @@ | |||
| -moz-osx-font-smoothing: grayscale; | |||
| } | |||
| .icon-huiyishi:before { | |||
| content: "\e6dc"; | |||
| } | |||
| .icon-huiyishi1:before { | |||
| content: "\e690"; | |||
| } | |||
| .icon-vcard-o:before { | |||
| content: "\e731"; | |||
| } | |||
| @@ -512,7 +512,7 @@ body { | |||
| } | |||
| /* 表格搜索框样式 */ | |||
| .table-search .form-group .control-inline{ | |||
| width: 204px !important; | |||
| width: 204px; | |||
| } | |||
| /*layui下拉框样式*/ | |||
| .layui-form-select dl dd.layui-this{ | |||
| @@ -1 +1 @@ | |||
| .login-page{background:#e3e7ec}.login-page .login-box{width:auto}.login-page .login-logo a{color:#666}.login-page .login-logo small{font-size:16px}.login-page .login-box-body{width:360px;margin:auto;padding:28px;background:#fff;box-shadow:0 2px 6px #999;border-radius:5px}.login-page .login-box-body .form-control-feedback{cursor:pointer;pointer-events:auto}.login-page .form-group{margin-top:5px;margin-bottom:23px}.login-page .has-feedback .form-control{height:34px;padding:4px 10px}.login-page .input-group-btn .btn{height:34px}.login-page .btn{padding:5px 10px 4px 10px;font-size:15px}.login-page .select2-container .select2-selection--single{padding:6px 12px;height:34px}.login-page .select2-container--default.select2-container--focus .select2-selection--single{border-color:#3c8dbc}.login-page .select2-container .select2-selection--single .select2-selection__rendered{margin-top:-4px}.login-page .select2-container .select2-selection--single .select2-selection__arrow{top:1px}.login-page .select2-search--dropdown .select2-search__field{padding:4px}.login-page .select2-results__option{padding:6px 12px}.login-page .login-copyright{text-align:center;margin-top:20px}.login-page .login-copyright,.login-page .login-copyright a{color:#666} | |||
| .login-page{background:#e3e7ec}.login-page .login-box{width:auto}.login-page .login-logo a{color:#666}.login-page .login-logo small{font-size:16px}.login-page .login-box-body{width:360px;margin:auto;padding:28px;background:#fff;box-shadow:0 2px 6px #999;border-radius:5px}.login-page .login-box-body .form-control-feedback{cursor:pointer;pointer-events:auto}.login-page .form-group{margin-top:5px;margin-bottom:23px}.login-page .has-feedback .form-control{height:34px;padding:4px 10px}.login-page .input-group-btn .btn{height:34px}.login-page .btn{padding:0px 10px 0px 10px;font-size:15px}.login-page .select2-container .select2-selection--single{padding:6px 12px;height:34px}.login-page .select2-container--default.select2-container--focus .select2-selection--single{border-color:#3c8dbc}.login-page .select2-container .select2-selection--single .select2-selection__rendered{margin-top:-4px}.login-page .select2-container .select2-selection--single .select2-selection__arrow{top:1px}.login-page .select2-search--dropdown .select2-search__field{padding:4px}.login-page .select2-results__option{padding:6px 12px}.login-page .login-copyright{text-align:center;margin-top:20px}.login-page .login-copyright,.login-page .login-copyright a{color:#666} | |||