Commit 3b038f00 authored by 赵啸非's avatar 赵啸非

修改员工导出

parent 2cc98dc2
...@@ -95,7 +95,7 @@ ...@@ -95,7 +95,7 @@
</div> </div>
<div class="mt10"> <div class="mt10">
<el-link :href="baseUrl+item.filePath" target="_blank" type="primary">重新下载</el-link> <el-link :href="item.filePath" target="_blank" type="primary">重新下载</el-link>
</div> </div>
</div> </div>
<div class="times mt10"> <div class="times mt10">
......
...@@ -78,7 +78,7 @@ ...@@ -78,7 +78,7 @@
</el-button> </el-button>
<el-dropdown-menu slot="dropdown"> <el-dropdown-menu slot="dropdown">
<el-dropdown-item> <el-dropdown-item>
<el-button type="text">同步数据</el-button> <el-button type="text" @click="syncPerson">同步数据</el-button>
</el-dropdown-item> </el-dropdown-item>
<el-dropdown-item> <el-dropdown-item>
<el-button type="text" @click="handleImport" <el-button type="text" @click="handleImport"
...@@ -219,6 +219,14 @@ export default { ...@@ -219,6 +219,14 @@ export default {
); );
this.isdialog = true; this.isdialog = true;
}, },
/** 同步 */
syncPerson() {
this.$post("/staff/syncPersons", {}).then((res) => {
if (res.code == 1) {
this.$message.success(res.msg)
}
});
},
/** 导入 */ /** 导入 */
handleImport() { handleImport() {
this.upload.title = "员工导入"; this.upload.title = "员工导入";
......
package com.mortals.xhx.base.login.web; package com.mortals.xhx.base.login.web;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.ap.CookieService; import com.mortals.framework.ap.CookieService;
...@@ -20,8 +21,16 @@ import com.mortals.xhx.base.system.resource.service.ResourceService; ...@@ -20,8 +21,16 @@ import com.mortals.xhx.base.system.resource.service.ResourceService;
import com.mortals.xhx.base.system.user.model.UserEntity; import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.base.system.valid.service.ValidCodeService; import com.mortals.xhx.base.system.valid.service.ValidCodeService;
import com.mortals.xhx.common.code.GoWorkResultEnum;
import com.mortals.xhx.common.code.OffWorkResultEnum;
import com.mortals.xhx.common.key.RedisKey; import com.mortals.xhx.common.key.RedisKey;
import com.mortals.xhx.common.pdu.HomeStatInfo; import com.mortals.xhx.common.pdu.HomeStatInfo;
import com.mortals.xhx.module.attendance.model.AttendanceRecordEntity;
import com.mortals.xhx.module.attendance.model.AttendanceRecordQuery;
import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceQuery;
import com.mortals.xhx.module.attendance.model.AttendanceVacationRecordQuery;
import com.mortals.xhx.module.attendance.service.AttendanceRecordService;
import com.mortals.xhx.module.attendance.service.AttendanceVacationRecordService;
import com.mortals.xhx.module.dept.model.DeptQuery; import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService; import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.staff.model.StaffQuery; import com.mortals.xhx.module.staff.model.StaffQuery;
...@@ -61,6 +70,10 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -61,6 +70,10 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
private ICacheService cacheService; private ICacheService cacheService;
@Autowired @Autowired
private IAuthTokenService authTokenService; private IAuthTokenService authTokenService;
@Autowired
private AttendanceRecordService recordService;
@Autowired
private AttendanceVacationRecordService vacationRecordService;
@Autowired @Autowired
private StaffService staffService; private StaffService staffService;
...@@ -157,13 +170,54 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -157,13 +170,54 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
int totalDeptNum = deptService.count(new DeptQuery(), getContext()); int totalDeptNum = deptService.count(new DeptQuery(), getContext());
homeStatInfo.setTotalDeptNum(totalDeptNum); homeStatInfo.setTotalDeptNum(totalDeptNum);
//todo
homeStatInfo.setAttendRadio(new BigDecimal(98.00)); AttendanceRecordQuery attendanceRecordQuery = new AttendanceRecordQuery();
homeStatInfo.setLevealPersonNum(6); attendanceRecordQuery.setAttendanceDateStart(DateUtil.today());
homeStatInfo.setLatePersonNum(2); attendanceRecordQuery.setAttendanceDateEnd(DateUtil.today());
homeStatInfo.setLeftEarlyPersonNum(1); List<AttendanceRecordEntity> attendanceRecordEntities = recordService.find(attendanceRecordQuery);
homeStatInfo.setMissCardPersonNum(23); //总打卡
homeStatInfo.setAttendPersonNum(426); long total = attendanceRecordEntities.parallelStream().map(item -> item.getStaffId()).distinct().count();
//迟到次数
long beLate = attendanceRecordEntities.parallelStream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream())
.filter(f -> GoWorkResultEnum.迟到.getValue() == f.getGoWorkResult() || OffWorkResultEnum.迟到.getValue() == f.getOffWorkResult())
.count();
//早退次数
long leaveEarly = attendanceRecordEntities.parallelStream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream())
.filter(f -> GoWorkResultEnum.早退.getValue() == f.getGoWorkResult() || OffWorkResultEnum.早退.getValue() == f.getOffWorkResult())
.count();
//缺卡次数
long lackOfCards = attendanceRecordEntities.parallelStream()
.flatMap(item -> item.getAttendanceRecordDetailList().stream())
.filter(f -> GoWorkResultEnum.缺卡.getValue() == f.getGoWorkResult() || OffWorkResultEnum.缺卡.getValue() == f.getOffWorkResult())
.count();
AttendanceVacationRecordQuery vacationRecordQuery = new AttendanceVacationRecordQuery();
vacationRecordQuery.setCreateTimeStart(DateUtil.today());
vacationRecordQuery.setCreateTimeEnd(DateUtil.today());
int levealPersonNum = vacationRecordService.count(vacationRecordQuery, getContext());
//未考勤
long noAtt=lackOfCards;
long att = total - noAtt;
if (att!=0L){
BigDecimal bigDecimal = new BigDecimal(att).divide(new BigDecimal(total)).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_CEILING);
homeStatInfo.setAttendRadio(bigDecimal.toString()+"%");
}else{
homeStatInfo.setAttendRadio("0%");
}
homeStatInfo.setLevealPersonNum(levealPersonNum);
homeStatInfo.setLatePersonNum(beLate);
homeStatInfo.setLeftEarlyPersonNum(leaveEarly);
homeStatInfo.setMissCardPersonNum(lackOfCards);
homeStatInfo.setAttendPersonNum(total);
data.put("homeStat", homeStatInfo); data.put("homeStat", homeStatInfo);
data.put("token", token); data.put("token", token);
...@@ -179,29 +233,6 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi ...@@ -179,29 +233,6 @@ public class LoginController extends BaseCRUDJsonBodyMappingController<UserServi
return ret.toJSONString(); return ret.toJSONString();
} }
private void generateBlackCookie(HttpServletRequest request, HttpServletResponse response, String loginName, Set<String> urls) {
try {
String cacheKey = RedisKey.KEY_MENU_CACHE + loginName;
String securityKey = GlobalSysInfo.getPropertyValue(SysConstains.PROP_COOKIE_SECURITY_KEY);
//应为Cookie会超长,所以改为仅存储key将值放入redis
//CookieService.setCookieForAuth(request, response, securityKey, null);
StringBuilder sb = new StringBuilder();
if (urls != null && urls.size() > 0) {
for (String url : urls) {
int index = url.hashCode() & (Integer.MAX_VALUE - 1);
sb.append(index).append(",");
}
}
String menuUrl = sb.toString();
menuUrl = AESUtil.encrypt(menuUrl, securityKey);
cacheService.set(cacheKey, menuUrl, 604800);
HttpUtil.setCookieValue(request, response, SysConstains.COOKIE_MENU, cacheKey, -1);
} catch (Throwable e) {
}
}
private String generateMenuUrlCode(Set<String> urls) { private String generateMenuUrlCode(Set<String> urls) {
try { try {
......
package com.mortals.xhx.busiz.h5.web; package com.mortals.xhx.busiz.h5.web;
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth; import com.mortals.framework.annotation.UnAuth;
...@@ -23,6 +24,9 @@ import org.springframework.web.bind.annotation.RequestMapping; ...@@ -23,6 +24,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@RestController @RestController
@Slf4j @Slf4j
...@@ -47,6 +51,10 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -47,6 +51,10 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
private StaffService staffService; private StaffService staffService;
@Autowired @Autowired
private PerformRulesCategoryService categoryService; private PerformRulesCategoryService categoryService;
@Autowired
private PerformStaffConfService performStaffConfService;
@Autowired
private PerformStaffConfDetailService performStaffConfDetailService;
/** /**
...@@ -206,7 +214,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -206,7 +214,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
//通过手机号码查询员工属性 //通过手机号码查询员工属性
PerformRulesEntity rule = getRule(req.getRuleCode()); PerformRulesEntity rule = getRule(req.getRuleCode());
StaffEntity staffEntity = getStaff(req.getPhone()); StaffEntity staffEntity = getStaff(req.getPhone());
checkStaffAutoConf(staffEntity, rule);
PerformAttendRecordEntity recordEntity = new PerformAttendRecordEntity(); PerformAttendRecordEntity recordEntity = new PerformAttendRecordEntity();
recordEntity.initAttrValue(); recordEntity.initAttrValue();
recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue()); recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue());
...@@ -242,9 +250,8 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -242,9 +250,8 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
//评价保存 //评价保存
StaffEntity staffEntity = getStaff(req.getPhone()); StaffEntity staffEntity = getStaff(req.getPhone());
PerformRulesEntity rule = getRule(req.getRuleCode()); PerformRulesEntity rule = getRule(req.getRuleCode());
checkStaffAutoConf(staffEntity, rule);
PerformReviewRecordEntity recordEntity = new PerformReviewRecordEntity(); PerformReviewRecordEntity recordEntity = new PerformReviewRecordEntity();
recordEntity.initAttrValue(); recordEntity.initAttrValue();
recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue()); recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue());
BeanUtils.copyProperties(req, recordEntity); BeanUtils.copyProperties(req, recordEntity);
...@@ -272,10 +279,33 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -272,10 +279,33 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
} }
private void checkStaffAutoConf(StaffEntity staffEntity, PerformRulesEntity rule) {
Boolean rulePass = false;
//校验当前员工是否存在自动规则中
List<PerformStaffConfEntity> performStaffConfEntities = performStaffConfService.find(new PerformStaffConfQuery());
for (PerformStaffConfEntity performStaffConfEntity : performStaffConfEntities) {
String staffIds = performStaffConfEntity.getStaffIds();
Set<String> split = StrUtil.split(staffIds, ",").stream().collect(Collectors.toSet());
if (split.contains(staffEntity.getId().toString())) {
//查询当前规则
List<PerformStaffConfDetailEntity> staffConfDetailEntities = performStaffConfDetailService.find(new PerformStaffConfDetailQuery().staffConfId(performStaffConfEntity.getId()));
for (PerformStaffConfDetailEntity staffConfDetailEntity : staffConfDetailEntities) {
if (staffConfDetailEntity.getRuleId() == rule.getId()){
rulePass = true;
break;
}
}
}
if (rulePass) break;
}
if(rulePass) throw new AppException("当前用户与绩效规则未配置自动核查,请在后台配置后再新增!");
}
private boolean complain(ComplainSaveReq req) throws AppException { private boolean complain(ComplainSaveReq req) throws AppException {
//投诉保存 //投诉保存
StaffEntity staffEntity = getStaff(req.getPhone()); StaffEntity staffEntity = getStaff(req.getPhone());
PerformRulesEntity rule = getRule(req.getRuleCode()); PerformRulesEntity rule = getRule(req.getRuleCode());
checkStaffAutoConf(staffEntity, rule);
PerformComplainRecordEntity recordEntity = new PerformComplainRecordEntity(); PerformComplainRecordEntity recordEntity = new PerformComplainRecordEntity();
recordEntity.initAttrValue(); recordEntity.initAttrValue();
recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue()); recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue());
...@@ -307,6 +337,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -307,6 +337,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
//办件保存 //办件保存
StaffEntity staffEntity = getStaff(req.getPhone()); StaffEntity staffEntity = getStaff(req.getPhone());
PerformRulesEntity rule = getRule(req.getRuleCode()); PerformRulesEntity rule = getRule(req.getRuleCode());
checkStaffAutoConf(staffEntity, rule);
PerformGoworkRecordEntity recordEntity = new PerformGoworkRecordEntity(); PerformGoworkRecordEntity recordEntity = new PerformGoworkRecordEntity();
recordEntity.initAttrValue(); recordEntity.initAttrValue();
recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue()); recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue());
...@@ -339,7 +370,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -339,7 +370,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
//效能保存 //效能保存
StaffEntity staffEntity = getStaff(req.getPhone()); StaffEntity staffEntity = getStaff(req.getPhone());
PerformRulesEntity rule = getRule(req.getRuleCode()); PerformRulesEntity rule = getRule(req.getRuleCode());
checkStaffAutoConf(staffEntity, rule);
PerformEffectRecordEntity recordEntity = new PerformEffectRecordEntity(); PerformEffectRecordEntity recordEntity = new PerformEffectRecordEntity();
recordEntity.initAttrValue(); recordEntity.initAttrValue();
recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue()); recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue());
...@@ -372,6 +403,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq> ...@@ -372,6 +403,7 @@ public class ApiWebPerformController extends AbstractBaseController<PerformReq>
//其它保存 //其它保存
StaffEntity staffEntity = getStaff(req.getPhone()); StaffEntity staffEntity = getStaff(req.getPhone());
PerformRulesEntity rule = getRule(req.getRuleCode()); PerformRulesEntity rule = getRule(req.getRuleCode());
checkStaffAutoConf(staffEntity, rule);
PerformOtherRecordEntity recordEntity = new PerformOtherRecordEntity(); PerformOtherRecordEntity recordEntity = new PerformOtherRecordEntity();
recordEntity.initAttrValue(); recordEntity.initAttrValue();
recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue()); recordEntity.setSubMethod(SubMethodEnum.系统自动.getValue());
......
...@@ -16,6 +16,11 @@ import com.mortals.xhx.busiz.h5.rsp.PerformDetailInfo; ...@@ -16,6 +16,11 @@ import com.mortals.xhx.busiz.h5.rsp.PerformDetailInfo;
import com.mortals.xhx.busiz.h5.rsp.PerformInfo; import com.mortals.xhx.busiz.h5.rsp.PerformInfo;
import com.mortals.xhx.common.code.*; import com.mortals.xhx.common.code.*;
import com.mortals.xhx.common.utils.BeanUtil; import com.mortals.xhx.common.utils.BeanUtil;
import com.mortals.xhx.module.attendance.model.*;
import com.mortals.xhx.module.attendance.service.AttendanceClassDetailService;
import com.mortals.xhx.module.attendance.service.AttendanceClassService;
import com.mortals.xhx.module.attendance.service.AttendanceGroupFixedworkService;
import com.mortals.xhx.module.attendance.service.AttendanceGroupService;
import com.mortals.xhx.module.check.dao.CheckAllRecordDao; import com.mortals.xhx.module.check.dao.CheckAllRecordDao;
import com.mortals.xhx.module.check.model.*; import com.mortals.xhx.module.check.model.*;
import com.mortals.xhx.module.check.model.vo.CheckAllRecordVo; import com.mortals.xhx.module.check.model.vo.CheckAllRecordVo;
...@@ -68,11 +73,8 @@ public class InspectApiController extends AbstractBaseController<PerformReq> { ...@@ -68,11 +73,8 @@ public class InspectApiController extends AbstractBaseController<PerformReq> {
private PerformRulesService rulesService; private PerformRulesService rulesService;
@Autowired @Autowired
private StaffService staffService; private StaffService staffService;
@Autowired @Autowired
private CheckAllRecordService checkAllRecordService; private CheckAllRecordService checkAllRecordService;
@Autowired @Autowired
private CheckAttendRecordService checkAttendRecordService; private CheckAttendRecordService checkAttendRecordService;
@Autowired @Autowired
...@@ -85,10 +87,16 @@ public class InspectApiController extends AbstractBaseController<PerformReq> { ...@@ -85,10 +87,16 @@ public class InspectApiController extends AbstractBaseController<PerformReq> {
private CheckGoworkRecordService checkGoworkRecordService; private CheckGoworkRecordService checkGoworkRecordService;
@Autowired @Autowired
private CheckOtherRecordService checkOtherRecordService; private CheckOtherRecordService checkOtherRecordService;
@Autowired @Autowired
private CheckAllRecordDao checkAllRecordDao; private CheckAllRecordDao checkAllRecordDao;
@Autowired
private AttendanceGroupService groupService;
@Autowired
private AttendanceClassService classService;
@Autowired
private AttendanceClassDetailService classDetailService;
@Autowired
private AttendanceGroupFixedworkService fixedworkService;
protected void init(Map<String, Object> model, Context context) { protected void init(Map<String, Object> model, Context context) {
this.addDict(model, "checkStatus", CheckStatusEnum.getEnumMap()); this.addDict(model, "checkStatus", CheckStatusEnum.getEnumMap());
...@@ -314,6 +322,9 @@ public class InspectApiController extends AbstractBaseController<PerformReq> { ...@@ -314,6 +322,9 @@ public class InspectApiController extends AbstractBaseController<PerformReq> {
recordEntity.setSubMethod(SubMethodEnum.大厅巡查.getValue()); recordEntity.setSubMethod(SubMethodEnum.大厅巡查.getValue());
recordEntity.setErrorTime(new Date()); recordEntity.setErrorTime(new Date());
//根据考勤组查询 上下班
buildGoOffWork(req, context, recordEntity);
recordEntity.setCreateUserId(context.getUser().getId()); recordEntity.setCreateUserId(context.getUser().getId());
recordEntity.setCreateTime(new Date()); recordEntity.setCreateTime(new Date());
...@@ -323,6 +334,86 @@ public class InspectApiController extends AbstractBaseController<PerformReq> { ...@@ -323,6 +334,86 @@ public class InspectApiController extends AbstractBaseController<PerformReq> {
} }
private void buildGoOffWork(InspectSaveReq req, Context context, PerformAttendRecordEntity recordEntity) {
if(!ObjectUtils.isEmpty(req.getAttendanceGroupId())&&!ObjectUtils.isEmpty(req.getAttendanceDate())){
AttendanceGroupEntity attendanceGroupEntity = groupService.get(req.getAttendanceGroupId(), context);
if (!ObjectUtils.isEmpty(attendanceGroupEntity)) {
//判断上下班时间
if (TypeEnum.固定班制.getValue() == attendanceGroupEntity.getType()) {
AttendanceGroupFixedworkEntity fixedworkEntity = fixedworkService.selectOne(new AttendanceGroupFixedworkQuery().groupId(attendanceGroupEntity.getId()));
if (!ObjectUtils.isEmpty(fixedworkEntity)) {
//查看当前时间是星期几
int dayOfWeek = DateUtil.dayOfWeek(req.getAttendanceDate());
switch (dayOfWeek) {
case 1:
String goOffWorkStr = getGoOffWorkStr(fixedworkEntity.getSundayClassId());
recordEntity.setGoOffTimeStr(goOffWorkStr);
break;
case 2:
goOffWorkStr = getGoOffWorkStr(fixedworkEntity.getMondayClassId());
recordEntity.setGoOffTimeStr(goOffWorkStr);
break;
case 3:
goOffWorkStr = getGoOffWorkStr(fixedworkEntity.getTuesdayClassId());
recordEntity.setGoOffTimeStr(goOffWorkStr);
break;
case 4:
goOffWorkStr = getGoOffWorkStr(fixedworkEntity.getWednesdayClassId());
recordEntity.setGoOffTimeStr(goOffWorkStr);
break;
case 5:
goOffWorkStr = getGoOffWorkStr(fixedworkEntity.getTuesdayClassId());
recordEntity.setGoOffTimeStr(goOffWorkStr);
break;
case 6:
goOffWorkStr = getGoOffWorkStr(fixedworkEntity.getFridayClassId());
recordEntity.setGoOffTimeStr(goOffWorkStr);
break;
case 7:
goOffWorkStr = getGoOffWorkStr(fixedworkEntity.getSundayClassId());
recordEntity.setGoOffTimeStr(goOffWorkStr);
break;
default:
recordEntity.setGoOffTimeStr("");
}
}
}
else if (TypeEnum.自由工时.getValue() == attendanceGroupEntity.getType()) {
} else if (TypeEnum.排班制.getValue() == attendanceGroupEntity.getType()) {
} else {
}
}
}
}
private String getGoOffWorkStr(Long sundayClassId) {
if (ObjectUtils.isEmpty(sundayClassId)) return "";
StringBuilder goOffWorkSb = new StringBuilder();
List<AttendanceClassDetailEntity> classDetailEntities = classDetailService.find(new AttendanceClassDetailQuery().classId(sundayClassId));
if (!ObjectUtils.isEmpty(classDetailEntities)) {
for (AttendanceClassDetailEntity classDetailEntity : classDetailEntities) {
String goWorkStr = "";
String offWorkStr = "";
if (!ObjectUtils.isEmpty(classDetailEntity.getGoWorkDate())) {
goWorkStr = DateUtil.format(classDetailEntity.getGoWorkDate(),"HH:mm");
}
if (!ObjectUtils.isEmpty(classDetailEntity.getOffWorkDate())) {
offWorkStr = DateUtil.format(classDetailEntity.getOffWorkDate(),"HH:mm");
}
goOffWorkSb.append(goWorkStr);
goOffWorkSb.append("~");
goOffWorkSb.append(offWorkStr);
goOffWorkSb.append(" \n");
}
}
return goOffWorkSb.toString();
}
private boolean review(InspectSaveReq req, Context context) throws AppException { private boolean review(InspectSaveReq req, Context context) throws AppException {
//评价保存 //评价保存
......
...@@ -401,7 +401,6 @@ public class PerformApiController extends AbstractBaseController<PerformReq> { ...@@ -401,7 +401,6 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
} }
PerformAttendAppealEntity entity = appealService.selectOne(new PerformAttendAppealQuery().checkRecordId(performDetailInfo.getId()).performType(performReq.getPerformType())); PerformAttendAppealEntity entity = appealService.selectOne(new PerformAttendAppealQuery().checkRecordId(performDetailInfo.getId()).performType(performReq.getPerformType()));
log.info("entity:{}", JSONObject.toJSONString(entity)); log.info("entity:{}", JSONObject.toJSONString(entity));
if (!ObjectUtils.isEmpty(entity)) { if (!ObjectUtils.isEmpty(entity)) {
......
...@@ -9,6 +9,7 @@ import java.util.Map; ...@@ -9,6 +9,7 @@ import java.util.Map;
* @author zxfei * @author zxfei
*/ */
public enum AppealResultEnum { public enum AppealResultEnum {
申诉中(0, "申诉中"),
通过(1, "通过"), 通过(1, "通过"),
不通过(2, "不通过"); 不通过(2, "不通过");
private Integer value; private Integer value;
......
...@@ -17,25 +17,25 @@ public class HomeStatInfo { ...@@ -17,25 +17,25 @@ public class HomeStatInfo {
private Integer totalDeptNum; private Integer totalDeptNum;
private Integer attendPersonNum; private Long attendPersonNum=0L;
private BigDecimal attendRadio; private String attendRadio;
/** /**
* 请假人数 * 请假人数
*/ */
private Integer levealPersonNum; private Integer levealPersonNum=0;
/** /**
* 迟到人数 * 迟到人数
*/ */
private Integer latePersonNum; private Long latePersonNum=0L;
/** /**
* 早退人数 * 早退人数
*/ */
private Integer leftEarlyPersonNum; private Long leftEarlyPersonNum=0L;
/** /**
* 缺卡人数 * 缺卡人数
*/ */
private Integer missCardPersonNum; private Long missCardPersonNum=0L;
} }
...@@ -74,8 +74,6 @@ public class SyncUserTaskImpl implements ITaskExcuteService { ...@@ -74,8 +74,6 @@ public class SyncUserTaskImpl implements ITaskExcuteService {
for (PersonInfo personInfo : personInfoList) { for (PersonInfo personInfo : personInfoList) {
StaffEntity staffEntity = staffService.getExtCache(StrUtil.padPre(personInfo.getJobNo(), 8, "0")); StaffEntity staffEntity = staffService.getExtCache(StrUtil.padPre(personInfo.getJobNo(), 8, "0"));
DeptEntity deptEntity = deptService.selectOne(new DeptQuery().deptCode(personInfo.getOrgIndexCode())); DeptEntity deptEntity = deptService.selectOne(new DeptQuery().deptCode(personInfo.getOrgIndexCode()));
// AttendanceVacationBalanceEntity balanceEntity = balanceService.selectOne(new AttendanceVacationBalanceQuery().staffId(staffEntity.getId()));
// AttendanceStatEntity statEntity = attendanceStatService.selectOne(new AttendanceStatQuery().staffId(staffEntity.getId()));
//判断本地数据是否为空 //判断本地数据是否为空
if (ObjectUtils.isEmpty(staffEntity)) { if (ObjectUtils.isEmpty(staffEntity)) {
//新增员工信息 //新增员工信息
......
...@@ -255,11 +255,11 @@ public class AttendanceStatEntity extends AttendanceStatVo { ...@@ -255,11 +255,11 @@ public class AttendanceStatEntity extends AttendanceStatVo {
this.windowCategory = ""; this.windowCategory = "";
this.staffId = -1L; this.staffId = null;
this.staffName = ""; this.staffName = "";
this.deptId = -1L; this.deptId = null;
this.deptName = ""; this.deptName = "";
......
...@@ -54,5 +54,8 @@ public class AttendanceRecordVo extends BaseEntityLong { ...@@ -54,5 +54,8 @@ public class AttendanceRecordVo extends BaseEntityLong {
* 导出参数配置 * 导出参数配置
*/ */
private List<String> properties; private List<String> properties;
private List<Long> idList;
} }
...@@ -50,13 +50,4 @@ public class AttendanceExportRecordController extends BaseCRUDJsonBodyMappingCon ...@@ -50,13 +50,4 @@ public class AttendanceExportRecordController extends BaseCRUDJsonBodyMappingCon
super.init(model, context); super.init(model, context);
} }
@Override
protected void doListBefore(AttendanceExportRecordEntity query, Map<String, Object> model, Context context) throws AppException {
if (ObjectUtils.isEmpty(query.getOrderColList())) {
query.setOrderColList(Arrays.asList(new OrderCol("createTime", OrderCol.DESCENDING),new OrderCol("staffName", OrderCol.DESCENDING)));
} else {
query.getOrderColList().add(new OrderCol("createTime", OrderCol.DESCENDING));
}
}
} }
...@@ -4,8 +4,10 @@ import com.alibaba.fastjson.JSONObject; ...@@ -4,8 +4,10 @@ import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.OrderCol; import com.mortals.framework.model.OrderCol;
import com.mortals.framework.utils.ServletUtils;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.common.code.GoWorkResultEnum; import com.mortals.xhx.common.code.GoWorkResultEnum;
import com.mortals.xhx.common.code.NormalEnum; import com.mortals.xhx.common.code.NormalEnum;
import com.mortals.xhx.common.code.OffWorkResultEnum; import com.mortals.xhx.common.code.OffWorkResultEnum;
...@@ -13,7 +15,9 @@ import com.mortals.xhx.common.code.YesNoEnum; ...@@ -13,7 +15,9 @@ import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.module.attendance.model.*; import com.mortals.xhx.module.attendance.model.*;
import com.mortals.xhx.module.attendance.model.vo.AttendStatInfo; import com.mortals.xhx.module.attendance.model.vo.AttendStatInfo;
import com.mortals.xhx.module.attendance.service.AttendanceClassService; import com.mortals.xhx.module.attendance.service.AttendanceClassService;
import com.mortals.xhx.module.attendance.service.AttendanceExportRecordService;
import com.mortals.xhx.module.attendance.service.AttendanceGroupService; import com.mortals.xhx.module.attendance.service.AttendanceGroupService;
import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptQuery; import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService; import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.perform.model.PerformAttendAppealEntity; import com.mortals.xhx.module.perform.model.PerformAttendAppealEntity;
...@@ -30,7 +34,10 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -30,7 +34,10 @@ import org.springframework.web.bind.annotation.RestController;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.xhx.module.attendance.service.AttendanceRecordService; import com.mortals.xhx.module.attendance.service.AttendanceRecordService;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -46,6 +53,8 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle ...@@ -46,6 +53,8 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
@Autowired @Autowired
private ParamService paramService; private ParamService paramService;
@Autowired
private UploadService uploadService;
@Autowired @Autowired
private AttendanceGroupService attendanceGroupService; private AttendanceGroupService attendanceGroupService;
...@@ -57,6 +66,12 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle ...@@ -57,6 +66,12 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
private AttendanceClassService attendanceClassService; private AttendanceClassService attendanceClassService;
@Autowired @Autowired
private StaffService staffService; private StaffService staffService;
@Autowired
private AttendanceExportRecordService attendanceExportRecordService;
@Autowired
private AttendanceGroupService groupService;
@Autowired
private AttendanceClassService classService;
public AttendanceRecordController() { public AttendanceRecordController() {
super.setModuleDesc("考勤打卡记录信息"); super.setModuleDesc("考勤打卡记录信息");
...@@ -82,40 +97,78 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle ...@@ -82,40 +97,78 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
for (AttendanceRecordEntity recordEntity : list) { for (AttendanceRecordEntity recordEntity : list) {
List<AttendanceRecordDetailEntity> attendanceRecordDetailList = recordEntity.getAttendanceRecordDetailList(); List<AttendanceRecordDetailEntity> attendanceRecordDetailList = recordEntity.getAttendanceRecordDetailList();
if(!ObjectUtils.isEmpty(attendanceRecordDetailList)){ if (!ObjectUtils.isEmpty(attendanceRecordDetailList)) {
for (AttendanceRecordDetailEntity detailEntity : attendanceRecordDetailList) { for (AttendanceRecordDetailEntity detailEntity : attendanceRecordDetailList) {
AttendanceRecordEntity attendanceRecord = new AttendanceRecordEntity(); AttendanceRecordEntity attendanceRecord = new AttendanceRecordEntity();
attendanceRecord.initAttrValue(); attendanceRecord.initAttrValue();
BeanUtils.copyProperties(recordEntity,attendanceRecord); BeanUtils.copyProperties(recordEntity, attendanceRecord);
attendanceRecord.setAttendanceRecordDetailEntity(detailEntity); attendanceRecord.setAttendanceRecordDetailEntity(detailEntity);
attendanceRecordEntities.add(attendanceRecord); attendanceRecordEntities.add(attendanceRecord);
} }
}else { } else {
AttendanceRecordEntity attendanceRecord = new AttendanceRecordEntity(); AttendanceRecordEntity attendanceRecord = new AttendanceRecordEntity();
attendanceRecord.initAttrValue(); attendanceRecord.initAttrValue();
BeanUtils.copyProperties(recordEntity,attendanceRecord); BeanUtils.copyProperties(recordEntity, attendanceRecord);
attendanceRecordEntities.add(attendanceRecord); attendanceRecordEntities.add(attendanceRecord);
} }
} }
if(!ObjectUtils.isEmpty(attendanceRecordEntities)){ if (!ObjectUtils.isEmpty(attendanceRecordEntities)) {
list.clear(); list.clear();
list.addAll(attendanceRecordEntities); list.addAll(attendanceRecordEntities);
} }
} }
@Override
public void doExportFileAfter(byte[] data, AttendanceRecordEntity query, Context context) throws AppException {
InputStream inputStream = new ByteArrayInputStream(data);
MultipartFile file = ServletUtils.getMultipartFile(inputStream, "kaoqin.xlsx");
String filePath = uploadService.saveFileUpload(file, "file/fileupload", null);
AttendanceExportRecordEntity attendanceExportRecordEntity = new AttendanceExportRecordEntity();
attendanceExportRecordEntity.initAttrValue();
attendanceExportRecordEntity.setFilePath(filePath);
if (query.getIdList() != null) {
List<Long> idList = query.getIdList();
attendanceExportRecordEntity.setRecordIdList(idList.stream().map(i->i.toString()).collect(Collectors.joining(",")));
}
if (query.getAttendanceDateStart() != null) {
String attendanceDate = query.getAttendanceDateStart() + "~" + query.getAttendanceDateEnd();
attendanceExportRecordEntity.setAttendanceDate(attendanceDate);
}
if(!ObjectUtils.isEmpty(query.getAttendanceGroupId())){
AttendanceGroupEntity attendanceGroupEntity = groupService.get(query.getAttendanceGroupId());
attendanceExportRecordEntity.setGroupName(attendanceGroupEntity==null?"":attendanceGroupEntity.getGroupName());
}
if(!ObjectUtils.isEmpty(query.getDeptId())){
DeptEntity deptEntity = deptService.get(query.getDeptId(), context);
attendanceExportRecordEntity.setDeptName(deptEntity==null?"":deptEntity.getDeptName());
}
if(!ObjectUtils.isEmpty(query.getShiftsId())){
AttendanceClassEntity attendanceClassEntity = classService.get(query.getShiftsId(), context);
attendanceExportRecordEntity.setClassName(attendanceClassEntity==null?"":attendanceClassEntity.getClassName());
}
attendanceExportRecordEntity.setCreateUserId(context.getUser().getId());
attendanceExportRecordEntity.setCreateTime(new Date());
attendanceExportRecordEntity.setType(2);
attendanceExportRecordEntity.setExportOrImport(1);
attendanceExportRecordService.save(attendanceExportRecordEntity);
}
@Override @Override
protected void doListBefore(AttendanceRecordEntity query, Map<String, Object> model, Context context) throws AppException { protected void doListBefore(AttendanceRecordEntity query, Map<String, Object> model, Context context) throws AppException {
if (query.getClassId()!=null){ if (query.getClassId() != null) {
query.setShiftsId(query.getClassId()); query.setShiftsId(query.getClassId());
} }
if (query.getGroupId()!=null){ if (query.getGroupId() != null) {
query.setAttendanceGroupId(query.getGroupId()); query.setAttendanceGroupId(query.getGroupId());
} }
if (ObjectUtils.isEmpty(query.getOrderColList())) { if (ObjectUtils.isEmpty(query.getOrderColList())) {
query.setOrderColList(Arrays.asList(new OrderCol("attendanceDate", OrderCol.DESCENDING),new OrderCol("staffName", OrderCol.DESCENDING))); query.setOrderColList(Arrays.asList(new OrderCol("attendanceDate", OrderCol.DESCENDING), new OrderCol("staffName", OrderCol.DESCENDING)));
} else { } else {
query.getOrderColList().add(new OrderCol("attendanceDate", OrderCol.DESCENDING)); query.getOrderColList().add(new OrderCol("attendanceDate", OrderCol.DESCENDING));
query.getOrderColList().add(new OrderCol("staffName", OrderCol.DESCENDING)); query.getOrderColList().add(new OrderCol("staffName", OrderCol.DESCENDING));
...@@ -240,7 +293,6 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle ...@@ -240,7 +293,6 @@ public class AttendanceRecordController extends BaseCRUDJsonBodyMappingControlle
} }
/** /**
* 每日统计 * 每日统计
*/ */
......
...@@ -10,9 +10,13 @@ import com.mortals.framework.utils.ServletUtils; ...@@ -10,9 +10,13 @@ import com.mortals.framework.utils.ServletUtils;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.base.system.upload.service.UploadService; import com.mortals.xhx.base.system.upload.service.UploadService;
import com.mortals.xhx.module.attendance.model.AttendanceClassEntity;
import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity; import com.mortals.xhx.module.attendance.model.AttendanceExportRecordEntity;
import com.mortals.xhx.module.attendance.model.AttendanceGroupEntity;
import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity; import com.mortals.xhx.module.attendance.model.AttendanceRecordHikEntity;
import com.mortals.xhx.module.attendance.service.AttendanceClassService;
import com.mortals.xhx.module.attendance.service.AttendanceExportRecordService; import com.mortals.xhx.module.attendance.service.AttendanceExportRecordService;
import com.mortals.xhx.module.attendance.service.AttendanceGroupService;
import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService; import com.mortals.xhx.module.attendance.service.AttendanceRecordHikService;
import com.mortals.xhx.module.dept.model.DeptEntity; import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptQuery; import com.mortals.xhx.module.dept.model.DeptQuery;
...@@ -32,6 +36,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -32,6 +36,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.util.*; import java.util.*;
import java.util.stream.Collectors;
/** /**
* 海康考勤打卡记录汇总信息 * 海康考勤打卡记录汇总信息
...@@ -55,6 +60,10 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro ...@@ -55,6 +60,10 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
private AttendanceExportRecordService attendanceExportRecordService; private AttendanceExportRecordService attendanceExportRecordService;
@Autowired @Autowired
private AttendanceRecordHikService hikService; private AttendanceRecordHikService hikService;
@Autowired
private AttendanceGroupService groupService;
@Autowired
private AttendanceClassService classService;
public AttendanceRecordHikController() { public AttendanceRecordHikController() {
super.setModuleDesc("海康考勤打卡记录汇总信息"); super.setModuleDesc("海康考勤打卡记录汇总信息");
...@@ -170,20 +179,28 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro ...@@ -170,20 +179,28 @@ public class AttendanceRecordHikController extends BaseCRUDJsonBodyMappingContro
attendanceExportRecordEntity.setFilePath(filePath); attendanceExportRecordEntity.setFilePath(filePath);
if (query.getIdList() != null) { if (query.getIdList() != null) {
List<Long> idList = query.getIdList(); List<Long> idList = query.getIdList();
String recordIdList = ""; attendanceExportRecordEntity.setRecordIdList(idList.stream().map(i->i.toString()).collect(Collectors.joining(",")));
for (Long aLong : idList) {
if (recordIdList.equals("")) {
recordIdList = recordIdList + aLong;
} else {
recordIdList = recordIdList + "、" + aLong;
}
}
attendanceExportRecordEntity.setRecordIdList(recordIdList);
} }
if (query.getAttendanceDateStart() != null) { if (query.getAttendanceDateStart() != null) {
String attendanceDate = query.getAttendanceDateStart() + "~" + query.getAttendanceDateEnd(); String attendanceDate = query.getAttendanceDateStart() + "~" + query.getAttendanceDateEnd();
attendanceExportRecordEntity.setAttendanceDate(attendanceDate); attendanceExportRecordEntity.setAttendanceDate(attendanceDate);
} }
if(!ObjectUtils.isEmpty(query.getAttendanceGroupId())){
AttendanceGroupEntity attendanceGroupEntity = groupService.get(query.getAttendanceGroupId());
attendanceExportRecordEntity.setGroupName(attendanceGroupEntity==null?"":attendanceGroupEntity.getGroupName());
}
if(!ObjectUtils.isEmpty(query.getDeptId())){
DeptEntity deptEntity = deptService.get(query.getDeptId(), context);
attendanceExportRecordEntity.setDeptName(deptEntity==null?"":deptEntity.getDeptName());
}
if(!ObjectUtils.isEmpty(query.getShiftsId())){
AttendanceClassEntity attendanceClassEntity = classService.get(query.getShiftsId(), context);
attendanceExportRecordEntity.setClassName(attendanceClassEntity==null?"":attendanceClassEntity.getClassName());
}
attendanceExportRecordEntity.setCreateUserId(context.getUser().getId()); attendanceExportRecordEntity.setCreateUserId(context.getUser().getId());
attendanceExportRecordEntity.setCreateTime(new Date()); attendanceExportRecordEntity.setCreateTime(new Date());
attendanceExportRecordEntity.setType(1); attendanceExportRecordEntity.setType(1);
......
...@@ -323,7 +323,7 @@ public class PerformAttendAppealEntity extends PerformAttendAppealVo { ...@@ -323,7 +323,7 @@ public class PerformAttendAppealEntity extends PerformAttendAppealVo {
this.appealTime = null; this.appealTime = null;
this.appealResult = null; this.appealResult = 0;
this.remark = ""; this.remark = "";
......
...@@ -57,10 +57,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -57,10 +57,8 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
private CheckGoworkRecordService checkGoworkRecordService; private CheckGoworkRecordService checkGoworkRecordService;
@Autowired @Autowired
private CheckOtherRecordService checkOtherRecordService; private CheckOtherRecordService checkOtherRecordService;
@Autowired @Autowired
private PerformAttendAppealFilesService performAttendAppealFilesService; private PerformAttendAppealFilesService performAttendAppealFilesService;
@Autowired @Autowired
private IDingPersonService dingPersonService; private IDingPersonService dingPersonService;
@Autowired @Autowired
...@@ -248,6 +246,21 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf ...@@ -248,6 +246,21 @@ public class PerformAttendAppealServiceImpl extends AbstractCRUDServiceImpl<Perf
} }
@Override
protected void saveBefore(PerformAttendAppealEntity entity, Context context) throws AppException {
//校验是否存在已经通过的申诉
PerformAttendAppealQuery appealQuery = new PerformAttendAppealQuery();
appealQuery.setCheckRecordId(entity.getCheckRecordId());
appealQuery.setPerformType(entity.getPerformType());
appealQuery.setAppealResult(AppealResultEnum.通过.getValue());
int count = this.count(appealQuery, context);
if(count>0){
throw new AppException("已存在相同的通过申诉,不要重复申诉!");
}
}
@Override @Override
protected void saveAfter(PerformAttendAppealEntity entity, Context context) throws AppException { protected void saveAfter(PerformAttendAppealEntity entity, Context context) throws AppException {
if (!ObjectUtils.isEmpty(entity.getPerformAttendAppealFilesList())) { if (!ObjectUtils.isEmpty(entity.getPerformAttendAppealFilesList())) {
......
...@@ -57,6 +57,7 @@ public class PerformOtherRecordServiceImpl extends AbstractCRUDServiceImpl<Perfo ...@@ -57,6 +57,7 @@ public class PerformOtherRecordServiceImpl extends AbstractCRUDServiceImpl<Perfo
if (!ObjectUtils.isEmpty(entity.getRuleId())) { if (!ObjectUtils.isEmpty(entity.getRuleId())) {
PerformRulesEntity rulesEntity = rulesService.getCache(entity.getRuleId().toString()); PerformRulesEntity rulesEntity = rulesService.getCache(entity.getRuleId().toString());
entity.setRuleName(rulesEntity.getName()); entity.setRuleName(rulesEntity.getName());
entity.setRuleDesc(rulesEntity.getContent());
entity.setSubAddType(rulesEntity == null ? 1 : rulesEntity.getSubAddType()); entity.setSubAddType(rulesEntity == null ? 1 : rulesEntity.getSubAddType());
} }
if (!ObjectUtils.isEmpty(entity.getStaffId())) { if (!ObjectUtils.isEmpty(entity.getStaffId())) {
......
package com.mortals.xhx.module.staff.service; package com.mortals.xhx.module.staff.service;
import com.mortals.framework.common.Rest;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDCacheService; import com.mortals.framework.service.ICRUDCacheService;
import com.mortals.xhx.module.staff.model.StaffEntity; import com.mortals.xhx.module.staff.model.StaffEntity;
...@@ -21,4 +22,12 @@ public interface StaffService extends ICRUDCacheService<StaffEntity,Long> { ...@@ -21,4 +22,12 @@ public interface StaffService extends ICRUDCacheService<StaffEntity,Long> {
StaffInfoVo queryAll(Context context); StaffInfoVo queryAll(Context context);
//统计所有在职员工 //统计所有在职员工
int queryAllPerson(); int queryAllPerson();
/**
* 同步人员信息
* @param context
* @return
*/
Rest<Void> syncPersons(Context context);
} }
\ No newline at end of file
package com.mortals.xhx.module.staff.service.impl; package com.mortals.xhx.module.staff.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.service.impl.AbstractCRUDCacheServiceImpl; import com.mortals.framework.service.impl.AbstractCRUDCacheServiceImpl;
...@@ -10,7 +12,19 @@ import com.mortals.xhx.base.system.role.service.RoleUserService; ...@@ -10,7 +12,19 @@ import com.mortals.xhx.base.system.role.service.RoleUserService;
import com.mortals.xhx.base.system.user.model.UserEntity; import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.service.UserService; import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.common.code.*; import com.mortals.xhx.common.code.*;
import com.mortals.xhx.module.attendance.model.AttendanceStatEntity;
import com.mortals.xhx.module.attendance.model.AttendanceStatQuery;
import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceEntity;
import com.mortals.xhx.module.attendance.model.AttendanceVacationBalanceQuery;
import com.mortals.xhx.module.attendance.service.AttendanceStatService;
import com.mortals.xhx.module.attendance.service.AttendanceVacationBalanceService;
import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.service.DeptService; import com.mortals.xhx.module.dept.service.DeptService;
import com.mortals.xhx.module.hik.person.model.req.person.PersonReq;
import com.mortals.xhx.module.hik.person.model.rsp.person.PersonDataInfo;
import com.mortals.xhx.module.hik.person.model.rsp.person.PersonInfo;
import com.mortals.xhx.module.hik.person.service.IHikPersonService;
import com.mortals.xhx.module.staff.dao.StaffDao; import com.mortals.xhx.module.staff.dao.StaffDao;
import com.mortals.xhx.module.staff.dao.ibatis.StaffDaoImpl; import com.mortals.xhx.module.staff.dao.ibatis.StaffDaoImpl;
import com.mortals.xhx.module.staff.dao.ibatis.StaffLeaveDaoImpl; import com.mortals.xhx.module.staff.dao.ibatis.StaffLeaveDaoImpl;
...@@ -18,6 +32,7 @@ import com.mortals.xhx.module.staff.model.StaffEntity; ...@@ -18,6 +32,7 @@ import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.model.StaffQuery; import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.model.vo.StaffInfoVo; import com.mortals.xhx.module.staff.model.vo.StaffInfoVo;
import com.mortals.xhx.module.staff.service.StaffService; import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
...@@ -36,6 +51,7 @@ import java.util.stream.Collectors; ...@@ -36,6 +51,7 @@ import java.util.stream.Collectors;
* @date 2023-04-07 * @date 2023-04-07
*/ */
@Service("staffService") @Service("staffService")
@Slf4j
public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, StaffEntity, Long> implements StaffService { public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, StaffEntity, Long> implements StaffService {
@Autowired @Autowired
...@@ -46,6 +62,15 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta ...@@ -46,6 +62,15 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
@Autowired @Autowired
private RoleUserService roleUserService; private RoleUserService roleUserService;
@Autowired
private IHikPersonService hikPersonService;
@Autowired
private AttendanceStatService attendanceStatService;
@Autowired
private AttendanceVacationBalanceService balanceService;
@Override @Override
protected String getExtKey(StaffEntity data) { protected String getExtKey(StaffEntity data) {
//工号作为redis 扩展key //工号作为redis 扩展key
...@@ -57,10 +82,13 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta ...@@ -57,10 +82,13 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
protected void saveBefore(StaffEntity entity, Context context) throws AppException { protected void saveBefore(StaffEntity entity, Context context) throws AppException {
int count = this.count(new StaffQuery().workNum(entity.getWorkNum()), context); int count = this.count(new StaffQuery().workNum(entity.getWorkNum()), context);
if (count > 0) { if (count > 0) {
throw new AppException("工号重复!"); throw new AppException("工号重复!工号:" + entity.getWorkNum());
} }
} }
@Override @Override
public StaffInfoVo queryAll(Context context) { public StaffInfoVo queryAll(Context context) {
StaffInfoVo staffInfoVo = new StaffInfoVo(); StaffInfoVo staffInfoVo = new StaffInfoVo();
...@@ -94,12 +122,102 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta ...@@ -94,12 +122,102 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
return staffEntities.size(); return staffEntities.size();
} }
@Override
public Rest<Void> syncPersons(Context context) {
log.info("同步人员!");
PersonReq personReq = new PersonReq();
personReq.setPageNo(1);
personReq.setPageSize(1000);
Rest<PersonDataInfo> personRest = hikPersonService.getPersonList(personReq);
if (personRest.getCode() == YesNoEnum.YES.getValue()) {
List<PersonInfo> personInfoList = personRest.getData().getList();
for (PersonInfo personInfo : personInfoList) {
StaffEntity staffEntity = this.getExtCache(StrUtil.padPre(personInfo.getJobNo(), 8, "0"));
DeptEntity deptEntity = deptService.selectOne(new DeptQuery().deptCode(personInfo.getOrgIndexCode()));
//判断本地数据是否为空
if (ObjectUtils.isEmpty(staffEntity)) {
//新增员工信息
staffEntity = new StaffEntity();
staffEntity.initAttrValue();
if (!ObjectUtils.isEmpty(deptEntity)) {
staffEntity.setDeptId(deptEntity.getId());
}
staffEntity.setName(personInfo.getPersonName());
staffEntity.setRemarkId(personInfo.getPersonId());
staffEntity.setPicUri(personInfo.getPersonPhoto().getPicUri());
staffEntity.setServerIndexCode(personInfo.getPersonPhoto().getServerIndexCode());
staffEntity.setDeptName(personInfo.getOrgName());
staffEntity.setGender(personInfo.getGender());
staffEntity.setWorkNum(personInfo.getJobNo());
staffEntity.setPhoneNumber(personInfo.getPhoneNo());
staffEntity.setCreateUserId(1L);
staffEntity.setCreateTime(new Date());
this.save(staffEntity);
} else {
//更新
if (!ObjectUtils.isEmpty(deptEntity)) {
staffEntity.setDeptId(deptEntity.getId());
}
staffEntity.setName(personInfo.getPersonName());
staffEntity.setRemarkId(personInfo.getPersonId());
staffEntity.setPicUri(personInfo.getPersonPhoto().getPicUri());
staffEntity.setServerIndexCode(personInfo.getPersonPhoto().getServerIndexCode());
staffEntity.setDeptName(personInfo.getOrgName());
staffEntity.setGender(personInfo.getGender());
staffEntity.setWorkNum(personInfo.getJobNo());
staffEntity.setPhoneNumber(personInfo.getPhoneNo());
staffEntity.setUpdateUserId(1L);
staffEntity.setUpdateTime(new Date());
this.update(staffEntity);
}
}
}
return Rest.ok();
}
@Override @Override
protected void saveAfter(StaffEntity entity, Context context) throws AppException { protected void saveAfter(StaffEntity entity, Context context) throws AppException {
super.saveAfter(entity, context);
//初始化
int count = balanceService.count(new AttendanceVacationBalanceQuery().staffId(entity.getId()), context);
if(count==0){
AttendanceVacationBalanceEntity balanceEntity = new AttendanceVacationBalanceEntity();
balanceEntity.initAttrValue();
balanceEntity.setStaffId(entity.getId());
balanceEntity.setStaffName(entity.getName());
balanceEntity.setDeptId(entity.getDeptId());
balanceEntity.setDeptName(entity.getDeptName());
balanceEntity.setCreateUserId(1L);
balanceEntity.setCreateTime(new Date());
balanceService.save(balanceEntity);
}
AttendanceStatQuery attendanceStatQuery = new AttendanceStatQuery();
attendanceStatQuery.setYear(DateUtil.year(new Date()));
attendanceStatQuery.setMonth(DateUtil.month(new Date())+1);
attendanceStatQuery.setDay(DateUtil.dayOfMonth(new Date()));
attendanceStatQuery.setStaffId(entity.getId());
int count1 = attendanceStatService.count(attendanceStatQuery, context);
if(count1==0){
AttendanceStatEntity attendanceStatEntity = new AttendanceStatEntity();
attendanceStatEntity.initAttrValue();
attendanceStatEntity.setStaffId(entity.getId());
attendanceStatEntity.setStaffName(entity.getName());
attendanceStatEntity.setDeptId(entity.getDeptId());
attendanceStatEntity.setDeptName(entity.getDeptName());
attendanceStatEntity.setPhoneNumer(entity.getPhoneNumber());
attendanceStatEntity.setYear(DateUtil.year(new Date()));
attendanceStatEntity.setMonth(DateUtil.month(new Date())+1);
attendanceStatEntity.setDay(DateUtil.dayOfMonth(new Date()));
attendanceStatEntity.setCreateUserId(1L);
attendanceStatEntity.setCreateTime(new Date());
attendanceStatService.save(attendanceStatEntity);
}
try { try {
UserEntity userEntity = new UserEntity(); UserEntity userEntity = new UserEntity();
if (ObjectUtils.isEmpty(entity.getLoginName())) { if (ObjectUtils.isEmpty(entity.getLoginName())) {
//姓名加工号作为登录名 //姓名加工号作为登录名
entity.setLoginName(entity.getName() + entity.getWorkNum()); entity.setLoginName(entity.getName() + entity.getWorkNum());
...@@ -130,9 +248,9 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta ...@@ -130,9 +248,9 @@ public class StaffServiceImpl extends AbstractCRUDCacheServiceImpl<StaffDao, Sta
} }
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); log.error("保存系统用户异常!",e);
} }
super.saveAfter(entity, context);
} }
......
package com.mortals.xhx.module.staff.web; package com.mortals.xhx.module.staff.web;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.web.BaseCRUDJsonBodyMappingController; import com.mortals.framework.web.BaseCRUDJsonBodyMappingController;
import com.mortals.xhx.base.system.param.service.ParamService; import com.mortals.xhx.base.system.param.service.ParamService;
import com.mortals.xhx.common.code.YesNoEnum;
import com.mortals.xhx.module.attendance.model.vo.AttendStatInfo;
import com.mortals.xhx.module.dept.model.DeptEntity; import com.mortals.xhx.module.dept.model.DeptEntity;
import com.mortals.xhx.module.dept.model.DeptQuery; import com.mortals.xhx.module.dept.model.DeptQuery;
import com.mortals.xhx.module.dept.model.DeptTreeSelect; import com.mortals.xhx.module.dept.model.DeptTreeSelect;
...@@ -16,6 +20,7 @@ import com.mortals.xhx.module.staff.model.vo.HolidayListVo; ...@@ -16,6 +20,7 @@ import com.mortals.xhx.module.staff.model.vo.HolidayListVo;
import com.mortals.xhx.module.staff.model.vo.StaffInfoVo; import com.mortals.xhx.module.staff.model.vo.StaffInfoVo;
import com.mortals.xhx.module.staff.service.StaffService; import com.mortals.xhx.module.staff.service.StaffService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -109,6 +114,29 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ ...@@ -109,6 +114,29 @@ public class StaffController extends BaseCRUDJsonBodyMappingController<StaffServ
return super.saveAfter(entity, model, context); return super.saveAfter(entity, model, context);
} }
/**
* 同步更新人员
*/
@PostMapping(value = "syncPersons")
public String syncPersons() {
JSONObject jsonObject = new JSONObject();
String busiDesc = this.getModuleDesc() + "同步";
try {
Rest<Void> rest = this.service.syncPersons(getContext());
if (rest.getCode() == YesNoEnum.NO.getValue()) {
throw new AppException("同步异常!");
}
recordSysLog(request, busiDesc + " 【成功】");
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_SUCCESS);
jsonObject.put(KEY_RESULT_MSG, busiDesc + " 【成功】");
} catch (Exception e) {
log.error("同步人员", e);
jsonObject.put(KEY_RESULT_CODE, VALUE_RESULT_FAILURE);
jsonObject.put(KEY_RESULT_MSG, super.convertException(e));
}
return jsonObject.toJSONString();
}
@Override @Override
public String delete(Long[] id) { public String delete(Long[] id) {
return super.delete(id); return super.delete(id);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment