Quellcode durchsuchen

Merge remote-tracking branch 'origin/dev' into dev

dzx vor 1 Jahr
Ursprung
Commit
d0d8c48b5b

+ 24 - 16
src/main/java/com/xjrsoft/module/organization/controller/UserController.java

@@ -30,6 +30,7 @@ import com.xjrsoft.module.organization.service.*;
 import com.xjrsoft.module.organization.utils.OrganizationUtil;
 import com.xjrsoft.module.organization.vo.*;
 import com.xjrsoft.module.oss.factory.OssFactory;
+import com.xjrsoft.module.workflow.service.IWorkflowExecuteService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -79,6 +80,7 @@ public class UserController {
 
     private final IUserStudentService userStudentService;
     private final IBaseClassService baseClassService;
+    private final IWorkflowExecuteService workflowExecuteService;
 
 
     @GetMapping(value = "/list")
@@ -99,22 +101,22 @@ public class UserController {
     @ApiOperation(value = "用户列表(分页)")
     public R page(UserPageDto dto) {
         List<Long> deptIds = new ArrayList<>();
-        if (ObjectUtil.isNotNull(dto.getDepartmentId())){
-            List<Department> list = redisUtil.get(GlobalConstant.DEP_CACHE_KEY,new TypeReference<List<Department>>() {
+        if (ObjectUtil.isNotNull(dto.getDepartmentId())) {
+            List<Department> list = redisUtil.get(GlobalConstant.DEP_CACHE_KEY, new TypeReference<List<Department>>() {
             });
             //当前部门的层级
             String hierarchy = list.stream().filter(x -> x.getId().equals(dto.getDepartmentId())).findFirst().orElse(new Department()).getHierarchy();
-            if (StrUtil.isNotBlank(hierarchy)){
+            if (StrUtil.isNotBlank(hierarchy)) {
                 //层级里面包含当前部门层级的就是它的子集,如1-1,下面包含了1-1、1-1-2这种
-                deptIds = list.stream().filter(x -> StrUtil.isNotBlank(x.getHierarchy())&&x.getHierarchy().contains(hierarchy)).map(Department::getId).collect(Collectors.toList());
-            }else {
+                deptIds = list.stream().filter(x -> StrUtil.isNotBlank(x.getHierarchy()) && x.getHierarchy().contains(hierarchy)).map(Department::getId).collect(Collectors.toList());
+            } else {
                 //如果不存在层级就查询自己的数据
                 deptIds.add(dto.getDepartmentId());
             }
         }
 
         //因为多表关联 会有多个表都使用了id字段,  所以必须专门指定主表的Id
-        if (ObjectUtil.isNotNull(dto.getDepartmentId())){//不为空联合查询
+        if (ObjectUtil.isNotNull(dto.getDepartmentId())) {//不为空联合查询
             IPage<UserPageVo> page = userService.selectJoinListPage(ConventPage.getPage(dto), UserPageVo.class,
                     MPJWrappers.<User>lambdaJoin()
                             .disableSubLogicDel()
@@ -137,7 +139,7 @@ public class UserController {
             PageOutput<UserPageVo> pageOutput = ConventPage.getPageOutput(page);
 
             return R.ok(pageOutput);
-        }else {
+        } else {
 //            LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
 //            queryWrapper.like(StrUtil.isNotBlank(dto.getKeyword()), User::getName, dto.getKeyword())
 //                    .or(StrUtil.isNotBlank(dto.getKeyword()), x -> x.like(StrUtil.isNotBlank(dto.getKeyword()), User::getCode, dto.getKeyword()))
@@ -202,7 +204,6 @@ public class UserController {
         return R.ok(userService.update(dto));
     }
 
-
     @GetMapping(value = "/current/info")
     @ApiOperation(value = "当前登录用户信息")
     public R info() {
@@ -265,6 +266,14 @@ public class UserController {
         return R.ok(vo);
     }
 
+    @GetMapping(value = "/pending/count")
+    @ApiOperation(value = "当前待办数量统计")
+    public RT<PendingCountDto> pendingCount() {
+        PendingCountDto pendingCountDto = new PendingCountDto();
+        pendingCountDto.setWfPendingCount(workflowExecuteService.pendingCount());
+
+        return RT.ok(pendingCountDto);
+    }
 
     @PutMapping("/update/info")
     @ApiOperation(value = "登陆人修改自己得用户信息")
@@ -279,7 +288,6 @@ public class UserController {
         return R.ok(userService.updateById(updateUserInfo));
     }
 
-
     @PutMapping("/update/password")
     @ApiOperation(value = "当前登录用户修改本人密码")
     public RT<Boolean> updatePassword(@RequestBody @Valid UpdatePasswordDto dto) {
@@ -381,15 +389,15 @@ public class UserController {
 
     @PostMapping("/bind-unionid")
     @ApiOperation(value = "绑定微信 UnionId")
-    public  R bindUnionId(@RequestBody BindOpenidDto dto) {
-        User user = userService.getOne(Wrappers.<User>query().lambda().select(User::getId, User::getOpenId,User::getUnionId).eq(User::getId, dto.getId()), false);
+    public R bindUnionId(@RequestBody BindOpenidDto dto) {
+        User user = userService.getOne(Wrappers.<User>query().lambda().select(User::getId, User::getOpenId, User::getUnionId).eq(User::getId, dto.getId()), false);
         if (user != null) {
             if (StrUtil.isNotBlank(user.getUnionId())) {
                 return R.error("该用户已经绑定微信!");
             }
 
             long count = userService.count(Wrappers.<User>query().lambda().eq(User::getUnionId, dto.getOpenid()));
-            if(count > 0){
+            if (count > 0) {
                 return R.error("该用户已经绑定微信!");
             }
 
@@ -398,9 +406,9 @@ public class UserController {
 //            updateUser.setOpenId(dto.getOpenid());
             updateUser.setUnionId(dto.getOpenid());
             return R.ok(userService.updateById(updateUser));
-        }else{
+        } else {
             long count = userService.count(Wrappers.<User>query().lambda().eq(User::getOpenId, dto.getOpenid()));
-            if(count > 0){
+            if (count > 0) {
                 return R.error("该用户已经绑定微信!");
             }
         }
@@ -409,13 +417,13 @@ public class UserController {
 
     @PostMapping("/bind-openid")
     @ApiOperation(value = "绑定微信 Openid")
-    public  R bindOpenid(@RequestBody BindOpenidDto dto) {
+    public R bindOpenid(@RequestBody BindOpenidDto dto) {
         return R.ok(userService.bindOpenid(dto));
     }
 
     @GetMapping("/unbind-openid")
     @ApiOperation(value = "取消绑定微信 UnionId")
-    public  R unbindOpenid(@RequestParam Long id) {
+    public R unbindOpenid(@RequestParam Long id) {
         return R.ok(userService.unbindOpenid(id));
     }
 

+ 16 - 0
src/main/java/com/xjrsoft/module/organization/vo/PendingCountDto.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.organization.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class PendingCountDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 流程待办数量
+     */
+    private long wfPendingCount;
+}

+ 9 - 8
src/main/java/com/xjrsoft/module/textbook/controller/TextbookIssueRecordController.java

@@ -19,17 +19,11 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.io.ByteArrayOutputStream;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -101,6 +95,13 @@ public class TextbookIssueRecordController {
     @ApiOperation(value = "导出")
     public ResponseEntity<byte[]> exportData(@Valid TextbookIssueRecordPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
         List<TextbookIssueRecordPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<TextbookIssueRecordPageVo>) page(dto).getData()).getList();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
+        for (TextbookIssueRecordPageVo textbookIssueRecordPageVo : customerList) {
+            if(textbookIssueRecordPageVo.getCreateDate() == null){
+                continue;
+            }
+            textbookIssueRecordPageVo.setCreateDateStr(sdf.format(textbookIssueRecordPageVo.getCreateDate()));
+        }
         ByteArrayOutputStream bot = new ByteArrayOutputStream();
         EasyExcel.write(bot, TextbookIssueRecordPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
 

+ 1 - 14
src/main/java/com/xjrsoft/module/textbook/mapper/TextbookMapper.java

@@ -2,16 +2,10 @@ package com.xjrsoft.module.textbook.mapper;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseMapper;
-import com.xjrsoft.module.textbook.vo.TextbookPageVo;
-import com.xjrsoft.module.textbook.vo.TextbookSubscriptionRecordVo;
-import com.xjrsoft.module.textbook.vo.TextbookVo;
-import com.xjrsoft.module.textbook.vo.WfTextbookClaimListVo;
 import com.xjrsoft.module.textbook.dto.TextbookPageDto;
 import com.xjrsoft.module.textbook.entity.Textbook;
 import com.xjrsoft.module.textbook.entity.TextbookClassRelation;
-import com.xjrsoft.module.textbook.vo.TextbookWarehouseRecordListVo;
-import com.xjrsoft.module.textbook.vo.TextbookIssueRecordListVo;
-import com.xjrsoft.module.textbook.vo.TextbookSubscriptionClassVo;
+import com.xjrsoft.module.textbook.vo.*;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -81,11 +75,4 @@ public interface TextbookMapper extends MPJBaseMapper<Textbook> {
      */
     List<TextbookIssueRecordListVo> issueList(Long id);
 
-    /**
-     * 领取记录
-     * @param id
-     * @return
-     */
-    List<WfTextbookClaimListVo> claimList(Long id);
-
 }

+ 50 - 7
src/main/java/com/xjrsoft/module/textbook/service/impl/TextbookServiceImpl.java

@@ -8,19 +8,20 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.ExerciseBookeTypeEnum;
 import com.xjrsoft.common.enums.SubscriptionTypeEnum;
 import com.xjrsoft.common.enums.TextbookTypeEnum;
 import com.xjrsoft.common.enums.WarehouseModeEnum;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.service.IBaseClassService;
+import com.xjrsoft.module.teacher.entity.XjrUser;
 import com.xjrsoft.module.textbook.dto.AddTextbookWarehouseRecordDto;
 import com.xjrsoft.module.textbook.dto.TextbookPageDto;
 import com.xjrsoft.module.textbook.entity.*;
-import com.xjrsoft.module.textbook.mapper.TextbookClassRelationMapper;
-import com.xjrsoft.module.textbook.mapper.TextbookMapper;
-import com.xjrsoft.module.textbook.mapper.TextbookSubscriptionRecordMapper;
+import com.xjrsoft.module.textbook.mapper.*;
 import com.xjrsoft.module.textbook.service.ITextbookService;
 import com.xjrsoft.module.textbook.service.ITextbookWarehouseRecordService;
 import com.xjrsoft.module.textbook.service.IWfExerciseBookService;
@@ -59,6 +60,10 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
 
     private final ITextbookWarehouseRecordService textbookClassWarehouseService;
 
+    private final TextbookIssueRecordMapper textbookIssueRecordMapper;
+
+    private final TextbookStudentClaimMapper textbookStudentClaimMapper;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -476,11 +481,49 @@ public class TextbookServiceImpl extends MPJBaseServiceImpl<TextbookMapper, Text
 
     @Override
     public List<WfTextbookClaimListVo> claimList(Long id) {
-        List<WfTextbookClaimListVo> result = textbookTextbookMapper.claimList(id);
-        if (!result.isEmpty()) {
-            return result;
+        List<WfTextbookClaimListVo> result = new ArrayList<>();
+        //教材领取分为两种
+        //教师领取
+        MPJLambdaWrapper<TextbookIssueRecord> queryIssueRecord = new MPJLambdaWrapper<>();
+        queryIssueRecord
+                .eq(TextbookIssueRecord::getTextbookId, id)
+                .eq(TextbookIssueRecord::getIssueMode, "im_teacher");
+        List<TextbookIssueRecord> textbookIssueRecordList =  textbookIssueRecordMapper.selectJoinList(TextbookIssueRecord.class, queryIssueRecord);
+        for(TextbookIssueRecord t : textbookIssueRecordList){
+            MPJLambdaWrapper<TextbookIssueRecord> queryTeaClaimVo = new MPJLambdaWrapper<>();
+            queryTeaClaimVo
+                    .selectAs(BaseSemester::getName, WfTextbookClaimListVo::getSemesterName)
+                    .selectAs(XjrUser::getName, WfTextbookClaimListVo::getName)
+                    .selectAs(XjrUser::getUserName, WfTextbookClaimListVo::getUserName)
+                    .selectAs(TextbookIssueRecord::getCreateDate, WfTextbookClaimListVo::getClaimDate)
+                    .leftJoin(XjrUser.class, XjrUser::getId, TextbookIssueRecord::getReceiveUserId)
+                    .leftJoin(WfTextbookClaim.class, WfTextbookClaim::getId, TextbookIssueRecord::getDataId)
+                    .leftJoin(BaseSemester.class, BaseSemester::getId, WfTextbookClaim::getBaseSemesterId)
+                    .eq(TextbookIssueRecord::getId, t.getId());
+            WfTextbookClaimListVo wfTextbookClaimListVo =  textbookIssueRecordMapper.selectJoinOne(WfTextbookClaimListVo.class, queryTeaClaimVo);
+            for (int j = 0; j < t.getIssueNumber(); j++){
+                wfTextbookClaimListVo.setClaimIdentity("教师");
+                wfTextbookClaimListVo.setClassName("/");
+                result.add(wfTextbookClaimListVo);
+            }
         }
-        return new ArrayList<>();
+        //学生领取
+        MPJLambdaWrapper<TextbookStudentClaim> queryStuClaimVo = new MPJLambdaWrapper<>();
+        queryStuClaimVo
+                .select("'学生' as claimIdentity")
+                .selectAs(BaseClass::getName, WfTextbookClaimListVo::getClassName)
+                .selectAs(BaseSemester::getName, WfTextbookClaimListVo::getSemesterName)
+                .selectAs(XjrUser::getName, WfTextbookClaimListVo::getName)
+                .selectAs(XjrUser::getUserName, WfTextbookClaimListVo::getUserName)
+                .selectAs(TextbookStudentClaim::getCreateDate, WfTextbookClaimListVo::getClaimDate)
+                .leftJoin(XjrUser.class, XjrUser::getId, TextbookStudentClaim::getStudentUserId)
+                .leftJoin(BaseSemester.class, BaseSemester::getId, TextbookStudentClaim::getBaseSemesterId)
+                .leftJoin(BaseClass.class, BaseClass::getId, TextbookStudentClaim::getClassId)
+                .eq(TextbookStudentClaim::getTextbookId, id);
+        List<WfTextbookClaimListVo> wfTextbookClaimListVoList = textbookStudentClaimMapper.selectJoinList(WfTextbookClaimListVo.class, queryStuClaimVo);
+
+        result.addAll(wfTextbookClaimListVoList);
+        return result;
     }
 
     @Override

+ 7 - 8
src/main/java/com/xjrsoft/module/textbook/vo/TextbookIssueRecordPageVo.java

@@ -1,17 +1,11 @@
 package com.xjrsoft.module.textbook.vo;
 
-import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ContentStyle;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import com.xjrsoft.common.annotation.Trans;
-import com.xjrsoft.common.enums.TransType;
-import java.time.LocalTime;
-import java.time.LocalDateTime;
-import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -93,10 +87,15 @@ public class TextbookIssueRecordPageVo {
     private String issueModeCn;
 
     @ContentStyle(dataFormat = 49)
-    @ExcelProperty("出库时间")
+    @ExcelIgnore
     @ApiModelProperty("出库时间")
     private Date createDate;
 
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("出库时间")
+    @ApiModelProperty("出库时间")
+    private String createDateStr;
+
     @ContentStyle(dataFormat = 49)
     @ExcelProperty("领取人员")
     @ApiModelProperty("领取人员")

+ 6 - 0
src/main/java/com/xjrsoft/module/workflow/service/IWorkflowExecuteService.java

@@ -137,6 +137,12 @@ public interface IWorkflowExecuteService {
      */
     List<LaunchAndApproveVo> reLaunch(ReLaunchDto dto);
 
+    /**
+     * 当前人员待办数量
+     * @return
+     */
+    long pendingCount();
+
 
     /**
      * 当前人员待处理

+ 14 - 0
src/main/java/com/xjrsoft/module/workflow/service/impl/WorkflowExecuteServiceImpl.java

@@ -1426,6 +1426,20 @@ public class WorkflowExecuteServiceImpl implements IWorkflowExecuteService {
         }
     }
 
+    @Override
+    public long pendingCount() {
+
+        SaSession tokenSession = StpUtil.getTokenSession();
+        User user = tokenSession.get(GlobalConstant.LOGIN_USER_INFO_KEY, new User());
+
+        TaskQuery taskQuery = taskService.createTaskQuery()
+                .active()
+                .taskVariableValueEquals(WorkflowConstant.TASK_IS_APPOINT_APPROVE, YesOrNoEnum.NO.getCode())
+                .processVariableValueEquals(WorkflowConstant.PROCESS_ISRECYCLE_FLAG_KEY, WorkflowIsRecycleType.NO.getCode())
+                .taskVariableValueLike(WorkflowConstant.TASK_ASSIGNEE_VAR_KEY, StringPool.PERCENT + user.getId() + StringPool.PERCENT);
+        return taskQuery.count();
+    }
+
     @Override
     public PageOutput<PendingTaskVo> pending(PendingTaskPageDto dto) {
 

+ 0 - 20
src/main/resources/mapper/textbook/TextbookMapper.xml

@@ -139,26 +139,6 @@
           AND t3.textbook_id = #{id}
         ORDER BY t1.sort_code;
     </select>
-    <select id="claimList" resultType="com.xjrsoft.module.textbook.vo.WfTextbookClaimListVo">
-        SELECT t2.name AS semester_name,
-               t5.name AS claim_identity,
-               t3.name AS class_name,
-               t5.name,
-               t5.user_name,
-               t4.create_date
-        FROM wf_textbook_claim t1
-                 LEFT JOIN base_semester t2 ON t1.base_semester_id = t2.id
-                 LEFT JOIN base_class t3 ON t1.class_id = t3.id
-                 LEFT JOIN textbook_issue_record t4 ON t4.data_id = t1.id
-                 LEFT JOIN xjr_user t5 ON t4.receive_user_id = t5.id
-                 LEFT JOIN xjr_user_role_relation t6 ON t5.id = t6.user_id
-                 LEFT JOIN xjr_role t7 ON t6.role_id = t7.id
-                 LEFT JOIN wf_textbook_claim_item t8 ON t8.wf_textbook_claim_id = t1.id
-        where t1.delete_mark = 0
-          and t8.delete_mark = 0
-          and t8.textbook_id = #{id}
-          and t1.status = 1
-    </select>
     <select id="getClassRelation" resultType="com.xjrsoft.module.textbook.entity.TextbookClassRelation">
         SELECT *
         FROM textbook_class_relation