Compare commits

...

6 Commits

Author SHA1 Message Date
  yk 1a75d64f3c fixed 新版本人脸算法 1 year ago
  yk 9e0030d1fb fix digiman 2 years ago
  yk ecf2536f88 fix 2 years ago
  yk fd65913a81 fixed jasypt #问题 2 years ago
  yk 9bbbb73453 fixed 20230302 2 years ago
  yk b5bdc34a84 add gitignore 3 years ago
100 changed files with 4277 additions and 709 deletions
Split View
  1. +4
    -4
      .gitignore
  2. +1
    -1
      jeesite/jeesite-framework/4.1.1-SNAPSHOT/jeesite-framework-4.1.3-SNAPSHOT/views/modules/sys/langForm.html
  3. +7
    -9
      pom.xml
  4. +1
    -0
      src/main/java/com/lecoo/kjg/web/Application.java
  5. +47
    -0
      src/main/java/com/lecoo/kjg/web/config/SendMmsProperties.java
  6. +2
    -0
      src/main/java/com/lecoo/kjg/web/config/WxMpProperties.java
  7. +2
    -1
      src/main/java/com/lecoo/kjg/web/controller/AuditController.java
  8. +4
    -3
      src/main/java/com/lecoo/kjg/web/controller/VisitApiController.java
  9. +3
    -9
      src/main/java/com/lecoo/kjg/web/controller/VisitController.java
  10. +23
    -31
      src/main/java/com/lecoo/kjg/web/controller/WxFrontController.java
  11. +400
    -0
      src/main/java/com/lecoo/kjg/web/meeting/api/MeetingApiController.java
  12. +88
    -0
      src/main/java/com/lecoo/kjg/web/meeting/controller/MeetingController.java
  13. +141
    -0
      src/main/java/com/lecoo/kjg/web/meeting/controller/MeetingFrontController.java
  14. +52
    -0
      src/main/java/com/lecoo/kjg/web/meeting/controller/MeetingRoomController.java
  15. +18
    -0
      src/main/java/com/lecoo/kjg/web/meeting/dao/MeetingRoomDao.java
  16. +34
    -0
      src/main/java/com/lecoo/kjg/web/meeting/dao/MeetingRoomOrderDao.java
  17. +97
    -0
      src/main/java/com/lecoo/kjg/web/meeting/entity/MeetingRoom.java
  18. +234
    -0
      src/main/java/com/lecoo/kjg/web/meeting/entity/MeetingRoomOrder.java
  19. +295
    -0
      src/main/java/com/lecoo/kjg/web/meeting/service/MeetingRoomOrderService.java
  20. +76
    -0
      src/main/java/com/lecoo/kjg/web/meeting/service/MeetingRoomService.java
  21. +26
    -0
      src/main/java/com/lecoo/kjg/web/sys/bean/BodyReaderRequestWrapper.java
  22. +0
    -2
      src/main/java/com/lecoo/kjg/web/sys/bean/req/SavePassReq.java
  23. +33
    -0
      src/main/java/com/lecoo/kjg/web/sys/constant/ResponseCode.java
  24. +3
    -0
      src/main/java/com/lecoo/kjg/web/sys/dao/AccessControlGroupDao.java
  25. +13
    -0
      src/main/java/com/lecoo/kjg/web/sys/dao/AdditionPersonDao.java
  26. +2
    -0
      src/main/java/com/lecoo/kjg/web/sys/dao/CheckRecordsDao.java
  27. +2
    -0
      src/main/java/com/lecoo/kjg/web/sys/dao/DeviceExtDao.java
  28. +1
    -1
      src/main/java/com/lecoo/kjg/web/sys/dao/DeviceExtGateDao.java
  29. +4
    -0
      src/main/java/com/lecoo/kjg/web/sys/dao/EmpDao.java
  30. +3
    -0
      src/main/java/com/lecoo/kjg/web/sys/dao/MyOfficeDao.java
  31. +3
    -0
      src/main/java/com/lecoo/kjg/web/sys/dao/OfficeAccessControlDao.java
  32. +1
    -0
      src/main/java/com/lecoo/kjg/web/sys/dao/UserExtraDao.java
  33. +5
    -0
      src/main/java/com/lecoo/kjg/web/sys/dao/VisitRecordsDao.java
  34. +61
    -0
      src/main/java/com/lecoo/kjg/web/sys/entity/AdditionPerson.java
  35. +9
    -0
      src/main/java/com/lecoo/kjg/web/sys/entity/AuthMapping.java
  36. +10
    -0
      src/main/java/com/lecoo/kjg/web/sys/entity/DeviceExt.java
  37. +2
    -0
      src/main/java/com/lecoo/kjg/web/sys/entity/Emp.java
  38. +1
    -0
      src/main/java/com/lecoo/kjg/web/sys/entity/EmpAttendance.java
  39. +68
    -0
      src/main/java/com/lecoo/kjg/web/sys/scheduler/MeetingScheduler.java
  40. +4
    -1
      src/main/java/com/lecoo/kjg/web/sys/service/AccessControlGroupService.java
  41. +2
    -0
      src/main/java/com/lecoo/kjg/web/sys/service/AccessControlService.java
  42. +8
    -0
      src/main/java/com/lecoo/kjg/web/sys/service/support/AccessControlGroupServiceSupport.java
  43. +27
    -8
      src/main/java/com/lecoo/kjg/web/sys/service/support/AccessControlServiceSupport.java
  44. +3
    -2
      src/main/java/com/lecoo/kjg/web/sys/service/support/AdminServiceSupport.java
  45. +1
    -29
      src/main/java/com/lecoo/kjg/web/sys/service/support/AuthMappingItemProcessorService.java
  46. +1
    -1
      src/main/java/com/lecoo/kjg/web/sys/service/support/DeviceServiceSupport.java
  47. +151
    -67
      src/main/java/com/lecoo/kjg/web/sys/service/support/EmpServiceSupport.java
  48. +47
    -247
      src/main/java/com/lecoo/kjg/web/sys/service/support/FaceServiceSupport.java
  49. +1
    -1
      src/main/java/com/lecoo/kjg/web/sys/service/support/ShiftServiceSupport.java
  50. +7
    -0
      src/main/java/com/lecoo/kjg/web/sys/utils/ApiSignUtil.java
  51. +6
    -0
      src/main/java/com/lecoo/kjg/web/sys/utils/BusinessUtils.java
  52. +31
    -2
      src/main/java/com/lecoo/kjg/web/sys/utils/ImageUtil.java
  53. +0
    -4
      src/main/java/com/lecoo/kjg/web/sys/utils/JasyptUtil.java
  54. +22
    -9
      src/main/java/com/lecoo/kjg/web/sys/utils/OfficeEmpUtils.java
  55. +106
    -3
      src/main/java/com/lecoo/kjg/web/sys/utils/SendUtil.java
  56. +37
    -0
      src/main/java/com/lecoo/kjg/web/sys/utils/StringUtils.java
  57. +4
    -3
      src/main/java/com/lecoo/kjg/web/sys/web/AccessControlController.java
  58. +17
    -7
      src/main/java/com/lecoo/kjg/web/sys/web/AccessControlGroupController.java
  59. +108
    -14
      src/main/java/com/lecoo/kjg/web/sys/web/Account2Controller.java
  60. +81
    -5
      src/main/java/com/lecoo/kjg/web/sys/web/AdminController.java
  61. +1
    -1
      src/main/java/com/lecoo/kjg/web/sys/web/AdminLogController.java
  62. +77
    -4
      src/main/java/com/lecoo/kjg/web/sys/web/ApiController.java
  63. +54
    -0
      src/main/java/com/lecoo/kjg/web/sys/web/AttendanceController.java
  64. +31
    -1
      src/main/java/com/lecoo/kjg/web/sys/web/CheckRecorderController.java
  65. +3
    -2
      src/main/java/com/lecoo/kjg/web/sys/web/DeviceController.java
  66. +1
    -1
      src/main/java/com/lecoo/kjg/web/sys/web/DeviceExtGateEventController.java
  67. +1
    -1
      src/main/java/com/lecoo/kjg/web/sys/web/DeviceLogController.java
  68. +39
    -29
      src/main/java/com/lecoo/kjg/web/sys/web/EmployeeController.java
  69. +2
    -2
      src/main/java/com/lecoo/kjg/web/sys/web/ExtendsPropertyController.java
  70. +5
    -5
      src/main/java/com/lecoo/kjg/web/sys/web/FaceController.java
  71. +3
    -3
      src/main/java/com/lecoo/kjg/web/sys/web/IndexController.java
  72. +2
    -2
      src/main/java/com/lecoo/kjg/web/sys/web/MonthlyAttendanceController.java
  73. +36
    -14
      src/main/java/com/lecoo/kjg/web/sys/web/MyOfficeController.java
  74. +1
    -1
      src/main/java/com/lecoo/kjg/web/sys/web/PasswordLogController.java
  75. +0
    -1
      src/main/java/com/lecoo/kjg/web/sys/web/TicketFrontController.java
  76. +0
    -2
      src/main/java/com/lecoo/kjg/web/sys/web/VisitSysController.java
  77. +952
    -131
      src/main/java/com/lecoo/kjg/web/sys/web/api/CommonApiController.java
  78. +55
    -0
      src/main/java/com/lecoo/kjg/web/sys/web/api/DeviceApiController.java
  79. +17
    -0
      src/main/java/com/lecoo/kjg/web/sys/web/api/EmpApiController.java
  80. +4
    -4
      src/main/java/com/lecoo/kjg/web/sys/web/api/FaceApiController.java
  81. +332
    -0
      src/main/java/com/lecoo/kjg/web/utils/OkHttpUtil.java
  82. +17
    -14
      src/main/resources/config/application-dev.yml
  83. +38
    -20
      src/main/resources/config/application.yml
  84. +4
    -0
      src/main/resources/mappings/modules/sys/AccessControlGroupDao.xml
  85. +9
    -0
      src/main/resources/mappings/modules/sys/ChecksRecordsDao.xml
  86. +6
    -0
      src/main/resources/mappings/modules/sys/DeviceExtDao.xml
  87. +7
    -0
      src/main/resources/mappings/modules/sys/EmpDao.xml
  88. +10
    -0
      src/main/resources/mappings/modules/sys/MyOfficeDao.xml
  89. +8
    -0
      src/main/resources/mappings/modules/sys/OfficeAccessControlDao.xml
  90. +4
    -0
      src/main/resources/mappings/modules/sys/UserExtraDao.xml
  91. +29
    -0
      src/main/resources/mappings/modules/sys/VisitRecordsDao.xml
  92. +2
    -2
      src/main/resources/mappings/web/meeting/MeetingRoomDao.xml
  93. +73
    -0
      src/main/resources/mappings/web/meeting/MeetingRoomOrderDao.xml
  94. +12
    -3
      src/main/resources/static/css/iconfont3.css
  95. +1
    -1
      src/main/resources/static/css/thinkface.css
  96. BIN
      src/main/resources/static/font/iconfont2.ttf
  97. BIN
      src/main/resources/static/font/iconfont2.woff
  98. BIN
      src/main/resources/static/font/iconfont2.woff2
  99. BIN
      src/main/resources/static/images/ff640x.jpeg
  100. +1
    -1
      src/main/resources/static/modules/sys/sysLogin.css

