diff --git a/web-adapter/src/main/java/com/zcloud/edu/facade/ZcloudEduWorkFacadeImpl.java b/web-adapter/src/main/java/com/zcloud/edu/facade/ZcloudEduWorkFacadeImpl.java new file mode 100644 index 0000000..61b5853 --- /dev/null +++ b/web-adapter/src/main/java/com/zcloud/edu/facade/ZcloudEduWorkFacadeImpl.java @@ -0,0 +1,32 @@ +package com.zcloud.edu.facade; + +import com.alibaba.cola.dto.MultiResponse; +import com.alibaba.cola.dto.SingleResponse; +import com.zcloud.edu.command.query.resource.EduWorkQueryExe; +import com.zcloud.edu.command.resource.EduWorkChangeExe; +import com.zcloud.gbscommon.zcloudedu.facade.ZcloudEduWorkFacade; +import com.zcloud.gbscommon.zcloudedu.request.EduWorkChangeCmd; +import com.zcloud.gbscommon.zcloudedu.request.EduWorkQry; +import com.zcloud.gbscommon.zcloudedu.response.EduListByUserCO; +import org.apache.dubbo.config.annotation.DubboService; + +import javax.annotation.Resource; + +@DubboService +public class ZcloudEduWorkFacadeImpl implements ZcloudEduWorkFacade { + @Resource + private EduWorkQueryExe eduWorkQueryExe; + @Resource + private EduWorkChangeExe eduWorkChangeExe; + + @Override + public MultiResponse listManagerByUserId(EduWorkQry eduWorkQry) { + return MultiResponse.of(eduWorkQueryExe.execute(eduWorkQry)); + } + + @Override + public SingleResponse updateWorkChange(EduWorkChangeCmd eduWorkChangeCmd) { + eduWorkChangeExe.execute(eduWorkChangeCmd); + return SingleResponse.buildSuccess(); + } +} diff --git a/web-app/src/main/java/com/zcloud/edu/command/query/resource/EduWorkQueryExe.java b/web-app/src/main/java/com/zcloud/edu/command/query/resource/EduWorkQueryExe.java new file mode 100644 index 0000000..29b0e0f --- /dev/null +++ b/web-app/src/main/java/com/zcloud/edu/command/query/resource/EduWorkQueryExe.java @@ -0,0 +1,53 @@ +package com.zcloud.edu.command.query.resource; + +import com.zcloud.edu.persistence.dataobject.TeacherDO; +import com.zcloud.edu.persistence.repository.resource.TeacherRepository; +import com.zcloud.gbscommon.zcloudedu.request.EduWorkQry; +import com.zcloud.gbscommon.zcloudedu.response.EduListByUserCO; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; + +/** + * web-app + */ +@Component +@AllArgsConstructor +public class EduWorkQueryExe { + + private static final String WORK_PROJECT = "线下培训"; + private static final String DEFAULT_WORK_CONTENT = "教师信息"; + + private final TeacherRepository teacherRepository; + + public List execute(EduWorkQry qry) { + if (qry == null || qry.getUserId() == null || qry.getCorpinfoId() == null) { + return Collections.emptyList(); + } + List teacherDOList = teacherRepository.listWorkByUserId(qry.getUserId(), qry.getCorpinfoId()); + if (CollectionUtils.isEmpty(teacherDOList)) { + return Collections.emptyList(); + } + return teacherDOList.stream().map(this::buildWorkInfo).collect(Collectors.toList()); + } + + private EduListByUserCO buildWorkInfo(TeacherDO teacherDO) { + EduListByUserCO eduListByUserCO = new EduListByUserCO(); + eduListByUserCO.setWorkId(teacherDO.getTeacherId()); + eduListByUserCO.setWorkProject(WORK_PROJECT); + eduListByUserCO.setWorkContent(buildWorkContent(teacherDO)); + return eduListByUserCO; + } + + private String buildWorkContent(TeacherDO teacherDO) { + if (teacherDO == null || !StringUtils.hasText(teacherDO.getTeacherName())) { + return DEFAULT_WORK_CONTENT; + } + return "教师:" + teacherDO.getTeacherName(); + } +} diff --git a/web-app/src/main/java/com/zcloud/edu/command/resource/EduWorkChangeExe.java b/web-app/src/main/java/com/zcloud/edu/command/resource/EduWorkChangeExe.java new file mode 100644 index 0000000..8e38b5f --- /dev/null +++ b/web-app/src/main/java/com/zcloud/edu/command/resource/EduWorkChangeExe.java @@ -0,0 +1,74 @@ +package com.zcloud.edu.command.resource; + +import com.alibaba.cola.exception.BizException; +import com.zcloud.edu.persistence.dataobject.TeacherDO; +import com.zcloud.edu.persistence.repository.resource.TeacherCertificateRepository; +import com.zcloud.edu.persistence.repository.resource.TeacherRepository; +import com.zcloud.gbscommon.zcloudedu.request.EduWorkChangeCmd; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; + +/** + * web-app + */ +@Component +@AllArgsConstructor +@Slf4j +public class EduWorkChangeExe { + + private final TeacherRepository teacherRepository; + private final TeacherCertificateRepository teacherCertificateRepository; + + @Transactional(rollbackFor = Exception.class) + public void execute(EduWorkChangeCmd cmd) { + validate(cmd); + TeacherDO teacherDO = teacherRepository.getByTeacherId(cmd.getWorkId()); + if (teacherDO == null) { + log.info("未查询到可交接的教师工作,{}",cmd.getWorkId()); + return; + } + if (cmd.getUserId().equals(teacherDO.getUserId())) { + log.info("当前用户已接收该教师工作,{}",cmd.getWorkId()); + return; + } + if (!cmd.getOldUserId().equals(teacherDO.getUserId())) { + log.info("当前教师工作责任人已变更,无法重复交接,{}",cmd.getWorkId()); + return; + } + + Long targetCorpinfoId = cmd.getCorpId() != null ? cmd.getCorpId() : teacherDO.getCorpinfoId(); + Long duplicateCount = teacherRepository.countDuplicateWorkUser(teacherDO.getTeacherId(), cmd.getUserId(), targetCorpinfoId); + if (duplicateCount != null && duplicateCount > 0) { + throw new BizException("接收人已存在教师工作,不能重复交接"); + } + + teacherDO.setUserId(cmd.getUserId()); + teacherDO.setCorpinfoId(targetCorpinfoId); + boolean updateResult = teacherRepository.updateById(teacherDO); + if (!updateResult) { + throw new BizException("工作交接失败"); + } + teacherCertificateRepository.removeByTeacherId(teacherDO.getTeacherId()); + } + + private void validate(EduWorkChangeCmd cmd) { + if (cmd == null) { + throw new BizException("交接参数不能为空"); + } + if (!StringUtils.hasText(cmd.getWorkId())) { + throw new BizException("工作标识不能为空"); + } + if (cmd.getOldUserId() == null) { + throw new BizException("原处理人不能为空"); + } + if (cmd.getUserId() == null) { + throw new BizException("接收人不能为空"); + } + if (cmd.getOldUserId().equals(cmd.getUserId())) { + throw new BizException("原处理人和接收人不能相同"); + } + } +} diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/resource/TeacherRepositoryImpl.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/resource/TeacherRepositoryImpl.java index 14c0141..f25f32f 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/resource/TeacherRepositoryImpl.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/impl/resource/TeacherRepositoryImpl.java @@ -14,6 +14,7 @@ import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.Map; import java.util.List; @@ -71,5 +72,31 @@ public class TeacherRepositoryImpl extends BaseRepositoryImpl listWorkByUserId(Long userId, Long corpinfoId) { + Map params = new HashMap<>(4); + params.put("userId", userId); + params.put("corpinfoId", corpinfoId); + return teacherMapper.getTeacherList(params); + } + + @Override + public TeacherDO getByTeacherId(String teacherId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("teacher_id", teacherId); + queryWrapper.eq("delete_enum", "FALSE"); + return getOne(queryWrapper); + } + + @Override + public Long countDuplicateWorkUser(String teacherId, Long userId, Long corpinfoId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("user_id", userId); + queryWrapper.eq("corpinfo_id", corpinfoId); + queryWrapper.eq("delete_enum", "FALSE"); + queryWrapper.ne("teacher_id", teacherId); + return count(queryWrapper); + } } diff --git a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/resource/TeacherRepository.java b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/resource/TeacherRepository.java index 97270a4..54dd47e 100644 --- a/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/resource/TeacherRepository.java +++ b/web-infrastructure/src/main/java/com/zcloud/edu/persistence/repository/resource/TeacherRepository.java @@ -27,5 +27,11 @@ public interface TeacherRepository extends BaseRepository { TeacherDO getTeacherInfoByUserId(Long userId); List getListByUserIdList(List userIdList); + + List listWorkByUserId(Long userId, Long corpinfoId); + + TeacherDO getByTeacherId(String teacherId); + + Long countDuplicateWorkUser(String teacherId, Long userId, Long corpinfoId); } diff --git a/web-infrastructure/src/main/resources/mapper/TeacherMapper.xml b/web-infrastructure/src/main/resources/mapper/TeacherMapper.xml index 0bb5a12..a80c925 100644 --- a/web-infrastructure/src/main/resources/mapper/TeacherMapper.xml +++ b/web-infrastructure/src/main/resources/mapper/TeacherMapper.xml @@ -43,6 +43,9 @@ AND a.corpinfo_id = #{params.corpinfoId} + + AND a.user_id = #{params.userId} + AND a.state = #{params.state}