diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/ExamStatusEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExamStatusEnum.java new file mode 100644 index 000000000..160ea6161 --- /dev/null +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/ExamStatusEnum.java @@ -0,0 +1,46 @@ +package com.cool.store.enums; + +import org.apache.commons.lang3.StringUtils; + +/** + * @author Fun Li + * @version 1.0 + * @date 2023/7/19 17:55 + */ +public enum ExamStatusEnum { + + NOT_START(0, "未开始"), + PASS(1, "通过"), + NOT_PASS(2, "不通过"); + + private Integer code; + + private String desc; + + ExamStatusEnum(Integer code, String desc) { + this.code = code; + this.desc = desc; + } + + public Integer getCode() { + return code; + } + + public String getDesc() { + return desc; + } + + public static Integer matchCodeByDesc(String desc) { + if(StringUtils.isBlank(desc)){ + return null; + } + for (ExamStatusEnum statusEnum : ExamStatusEnum.values()) { + if (statusEnum.getDesc().equals(desc)) { + return statusEnum.code; + } + } + return null; + } + + +} diff --git a/coolstore-partner-common/src/main/java/com/cool/store/enums/video/UploadTypeEnum.java b/coolstore-partner-common/src/main/java/com/cool/store/enums/video/UploadTypeEnum.java index 04e2e2be9..904296eb8 100644 --- a/coolstore-partner-common/src/main/java/com/cool/store/enums/video/UploadTypeEnum.java +++ b/coolstore-partner-common/src/main/java/com/cool/store/enums/video/UploadTypeEnum.java @@ -66,6 +66,12 @@ public enum UploadTypeEnum { * 陈列检查内容提交 */ TB_DISPLAY_TABLE_DATA_CONTENT(14), + + + /** + * 考核數據 + */ + ASSESSMENT_DATA_CONTENT(201), ; diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentDataDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentDataDAO.java index 38189244c..36b5afb9a 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentDataDAO.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/AssessmentDataDAO.java @@ -80,5 +80,9 @@ public class AssessmentDataDAO { assessmentDataMapper.batchInsert(assessmentDataDOList); } + public void batchInsertOrUpdate(List assessmentDataDOList) { + assessmentDataMapper.batchInsertOrUpdate(assessmentDataDOList); + } + } diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentDataMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentDataMapper.java index fd10197cb..74d4d70d9 100644 --- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentDataMapper.java +++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/AssessmentDataMapper.java @@ -14,4 +14,6 @@ public interface AssessmentDataMapper extends Mapper { Boolean deleteByShopId(@Param("shopId") Long shopId); Integer batchInsert(@Param("assessmentDataList") List assessmentDataList); + + Integer batchInsertOrUpdate(@Param("assessmentDataList") List assessmentDataList); } \ No newline at end of file diff --git a/coolstore-partner-dao/src/main/resources/mapper/AssessmentDataMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/AssessmentDataMapper.xml index ee87731b3..343200bc9 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/AssessmentDataMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/AssessmentDataMapper.xml @@ -23,6 +23,34 @@ #{item.assessmentUserId}) + + insert into xfsg_assessment_data + ( + template_id, + shop_id, + assessment_user_id, + qualified, + score, + reason, + comments, + picture, + video + ) values + + ( #{item.templateId}, + #{item.shopId}, + #{item.assessmentUserId}, + #{item.qualified}, + #{item.score}, + #{item.reason}, + #{item.comments}, + #{item.picture}, + #{item.video} + ) + + ON DUPLICATE KEY UPDATE qualified=values(qualified), score=values(score), reason=values(reason) + , comments=values(comments), picture=values(picture), video=values(video) + update xfsg_assessment_data diff --git a/coolstore-partner-dao/src/main/resources/mapper/EmployeeTrainingMapper.xml b/coolstore-partner-dao/src/main/resources/mapper/EmployeeTrainingMapper.xml index 88012fa41..d1cb540a4 100644 --- a/coolstore-partner-dao/src/main/resources/mapper/EmployeeTrainingMapper.xml +++ b/coolstore-partner-dao/src/main/resources/mapper/EmployeeTrainingMapper.xml @@ -142,6 +142,7 @@ u.shop_id as shopId, s.shop_name as shopName, u.id_card as idCard, + u.register_time as registerTime, e.id as employeeTrainingId, e.training_store_id as trainingStoreId, e.training_teacher_user_id as trainingTeacherUserId, diff --git a/coolstore-partner-model/src/main/java/com/cool/store/dto/StaffExamInfoDTO.java b/coolstore-partner-model/src/main/java/com/cool/store/dto/StaffExamInfoDTO.java new file mode 100644 index 000000000..79fb51046 --- /dev/null +++ b/coolstore-partner-model/src/main/java/com/cool/store/dto/StaffExamInfoDTO.java @@ -0,0 +1,36 @@ +package com.cool.store.dto; + +import lombok.Data; + +/** + * @author byd + * @date 2024-05-08 14:07 + */ +@Data +public class StaffExamInfoDTO { + + /** + * 考试名称 + */ + private String examName; + /** + * 姓名 + */ + private String staffName; + /** + * 部门 + */ + private String deptPath; + /** + * 员工编号 + */ + private String staffNumber; + /** + * 考试结果 + */ + private String examResult; + /** + * 考试分数 + */ + private String examScore; +} diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/XfsgEhrService.java b/coolstore-partner-service/src/main/java/com/cool/store/service/XfsgEhrService.java index 3b71e4287..f33c9e920 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/XfsgEhrService.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/XfsgEhrService.java @@ -1,5 +1,6 @@ package com.cool.store.service; +import com.cool.store.dto.StaffExamInfoDTO; import com.cool.store.dto.ehr.FranchiseeInfoDTO; import com.cool.store.dto.ehr.StaffBaseInfoDTO; @@ -22,5 +23,10 @@ public interface XfsgEhrService { FranchiseeInfoDTO getFranchiseeInfoByFrId(String frId); - + /** + * 员工考试信息接口 + * @param staffNumber + * @return + */ + StaffExamInfoDTO getUserExamInfo(String staffNumber); } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EmployeeTrainingServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EmployeeTrainingServiceImpl.java index 2368894b1..d4650df1b 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EmployeeTrainingServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/EmployeeTrainingServiceImpl.java @@ -1,20 +1,30 @@ package com.cool.store.service.impl; +import com.alibaba.fastjson.JSONObject; import com.cool.store.constants.CommonConstants; +import com.cool.store.constants.RedisConstant; import com.cool.store.dao.*; +import com.cool.store.dto.SmallVideoDTO; +import com.cool.store.dto.SmallVideoInfoDTO; +import com.cool.store.dto.StaffExamInfoDTO; import com.cool.store.entity.*; import com.cool.store.enums.AssessmentTemplateType; +import com.cool.store.enums.ExamStatusEnum; +import com.cool.store.enums.video.ResourceStatusEnum; +import com.cool.store.enums.video.UploadTypeEnum; import com.cool.store.exception.ServiceException; import com.cool.store.request.*; -import com.cool.store.service.EmployeeTrainingService; -import com.cool.store.service.RegionService; -import com.cool.store.service.SysRoleService; -import com.cool.store.service.UserAuthMappingService; +import com.cool.store.service.*; +import com.cool.store.utils.RedisUtilPool; import com.cool.store.utils.poi.DateUtils; +import com.cool.store.utils.vod.SmallVideoParam; import com.cool.store.vo.*; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -63,6 +73,11 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { @Resource private AssessmentDataDAO assessmentDataDAO; + @Resource + private RedisUtilPool redisUtilPool; + + @Resource + private XfsgEhrService xfsgEhrService; @Override public PageInfo employeeTrainingList(String userId, EmployeeTrainingRequest request) { @@ -114,6 +129,8 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { EmployeeTrainingDO employeeTrainingDO = employeeTrainingDAO.selectByUserDetailId(id); + EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailDO.getIdCard()); + EmployeeTrainingDetailVO employeeTrainingVO = new EmployeeTrainingDetailVO(); employeeTrainingVO.setId(employeeTrainingDO.getId()); employeeTrainingVO.setRegionId(employeeTrainingDO.getRegionId()); @@ -133,6 +150,19 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { employeeTrainingVO.setAssessmentTotalNum(employeeTrainingDO.getAssessmentTotalNum()); employeeTrainingVO.setTheoreticalExamStatus(employeeTrainingDO.getTheoreticalExamStatus()); employeeTrainingVO.setTheoreticalExamScore(employeeTrainingDO.getTheoreticalExamScore()); + //查询理论分支并更新 + StaffExamInfoDTO staffExamInfoDTO = xfsgEhrService.getUserExamInfo(enterpriseUserDO.getJobnumber()); + if (staffExamInfoDTO != null && StringUtils.isNotBlank(staffExamInfoDTO.getExamResult()) + && StringUtils.isNotBlank(staffExamInfoDTO.getExamScore())) { + employeeTrainingVO.setTheoreticalExamScore(StringUtils.isNotBlank(staffExamInfoDTO.getExamScore()) ? Integer.valueOf(staffExamInfoDTO.getExamScore()) : null); + employeeTrainingVO.setTheoreticalExamStatus(ExamStatusEnum.matchCodeByDesc(staffExamInfoDTO.getExamResult())); + if(!employeeTrainingVO.getTheoreticalExamScore().equals(employeeTrainingDO.getTheoreticalExamScore()) + || !employeeTrainingVO.getTheoreticalExamStatus().equals(employeeTrainingDO.getTheoreticalExamStatus())){ + employeeTrainingDO.setTheoreticalExamScore(employeeTrainingVO.getTheoreticalExamScore()); + employeeTrainingDO.setTheoreticalExamStatus(employeeTrainingVO.getTheoreticalExamStatus()); + employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); + } + } employeeTrainingVO.setPracticalExamStatus(employeeTrainingDO.getPracticalExamStatus()); employeeTrainingVO.setPracticalExamScore(employeeTrainingDO.getPracticalExamScore()); employeeTrainingVO.setEstimatedAssessmentTime(employeeTrainingDO.getEstimatedAssessmentTime()); @@ -226,7 +256,7 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { @Override public List trainerUserList(String userId, Integer status) { List list = employeeTrainingDAO.trainingListByShopId(null, userId, status); - if(CollectionUtils.isEmpty(list)){ + if (CollectionUtils.isEmpty(list)) { return list; } List storeIdList = list.stream().map(EmployeeTrainingVO::getTrainingStoreId).collect(Collectors.toList()); @@ -266,11 +296,11 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { employeeUserTrainingVO.setRegionId(tempUserDetailDO.getRegionId()); employeeUserTrainingVO.setShopId(tempUserDetailDO.getShopId()); ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(tempUserDetailDO.getShopId()); - if(shopInfoDO != null){ + if (shopInfoDO != null) { employeeUserTrainingVO.setShopName(shopInfoDO.getShopName()); } StoreDO storeDO = storeDAO.getByStoreId(employeeTrainingDO.getTrainingStoreId()); - if(storeDO != null){ + if (storeDO != null) { employeeUserTrainingVO.setTrainingStoreName(storeDO.getStoreName()); } @@ -402,8 +432,25 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { assessmentUserTrainingVO.setShopId(tempUserDetailDO.getShopId()); assessmentUserTrainingVO.setTheoreticalExamStatus(employeeTrainingDO.getTheoreticalExamStatus()); assessmentUserTrainingVO.setTheoreticalExamScore(employeeTrainingDO.getTheoreticalExamScore()); + + //查询理论分支并更新 + StaffExamInfoDTO staffExamInfoDTO = xfsgEhrService.getUserExamInfo(enterpriseUserDO.getJobnumber()); + if (staffExamInfoDTO != null && StringUtils.isNotBlank(staffExamInfoDTO.getExamResult()) + && StringUtils.isNotBlank(staffExamInfoDTO.getExamScore())) { + assessmentUserTrainingVO.setTheoreticalExamScore(StringUtils.isNotBlank(staffExamInfoDTO.getExamScore()) ? Integer.valueOf(staffExamInfoDTO.getExamScore()) : null); + assessmentUserTrainingVO.setTheoreticalExamStatus(ExamStatusEnum.matchCodeByDesc(staffExamInfoDTO.getExamResult())); + if(!assessmentUserTrainingVO.getTheoreticalExamScore().equals(employeeTrainingDO.getTheoreticalExamScore()) + || !assessmentUserTrainingVO.getTheoreticalExamStatus().equals(employeeTrainingDO.getTheoreticalExamStatus())){ + employeeTrainingDO.setTheoreticalExamScore(assessmentUserTrainingVO.getTheoreticalExamScore()); + employeeTrainingDO.setTheoreticalExamStatus(assessmentUserTrainingVO.getTheoreticalExamStatus()); + employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); + } + } + assessmentUserTrainingVO.setPracticalExamScore(employeeTrainingDO.getPracticalExamScore()); assessmentUserTrainingVO.setPracticalExamStatus(employeeTrainingDO.getPracticalExamStatus()); + assessmentUserTrainingVO.setId(tempUserDetailDO.getId()); + assessmentUserTrainingVO.setRegionId(tempUserDetailDO.getRegionId()); ShopInfoDO shopInfoDO = shopInfoDAO.getShopInfo(employeeTrainingDO.getShopId()); if (shopInfoDO != null) { assessmentUserTrainingVO.setShopName(shopInfoDO.getShopName()); @@ -473,6 +520,12 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { EnterpriseUserDO enterpriseUserDO = enterpriseUserDAO.getUserInfoByThirdOaUniqueFlag(tempUserDetailDO.getIdCard()); String userId = enterpriseUserDO.getUserId(); AtomicReference totalScore = new AtomicReference<>(0L); + + List assessmentTemplateDOList = assessmentTemplateDAO.listByType(AssessmentTemplateType.STORE_MANAGER.getCode()); + + List templateIdList = assessmentTemplateDOList.stream().map(AssessmentTemplateDO::getId).collect(Collectors.toList()); + + List assessmentDataDOList = assessmentDataDAO.selectList(tempUserDetailDO.getShopId(), userId, templateIdList); request.getList().forEach(item -> { AssessmentDataDO assessmentDataDO = null; totalScore.set(totalScore.get() + item.getScore()); @@ -484,7 +537,8 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { if (assessmentDataDO != null) { assessmentDataDO.setScore(item.getScore()); assessmentDataDO.setComments(item.getComments()); - assessmentDataDAO.updateByPrimaryKeySelective(assessmentDataDO); + assessmentDataDO.setPicture(item.getPicture()); + assessmentDataDO.setVideo(item.getVideo()); } else { assessmentDataDO = new AssessmentDataDO(); assessmentDataDO.setTemplateId(item.getTemplateId()); @@ -492,9 +546,14 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { assessmentDataDO.setComments(item.getComments()); assessmentDataDO.setScore(item.getScore()); assessmentDataDO.setAssessmentUserId(employeeTrainingDO.getXfsgUserDetailId().toString()); + assessmentDataDO.setPicture(item.getPicture()); + assessmentDataDO.setVideo(item.getVideo()); assessmentDataDAO.insertSelective(assessmentDataDO); } + assessmentDataDOList.add(assessmentDataDO); }); + checkVideoHandel(assessmentDataDOList); + assessmentDataDAO.batchInsertOrUpdate(assessmentDataDOList); employeeTrainingDO.setPracticalAssessmentUserId(userId); employeeTrainingDO.setPracticalExamScore(totalScore.get().intValue()); @@ -513,4 +572,47 @@ public class EmployeeTrainingServiceImpl implements EmployeeTrainingService { } employeeTrainingDAO.updateByPrimaryKeySelective(employeeTrainingDO); } + + private void checkVideoHandel(List assessmentDataDOList) { + if (CollectionUtils.isEmpty(assessmentDataDOList)) { + return; + } + for (AssessmentDataDO assessmentDataDO : assessmentDataDOList) { + SmallVideoInfoDTO smallVideoInfo = JSONObject.parseObject(assessmentDataDO.getVideo(), SmallVideoInfoDTO.class); + if (smallVideoInfo != null && CollectionUtils.isNotEmpty(smallVideoInfo.getVideoList())) { + String callbackCache; + SmallVideoDTO smallVideoCache; + SmallVideoParam smallVideoParam; + for (SmallVideoDTO smallVideo : smallVideoInfo.getVideoList()) { + //如果转码完成 + if (smallVideo.getStatus() != null && smallVideo.getStatus() >= ResourceStatusEnum.TRANSCODE_FINISH.getValue()) { + continue; + } + callbackCache = redisUtilPool.getString(RedisConstant.VIDEO_CALLBACK_CACHE + smallVideo.getVideoId()); + if (StringUtils.isNotBlank(callbackCache)) { + smallVideoCache = JSONObject.parseObject(callbackCache, SmallVideoDTO.class); + if (smallVideoCache != null && smallVideoCache.getStatus() != null && smallVideoCache.getStatus() >= 3) { + BeanUtils.copyProperties(smallVideoCache, smallVideo); + } else { + smallVideoParam = new SmallVideoParam(); + setNotCompleteCache(smallVideoParam, smallVideo, assessmentDataDO.getId()); + } + } else { + smallVideoParam = new SmallVideoParam(); + setNotCompleteCache(smallVideoParam, smallVideo, assessmentDataDO.getId()); + } + } + assessmentDataDO.setVideo(JSONObject.toJSONString(smallVideoInfo)); + } + } + } + + public void setNotCompleteCache(SmallVideoParam smallVideoParam, SmallVideoDTO smallVideo, Long businessId) { + smallVideoParam.setVideoId(smallVideo.getVideoId()); + smallVideoParam.setUploadType(UploadTypeEnum.ASSESSMENT_DATA_CONTENT.getValue()); + smallVideoParam.setBusinessId(businessId); + smallVideoParam.setUploadTime(new Date()); + //存入未转码完成的map,vod回调的时候使用 + redisUtilPool.hashSet(RedisConstant.VIDEO_NOT_COMPLETE_CACHE, smallVideo.getVideoId(), JSONObject.toJSONString(smallVideoParam)); + } } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/XfsgEhrServiceImpl.java b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/XfsgEhrServiceImpl.java index 636067cf3..16235cef2 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/service/impl/XfsgEhrServiceImpl.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/service/impl/XfsgEhrServiceImpl.java @@ -2,6 +2,7 @@ package com.cool.store.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.cool.store.dto.StaffExamInfoDTO; import com.cool.store.dto.ehr.FranchiseeInfoDTO; import com.cool.store.dto.ehr.StaffBaseInfoDTO; import com.cool.store.mq.util.HttpRestTemplateService; @@ -18,6 +19,7 @@ import java.util.Map; /** * describe: 鲜丰水果api + * * @author wxp * @date 2024/04/28 */ @@ -80,4 +82,29 @@ public class XfsgEhrServiceImpl implements XfsgEhrService { requestMap.put("signature", signature); } + @Override + public StaffExamInfoDTO getUserExamInfo(String staffNumber) { + Map requestMap = new HashMap<>(); + fillSignatureInfo(requestMap); + requestMap.put("staffNumber", staffNumber); + String url = xfsgUrl + Constants.GET_USER_EXAM_INFO; + try { + JSONObject result = httpRestTemplateService.getForObject(url, JSONObject.class, requestMap); + Integer code = result.getInteger("code"); + if (code != 0) { + log.info("xfsg#getUserExamInfo,staffNumber:{},请求失败", staffNumber); + return null; + } + JSONObject data = result.getJSONObject("data"); + if (data == null) { + log.info("xfsg#getUserExamInfo,staffNumber:{},返回值data为空", staffNumber); + return null; + } + return JSON.parseObject(data.toJSONString(), StaffExamInfoDTO.class); + } catch (Exception e) { + log.info("xfsg#getUserExamInfo,staffNumber:{},Exception:", staffNumber, e); + } + return null; + } + } diff --git a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java index 722998776..61a655bb7 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/utils/poi/constant/Constants.java @@ -185,6 +185,9 @@ public class Constants // 加盟商信息数据接口 public static final String GET_FRANCHISEE_INFO_BY_CODE = "/api/kdz/franchisee/get-info"; + // 员工云学堂考核结果 + public static final String GET_USER_EXAM_INFO = "/api/kdz/get-user-exam-info"; + public static final Integer ZERO_INTEGER = 0;