+ 4
- 4
.gitignore View File

@@ -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


+ 1
- 1
jeesite/jeesite-framework/4.1.1-SNAPSHOT/jeesite-framework-4.1.3-SNAPSHOT/views/modules/sys/langForm.html View File

@@ -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>


+ 7
- 9
pom.xml View File

@@ -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>



+ 1
- 0
src/main/java/com/lecoo/kjg/web/Application.java View File

@@ -151,6 +151,7 @@ public class Application extends SpringBootServletInitializer implements Command
@Override
public void run(String... args) throws Exception {
deviceServiceSupport.putRedisData();
}
}

+ 47
- 0
src/main/java/com/lecoo/kjg/web/config/SendMmsProperties.java View File

@@ -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;
}


+ 2
- 0
src/main/java/com/lecoo/kjg/web/config/WxMpProperties.java View File

@@ -88,6 +88,8 @@ public class WxMpProperties {
private String regAuditTemplateId;
private String url;
private String meetingTemplateId;
}
@Override


+ 2
- 1
src/main/java/com/lecoo/kjg/web/controller/AuditController.java View File

@@ -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 {


+ 4
- 3
src/main/java/com/lecoo/kjg/web/controller/VisitApiController.java View File

@@ -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");


+ 3
- 9
src/main/java/com/lecoo/kjg/web/controller/VisitController.java View File

@@ -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())) {


+ 23
- 31
src/main/java/com/lecoo/kjg/web/controller/WxFrontController.java View File

@@ -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();
}


