| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450 |
- package com.zd.security.controller;
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.zd.common.core.annotation.Log;
- import com.zd.common.core.annotation.PreAuthorize;
- import com.zd.common.core.log.BusinessType;
- import com.zd.common.core.utils.FileConfigUtils;
- import com.zd.common.core.utils.SecurityUtils;
- import com.zd.common.core.utils.StringUtils;
- import com.zd.common.core.web.controller.AbstractController;
- import com.zd.laboratory.api.entity.LabSubjectEntity;
- import com.zd.laboratory.api.feign.RemoteSubQueryService;
- import com.zd.model.domain.R;
- import com.zd.model.domain.ResultData;
- import com.zd.model.domain.per.PerFun;
- import com.zd.model.domain.per.PerPrefix;
- import com.zd.security.api.bo.CheckClapBo;
- import com.zd.security.api.dto.UploadDto;
- import com.zd.security.api.vo.CheckClapVo;
- import com.zd.security.entity.CheckClap;
- import com.zd.security.entity.CheckStaffUser;
- import com.zd.security.entity.Upload;
- import com.zd.security.scope.DataPermission;
- import com.zd.security.scope.DataPermissionAspect;
- import com.zd.security.service.CheckClapService;
- import com.zd.security.service.CheckStaffUserService;
- import com.zd.security.service.UploadService;
- import com.zd.system.api.feign.RemoteUserService;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.*;
- import java.text.SimpleDateFormat;
- import java.time.LocalDateTime;
- import java.time.ZoneOffset;
- import java.time.temporal.ChronoField;
- import java.util.*;
- import java.util.concurrent.locks.Lock;
- import java.util.concurrent.locks.ReentrantLock;
- import java.util.function.Function;
- import java.util.function.Predicate;
- import java.util.stream.Collectors;
- /**
- * <p>
- * 随手拍 前端控制器
- * </p>
- *
- * @author cyl
- * @since 2023-04-19
- */
- @RestController
- @RequestMapping("/checkClap")
- public class CheckClapController extends AbstractController {
- @Autowired
- private CheckClapService checkClapService;
- @Autowired
- private RemoteUserService remoteUserService;
- @Autowired
- private RemoteSubQueryService remoteSubQueryService;
- @Autowired
- private UploadService uploadService;
- @Autowired
- private FileConfigUtils fileConfigUtils;
- @Autowired
- private CheckStaffUserService checkStaffUserService;
- /**
- * 获取随手拍数据列表list
- * @param checkClapBo
- * @return
- */
- // @DataPermission(tableAlias = "", permissionStr = PerPrefix.SECURITY_CLAP)
- @DataPermission(roleKey="rectifyGentle")
- @PreAuthorize(hasPermi = PerPrefix.SECURITY_CLAP + PerFun.LIST)
- @GetMapping(value = "/list")
- public ResultData list(CheckClapBo checkClapBo) {
- //参数检查
- List<Long> userList = DataPermissionAspect.threadLocal.get(); // 获取数据
- checkClapBo.setUserList(userList);
- DataPermissionAspect.threadLocal.remove();
- Page <CheckClapVo> page = checkClapService.selCheckClapList(checkClapBo);
- return ResultData.success(page);
- }
- /**
- * 获取随手拍数据列表list (小程序接口)
- * @param checkClapBo
- * @return
- */
- @DataPermission(roleKey="rectifyGentle")
- @GetMapping(value = "/appList")
- public ResultData appList(CheckClapBo checkClapBo) {
- //参数检查
- List<Long> userList = DataPermissionAspect.threadLocal.get(); // 获取数据
- checkClapBo.setUserList(userList);
- DataPermissionAspect.threadLocal.remove();
- checkClapBo.setMyRelated(1);
- Page <CheckClapVo> page = checkClapService.selCheckClapList(checkClapBo);
- Optional.ofNullable(page.getRecords()).orElseGet(Collections::emptyList)
- .stream()
- .forEach(a->{
- timeProcessing(a);
- });
- return ResultData.success(page);
- }
- public void timeProcessing(CheckClapVo a){
- long nowTime = new Date().getTime()-1800000;
- long timestamp = a.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
- if(nowTime<=timestamp){
- a.setTimeFlag("刚刚");
- }else{
- a.setTimeFlag(a.getCreateTime().get(ChronoField.HOUR_OF_DAY)+":"+a.getCreateTime().get(ChronoField.MINUTE_OF_HOUR));
- long nowTime3 = new Date().getTime()-86400000;
- long timestamp3 = a.getCreateTime().toInstant(ZoneOffset.of("+8")).toEpochMilli();
- if(nowTime3>=timestamp3){
- //获取本条数据的年月日时间
- String month3 = (a.getCreateTime().get(ChronoField.MONTH_OF_YEAR)+"").length()==1?"0"+a.getCreateTime().get(ChronoField.MONTH_OF_YEAR):a.getCreateTime().get(ChronoField.MONTH_OF_YEAR)+"";
- a.setTimeFlag(a.getCreateTime().get(ChronoField.YEAR)+"-"+month3+"-"+a.getCreateTime().get(ChronoField.DAY_OF_MONTH));
- }
- //昨天的时间计算
- recentTime(a,-1);
- //前天的时间计算
- recentTime(a,-2);
- }
- }
- public void recentTime(CheckClapVo a,Integer time){
- //time 是-1 就减一天,如果是-2就减两天
- //昨天的时间计算
- SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");//设置格式
- Calendar calendar1 = Calendar.getInstance(); //创建Calendar 的实例
- calendar1.add(Calendar.DAY_OF_MONTH, time); //当前时间减去一天,即一天前的时间
- String nowTime1 = simpleDateFormat1.format(calendar1.getTime());
- //获取本条数据的年月日时间
- String month1 = (a.getCreateTime().get(ChronoField.MONTH_OF_YEAR)+"").length()==1?"0"+a.getCreateTime().get(ChronoField.MONTH_OF_YEAR):a.getCreateTime().get(ChronoField.MONTH_OF_YEAR)+"";
- String timestamp1 = a.getCreateTime().get(ChronoField.YEAR)+"-"+month1+"-"+a.getCreateTime().get(ChronoField.DAY_OF_MONTH);
- if(nowTime1.equals(timestamp1)){
- if(time.intValue()==-1){
- a.setTimeFlag("昨天");
- }
- if(time.intValue()==-2){
- a.setTimeFlag("前天");
- }
- }
- }
- /**
- * 获取随手拍上报记录数据列表list
- * @param checkClapBo
- * @return
- */
- @GetMapping(value = "/mylist")
- public ResultData mylist(CheckClapBo checkClapBo) {
- //查询条件
- QueryWrapper<CheckClap> wrapperClap = new QueryWrapper <>();
- //整改状态
- if(StringUtils.isNotNull(checkClapBo.getRectifyStatus())){
- wrapperClap.lambda().eq(CheckClap::getRectifyStatus,checkClapBo.getRectifyStatus());
- }
- if(StringUtils.isNotNull(checkClapBo.getSearchValue())){
- wrapperClap.lambda().and(wrapper->wrapper.like(CheckClap::getSubName,checkClapBo.getSearchValue())
- .or().like(CheckClap::getRoomNum,checkClapBo.getSearchValue()).or().like(CheckClap::getCreateName,checkClapBo.getSearchValue()));
- }
- if(StringUtils.isNotNull(checkClapBo.getDeptId())){
- wrapperClap.lambda().eq(CheckClap::getDeptId,checkClapBo.getDeptId());
- }
- wrapperClap.ge(StringUtils.isNotEmpty(checkClapBo.getBeginTime()),"create_time",checkClapBo.getBeginTime())
- .le(StringUtils.isNotEmpty(checkClapBo.getEndTime()),"create_time",checkClapBo.getEndTime());
- //过滤物理删除数据及倒叙
- if(StringUtils.isNotNull(checkClapBo.getUpTimeOrder()) && 1==checkClapBo.getUpTimeOrder().intValue()){
- wrapperClap.lambda().orderByAsc(CheckClap::getCreateTime);
- }else if(StringUtils.isNotNull(checkClapBo.getUpTimeOrder()) && 2==checkClapBo.getUpTimeOrder().intValue()){
- wrapperClap.lambda().orderByDesc(CheckClap::getCreateTime);
- }else if(StringUtils.isNotNull(checkClapBo.getZgTimeOrder()) && 1==checkClapBo.getZgTimeOrder().intValue()){
- wrapperClap.lambda().orderByAsc(CheckClap::getRectifyTime);
- }else if(StringUtils.isNotNull(checkClapBo.getZgTimeOrder()) && 2==checkClapBo.getZgTimeOrder().intValue()){
- wrapperClap.lambda().orderByDesc(CheckClap::getRectifyTime);
- }else{
- wrapperClap.lambda().orderByDesc(CheckClap::getId);
- }
- wrapperClap.lambda().eq(CheckClap::getIsDeleted, Boolean.FALSE).eq(CheckClap::getCreateBy,SecurityUtils.getUserId());
- Page <CheckClap> page = checkClapService.page(new Page<>(checkClapBo.getPageNum(), checkClapBo.getPageSize()), wrapperClap);
- List<CheckClapVo> checkClapVoList = com.zd.common.core.utils.BeanUtils.copyList2List(page.getRecords(), CheckClapVo.class);
- BeanUtils.copyProperties(page.getRecords(),checkClapVoList);
- Page <CheckClapVo> pageVo = new Page <>();
- BeanUtils.copyProperties(page,pageVo);
- pageVo.setRecords(checkClapVoList);
- Optional.ofNullable(pageVo.getRecords()).orElseGet(Collections::emptyList)
- .stream()
- .forEach(a->{
- timeProcessing(a);
- });
- return ResultData.success(pageVo);
- }
- /**
- * 添加数据
- * @param checkClapBo
- * @return
- */
- @PreAuthorize(hasPermi = PerPrefix.SECURITY_CLAP + PerFun.ADD)
- @Log(title = "安全服务-随手拍添加", businessType = BusinessType.INSERT)
- @PostMapping(value = "/add")
- public ResultData add(@RequestBody CheckClapBo checkClapBo) {
- //参数检查
- paramCheck.notNull(checkClapBo)
- .notNull(checkClapBo.getDeptId())
- .notNull(checkClapBo.getSubId())
- .notNull(checkClapBo.getImgDtoList());
- //请求实验室的服务接口,实验室的安全责任人用户id
- List<Long> subIds = new ArrayList <>();
- subIds.add(checkClapBo.getSubId());
- R <List <LabSubjectEntity>> subList = remoteSubQueryService.listByIds(subIds);
- StringBuilder userNames = new StringBuilder();
- Long[] adminInfo = new Long[2];
- if(subList.getCode()==200 && subList.getData().size()>0){
- adminInfo[0] = subList.getData().get(0).getId();
- adminInfo[1] = subList.getData().get(0).getAdminId();
- String[] safeUserIds = subList.getData().get(0).getSafeUserId().split(",");
- for(int i=0;i<safeUserIds.length;i++){
- if(StringUtils.isNotEmpty(safeUserIds[i])){
- ResultData<Map <String,Object>> userInfo = remoteUserService.getUserMapInfoByUserId(Long.parseLong(safeUserIds[i]));
- if(userInfo.getCode()==200){
- userNames.append(",");
- userNames.append(userInfo.getData().get("userName"));
- }
- }
- }
- }
- CheckClap checkClap = new CheckClap();
- BeanUtils.copyProperties(checkClapBo,checkClap);
- checkClap.setRoomNum(subList.getData().get(0).getRoom());
- if(userNames.length()>0){
- checkClap.setSafetyPeople(userNames.substring(1));
- }
- //这里需要先去根据实验室id,查询检查人员配置的整改人员信息,如果有,就是查询回来的这个人整改,如果没有,就默认当前实验室的负责人
- checkClap.setCanRectifyIds(rectUserInfo(adminInfo));
- checkClap.setIsDeleted(Boolean.FALSE);
- checkClap.setCreateName(SecurityUtils.getNickName());
- if(checkClapService.save(checkClap)) {
- //保存成功后,需要调用上传图片的功能
- Optional.ofNullable(checkClapBo.getImgDtoList()).orElseGet(Collections::emptyList)
- .stream()
- .forEach(a->{
- a.setKeyId(checkClap.getId());
- a.setFileType(2);
- a.setSource(4);
- uploadService.addUpload(a);
- });
- return ResultData.success("操作成功");
- }
- return ResultData.fail("操作失败");
- }
- /**
- * 添加数据(小程序接口)
- * @param checkClapBo
- * @return
- */
- @Log(title = "安全服务-随手拍添加", businessType = BusinessType.INSERT)
- @PostMapping(value = "/appAdd")
- public ResultData appAdd(@RequestBody CheckClapBo checkClapBo) {
- //参数检查
- paramCheck.notNull(checkClapBo)
- .notNull(checkClapBo.getDeptId())
- .notNull(checkClapBo.getSubId())
- .notNull(checkClapBo.getImgDtoList());
- //请求实验室的服务接口,实验室的安全责任人用户id
- List<Long> subIds = new ArrayList <>();
- subIds.add(checkClapBo.getSubId());
- R <List <LabSubjectEntity>> subList = remoteSubQueryService.listByIds(subIds);
- StringBuilder userNames = new StringBuilder();
- Long[] adminInfo = new Long[2];
- if(subList.getCode()==200 && subList.getData().size()>0){
- adminInfo[0] = subList.getData().get(0).getId();
- adminInfo[1] = subList.getData().get(0).getAdminId();
- String[] safeUserIds = subList.getData().get(0).getSafeUserId().split(",");
- for(int i=0;i<safeUserIds.length;i++){
- if(StringUtils.isNotEmpty(safeUserIds[i])){
- ResultData<Map <String,Object>> userInfo = remoteUserService.getUserMapInfoByUserId(Long.parseLong(safeUserIds[i]));
- if(userInfo.getCode()==200){
- userNames.append(",");
- userNames.append(userInfo.getData().get("userName"));
- }
- }
- }
- }
- CheckClap checkClap = new CheckClap();
- BeanUtils.copyProperties(checkClapBo,checkClap);
- checkClap.setRoomNum(subList.getData().get(0).getRoom());
- if(userNames.length()>0){
- checkClap.setSafetyPeople(userNames.substring(1));
- }
- //这里需要先去根据实验室id,查询检查人员配置的整改人员信息,如果有,就是查询回来的这个人整改,如果没有,就默认当前实验室的负责人
- checkClap.setCanRectifyIds(rectUserInfo(adminInfo));
- checkClap.setIsDeleted(Boolean.FALSE);
- checkClap.setCreateName(SecurityUtils.getNickName());
- if(checkClapService.save(checkClap)) {
- //保存成功后,需要调用上传图片的功能
- Optional.ofNullable(checkClapBo.getImgDtoList()).orElseGet(Collections::emptyList)
- .stream()
- .forEach(a->{
- a.setKeyId(checkClap.getId());
- a.setFileType(2);
- a.setSource(4);
- uploadService.addUpload(a);
- });
- return ResultData.success("操作成功");
- }
- return ResultData.fail("操作失败");
- }
- public String rectUserInfo(Long[] adminInfo){
- //查询条件
- QueryWrapper <CheckStaffUser> wrapperUser = new QueryWrapper <>();
- //过滤物理删除数据及正序叙
- wrapperUser.lambda().eq(CheckStaffUser::getIsDeleted, Boolean.FALSE).eq(CheckStaffUser::getStaffType,2)
- .eq(CheckStaffUser::getSubId,adminInfo[0]);
- List<CheckStaffUser> userList = checkStaffUserService.list(wrapperUser);
- StringBuilder userIds = new StringBuilder();
- if(userList!=null && !userList.isEmpty()){
- Optional.ofNullable(userList).orElseGet(Collections::emptyList)
- .stream()
- .forEach(a->{
- userIds.append(",");
- userIds.append(a.getUserId());
- });
- }else{
- userIds.append(adminInfo[1]);
- }
- if(userIds.length()>0){
- return userIds.substring(1);
- }
- return "";
- }
- /**
- * 通过ID获取
- * @param id
- * @return
- */
- @PreAuthorize(hasPermi = PerPrefix.SECURITY_CLAP + PerFun.QUERY)
- @GetMapping(value = "/findById")
- public ResultData find(Long id) {
- CheckClap checkClap = checkClapService.getById(id);
- CheckClapVo checkClapVo = new CheckClapVo();
- BeanUtils.copyProperties(checkClap,checkClapVo);
- checkClapVo.setYhDtoList(funDto(checkClapVo.getId(),4));
- checkClapVo.setZgDtoList(funDto(checkClapVo.getId(),5));
- //这里需要校验一下,查看的时候,是否有身份整改当前的这条数据。
- Predicate <String> predicate = a->Arrays.asList(a.split(",")).stream().filter(b->b.equals(getCurrentUserId()+"")).count()>0;
- if(StringUtils.isNotNull(checkClap.getCanRectifyIds()) && predicate.test(checkClap.getCanRectifyIds())){
- checkClapVo.setRectifyGentle(Boolean.TRUE);
- }else{
- checkClapVo.setRectifyGentle(Boolean.FALSE);
- }
- return ResultData.success(checkClapVo);
- }
- /**
- * 通过ID获取(小程序接口)
- * @param id
- * @return
- */
- @GetMapping(value = "/appFindById")
- public ResultData appFindById(Long id) {
- CheckClap checkClap = checkClapService.getById(id);
- CheckClapVo checkClapVo = new CheckClapVo();
- BeanUtils.copyProperties(checkClap,checkClapVo);
- checkClapVo.setYhDtoList(funDto(checkClapVo.getId(),4));
- checkClapVo.setZgDtoList(funDto(checkClapVo.getId(),5));
- //这里需要校验一下,查看的时候,是否有身份整改当前的这条数据。
- Predicate <String> predicate = a->Arrays.asList(a.split(",")).stream().filter(b->b.equals(getCurrentUserId()+"")).count()>0;
- if(StringUtils.isNotNull(checkClap.getCanRectifyIds()) && predicate.test(checkClap.getCanRectifyIds())){
- checkClapVo.setRectifyGentle(Boolean.TRUE);
- }else{
- checkClapVo.setRectifyGentle(Boolean.FALSE);
- }
- return ResultData.success(checkClapVo);
- }
- public List<UploadDto> funDto(Long id,Integer source){
- Function <List<Upload>,List<UploadDto>> function = fun->Optional.ofNullable(fun).orElseGet(Collections::emptyList)
- .stream()
- .map(a->{
- UploadDto uploadDto = new UploadDto();
- BeanUtils.copyProperties(a,uploadDto);
- uploadDto.setFileUrl(uploadDto.getFileUrl());
- uploadDto.setViewFileUrl(fileConfigUtils.getFileDomainAdmin()+uploadDto.getFileUrl());
- return uploadDto;
- }).collect(Collectors.toList());
- QueryWrapper <Upload> uploadWrap = new QueryWrapper <>();
- uploadWrap.lambda().eq(Upload::getSource,source).eq(Upload::getKeyId,id);
- List<Upload> uploadList = uploadService.list(uploadWrap);
- return function.apply(uploadList);
- }
- @Log(title = "安全服务-随手拍审核", businessType = BusinessType.UPDATE)
- @PostMapping(value = "/clapApprove")
- public ResultData update(@RequestBody CheckClapBo checkClapBo) {
- //参数检查
- paramCheck.notNull(checkClapBo).notNull(checkClapBo.getRectifyStatus());
- CheckClap checkClap = new CheckClap();
- BeanUtils.copyProperties(checkClapBo,checkClap);
- checkClap.setRectifyTime(LocalDateTime.now());
- checkClap.setRectifyId(getCurrentUserId());
- checkClap.setRectifyPeople(SecurityUtils.getNickName());
- if(checkClapService.saveOrUpdate(checkClap)) {
- //这里需要上传整改或无法整改照片。稍后补充
- Optional.ofNullable(checkClapBo.getImgDtoList()).orElseGet(Collections::emptyList)
- .stream()
- .forEach(a->{
- a.setKeyId(checkClap.getId());
- a.setFileType(2);
- a.setSource(5);
- uploadService.addUpload(a);
- });
- return ResultData.success("操作成功");
- }
- return ResultData.fail("操作失败");
- }
- }
|