+ 400
- 0
src/main/java/com/lecoo/kjg/web/meeting/api/MeetingApiController.java View File

@@ -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;
}
}

+ 88
- 0
src/main/java/com/lecoo/kjg/web/meeting/controller/MeetingController.java View File

@@ -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";
}
}

+ 141
- 0
src/main/java/com/lecoo/kjg/web/meeting/controller/MeetingFrontController.java View File

@@ -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";
}
}

+ 52
- 0
src/main/java/com/lecoo/kjg/web/meeting/controller/MeetingRoomController.java View File

@@ -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";
}
}

+ 18
- 0
src/main/java/com/lecoo/kjg/web/meeting/dao/MeetingRoomDao.java View File

@@ -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> {
}

+ 34
- 0
src/main/java/com/lecoo/kjg/web/meeting/dao/MeetingRoomOrderDao.java View File

@@ -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);

}

+ 97
- 0
src/main/java/com/lecoo/kjg/web/meeting/entity/MeetingRoom.java View File

@@ -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;
}
}

+ 234
- 0
src/main/java/com/lecoo/kjg/web/meeting/entity/MeetingRoomOrder.java View File

@@ -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;
}
}

+ 295
- 0
src/main/java/com/lecoo/kjg/web/meeting/service/MeetingRoomOrderService.java View File

@@ -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;
}
}

+ 76
- 0
src/main/java/com/lecoo/kjg/web/meeting/service/MeetingRoomService.java View File

@@ -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);
}
}

+ 26
- 0
src/main/java/com/lecoo/kjg/web/sys/bean/BodyReaderRequestWrapper.java View File

@@ -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);
}
}

+ 0
- 2
src/main/java/com/lecoo/kjg/web/sys/bean/req/SavePassReq.java View File

@@ -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 {


+ 33
- 0
src/main/java/com/lecoo/kjg/web/sys/constant/ResponseCode.java View File

@@ -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;
}

+ 3
- 0
src/main/java/com/lecoo/kjg/web/sys/dao/AccessControlGroupDao.java View File

@@ -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);
}

+ 13
- 0
src/main/java/com/lecoo/kjg/web/sys/dao/AdditionPersonDao.java View File

@@ -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> {
}

+ 2
- 0
src/main/java/com/lecoo/kjg/web/sys/dao/CheckRecordsDao.java View File

@@ -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);
}

+ 2
- 0
src/main/java/com/lecoo/kjg/web/sys/dao/DeviceExtDao.java View File

@@ -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);
}

+ 1
- 1
src/main/java/com/lecoo/kjg/web/sys/dao/DeviceExtGateDao.java View File

@@ -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);
}

+ 4
- 0
src/main/java/com/lecoo/kjg/web/sys/dao/EmpDao.java View File

@@ -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);
}

+ 3
- 0
src/main/java/com/lecoo/kjg/web/sys/dao/MyOfficeDao.java View File

@@ -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);
}

+ 3
- 0
src/main/java/com/lecoo/kjg/web/sys/dao/OfficeAccessControlDao.java View File

@@ -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);
}

+ 1
- 0
src/main/java/com/lecoo/kjg/web/sys/dao/UserExtraDao.java View File

@@ -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);
}

+ 5
- 0
src/main/java/com/lecoo/kjg/web/sys/dao/VisitRecordsDao.java View File

@@ -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);


+ 61
- 0
src/main/java/com/lecoo/kjg/web/sys/entity/AdditionPerson.java View File

@@ -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;
}
}
}

+ 9
- 0
src/main/java/com/lecoo/kjg/web/sys/entity/AuthMapping.java View File

@@ -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";
}
}
}

+ 10
- 0
src/main/java/com/lecoo/kjg/web/sys/entity/DeviceExt.java View File

@@ -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;


+ 2
- 0
src/main/java/com/lecoo/kjg/web/sys/entity/Emp.java View File

@@ -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;
}
}

+ 1
- 0
src/main/java/com/lecoo/kjg/web/sys/entity/EmpAttendance.java View File

@@ -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)


+ 68
- 0
src/main/java/com/lecoo/kjg/web/sys/scheduler/MeetingScheduler.java View File

@@ -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");
}
}

+ 4
- 1
src/main/java/com/lecoo/kjg/web/sys/service/AccessControlGroupService.java View File

@@ -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);
}

+ 2
- 0
src/main/java/com/lecoo/kjg/web/sys/service/AccessControlService.java View File

@@ -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);
}

+ 8
- 0
src/main/java/com/lecoo/kjg/web/sys/service/support/AccessControlGroupServiceSupport.java View File

@@ -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());


+ 27
- 8
src/main/java/com/lecoo/kjg/web/sys/service/support/AccessControlServiceSupport.java View File

@@ -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;
}
}

+ 3
- 2
src/main/java/com/lecoo/kjg/web/sys/service/support/AdminServiceSupport.java View File

@@ -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);


+ 1
- 29
src/main/java/com/lecoo/kjg/web/sys/service/support/AuthMappingItemProcessorService.java View File

@@ -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;


+ 1
- 1
src/main/java/com/lecoo/kjg/web/sys/service/support/DeviceServiceSupport.java View File

@@ -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");


+ 151
- 67
src/main/java/com/lecoo/kjg/web/sys/service/support/EmpServiceSupport.java View File

@@ -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);


+ 47
- 247
src/main/java/com/lecoo/kjg/web/sys/service/support/FaceServiceSupport.java View File

@@ -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;
}


+ 1
- 1
src/main/java/com/lecoo/kjg/web/sys/service/support/ShiftServiceSupport.java View File

@@ -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());


+ 7
- 0
src/main/java/com/lecoo/kjg/web/sys/utils/ApiSignUtil.java View File

@@ -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);


+ 6
- 0
src/main/java/com/lecoo/kjg/web/sys/utils/BusinessUtils.java View File

@@ -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 {
}
}

+ 31
- 2
src/main/java/com/lecoo/kjg/web/sys/utils/ImageUtil.java View File

@@ -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());
}
}
}

+ 0
- 4
src/main/java/com/lecoo/kjg/web/sys/utils/JasyptUtil.java View File

@@ -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");


+ 22
- 9
src/main/java/com/lecoo/kjg/web/sys/utils/OfficeEmpUtils.java View File

@@ -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


+ 106
- 3
src/main/java/com/lecoo/kjg/web/sys/utils/SendUtil.java View File

@@ -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;
}
}

+ 37
- 0
src/main/java/com/lecoo/kjg/web/sys/utils/StringUtils.java View File

@@ -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);
}

}

+ 4
- 3
src/main/java/com/lecoo/kjg/web/sys/web/AccessControlController.java View File

@@ -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
- 7
src/main/java/com/lecoo/kjg/web/sys/web/AccessControlGroupController.java View File

@@ -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");


+ 108
- 14
src/main/java/com/lecoo/kjg/web/sys/web/Account2Controller.java View File

@@ -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);
}
}
}

+ 81
- 5
src/main/java/com/lecoo/kjg/web/sys/web/AdminController.java View File

@@ -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, "添加管理员成功");
}


+ 1
- 1
src/main/java/com/lecoo/kjg/web/sys/web/AdminLogController.java View File

@@ -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);


+ 77
- 4
src/main/java/com/lecoo/kjg/web/sys/web/ApiController.java View File

@@ -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);
}
}

+ 54
- 0
src/main/java/com/lecoo/kjg/web/sys/web/AttendanceController.java View File

@@ -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);


+ 31
- 1
src/main/java/com/lecoo/kjg/web/sys/web/CheckRecorderController.java View File

@@ -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;


+ 3
- 2
src/main/java/com/lecoo/kjg/web/sys/web/DeviceController.java View File

@@ -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) {


+ 1
- 1
src/main/java/com/lecoo/kjg/web/sys/web/DeviceExtGateEventController.java View File

@@ -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) {


+ 1
- 1
src/main/java/com/lecoo/kjg/web/sys/web/DeviceLogController.java View File

@@ -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);


+ 39
- 29
src/main/java/com/lecoo/kjg/web/sys/web/EmployeeController.java View File

@@ -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);
}


+ 2
- 2
src/main/java/com/lecoo/kjg/web/sys/web/ExtendsPropertyController.java View File

@@ -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");


+ 5
- 5
src/main/java/com/lecoo/kjg/web/sys/web/FaceController.java View File

@@ -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) {


+ 3
- 3
src/main/java/com/lecoo/kjg/web/sys/web/IndexController.java View File

@@ -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();


+ 2
- 2
src/main/java/com/lecoo/kjg/web/sys/web/MonthlyAttendanceController.java View File

@@ -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);


+ 36
- 14
src/main/java/com/lecoo/kjg/web/sys/web/MyOfficeController.java View File

@@ -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();
}
}


+ 1
- 1
src/main/java/com/lecoo/kjg/web/sys/web/PasswordLogController.java View File

@@ -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()]));


+ 0
- 1
src/main/java/com/lecoo/kjg/web/sys/web/TicketFrontController.java View File

@@ -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;


+ 0
- 2
src/main/java/com/lecoo/kjg/web/sys/web/VisitSysController.java View File

@@ -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]!="") {


+ 952
- 131
src/main/java/com/lecoo/kjg/web/sys/web/api/CommonApiController.java
File diff suppressed because it is too large
View File


+ 55
- 0
src/main/java/com/lecoo/kjg/web/sys/web/api/DeviceApiController.java View File

@@ -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);
}
}

+ 17
- 0
src/main/java/com/lecoo/kjg/web/sys/web/api/EmpApiController.java View File

@@ -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);
}
}

+ 4
- 4
src/main/java/com/lecoo/kjg/web/sys/web/api/FaceApiController.java View File

@@ -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();


+ 332
- 0
src/main/java/com/lecoo/kjg/web/utils/OkHttpUtil.java View File

@@ -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();
}
}

+ 17
- 14
src/main/resources/config/application-dev.yml View File

@@ -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

+ 38
- 20
src/main/resources/config/application.yml View File

@@ -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: "]"




+ 4
- 0
src/main/resources/mappings/modules/sys/AccessControlGroupDao.xml View File

@@ -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>

+ 9
- 0
src/main/resources/mappings/modules/sys/ChecksRecordsDao.xml View File

@@ -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>

+ 6
- 0
src/main/resources/mappings/modules/sys/DeviceExtDao.xml View File

@@ -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>


+ 7
- 0
src/main/resources/mappings/modules/sys/EmpDao.xml View File

@@ -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>

+ 10
- 0
src/main/resources/mappings/modules/sys/MyOfficeDao.xml View File

@@ -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>

+ 8
- 0
src/main/resources/mappings/modules/sys/OfficeAccessControlDao.xml View File

@@ -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>

+ 4
- 0
src/main/resources/mappings/modules/sys/UserExtraDao.xml View File

@@ -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>

+ 29
- 0
src/main/resources/mappings/modules/sys/VisitRecordsDao.xml View File

@@ -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">


target/hjkjg-web-2.0.6.RELEASE/WEB-INF/classes/mappings/web/sys/MuseumDao.xml → src/main/resources/mappings/web/meeting/MeetingRoomDao.xml View File

@@ -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>

+ 73
- 0
src/main/resources/mappings/web/meeting/MeetingRoomOrderDao.xml View File

@@ -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>

+ 12
- 3
src/main/resources/static/css/iconfont3.css View File

@@ -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";
}


+ 1
- 1
src/main/resources/static/css/thinkface.css View File

@@ -512,7 +512,7 @@ body {
}
/* 表格搜索框样式 */
.table-search .form-group .control-inline{
width: 204px !important;
width: 204px;
}
/*layui下拉框样式*/
.layui-form-select dl dd.layui-this{


BIN
src/main/resources/static/font/iconfont2.ttf View File


BIN
src/main/resources/static/font/iconfont2.woff View File


BIN
src/main/resources/static/font/iconfont2.woff2 View File


BIN
src/main/resources/static/images/ff640x.jpeg View File

Before After
Width: 800  |  Height: 500  |  Size: 49 KiB

+ 1
- 1
src/main/resources/static/modules/sys/sysLogin.css View File

@@ -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}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save