package doumeemes.service.ext.impl; 
 | 
  
 | 
import com.alibaba.fastjson.JSONObject; 
 | 
import doumeemes.core.constants.ResponseStatus; 
 | 
import doumeemes.core.exception.BusinessException; 
 | 
import doumeemes.core.model.LoginUserInfo; 
 | 
import doumeemes.core.model.PageData; 
 | 
import doumeemes.core.model.PageWrap; 
 | 
import doumeemes.core.utils.Constants; 
 | 
import doumeemes.core.utils.DateUtil; 
 | 
import doumeemes.core.utils.dingding.DingDingUtil; 
 | 
import doumeemes.core.utils.redis.RedisUtil; 
 | 
import doumeemes.dao.business.model.CompanyUser; 
 | 
import doumeemes.dao.business.model.Notices; 
 | 
import doumeemes.dao.ext.CompanyUserExtMapper; 
 | 
import doumeemes.dao.ext.dto.QueryNoticesExtDTO; 
 | 
import doumeemes.dao.ext.vo.*; 
 | 
import doumeemes.service.ext.CompanyExtService; 
 | 
import doumeemes.service.ext.CompanyUserExtService; 
 | 
import doumeemes.service.ext.NoticesExtService; 
 | 
import doumeemes.dao.ext.NoticesExtMapper; 
 | 
import com.github.pagehelper.PageHelper; 
 | 
import com.github.pagehelper.PageInfo; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
  
 | 
import java.util.ArrayList; 
 | 
import java.util.List; 
 | 
import java.util.UUID; 
 | 
  
 | 
/** 
 | 
 * 系统待办通知Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2022/06/17 15:10 
 | 
 */ 
 | 
@Service 
 | 
public class NoticesExtServiceImpl implements NoticesExtService { 
 | 
  
 | 
    @Autowired 
 | 
    private NoticesExtMapper noticesExtMapper; 
 | 
    @Autowired 
 | 
    private CompanyExtService companyExtService; 
 | 
    @Autowired 
 | 
    private CompanyUserExtService companyUserExtService; 
 | 
  
 | 
    @Override 
 | 
    public PageData<NoticesExtListVO> findPage(PageWrap<QueryNoticesExtDTO> pageWrap) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ResponseStatus.NOT_ALLOWED.getMessage()); 
 | 
        } 
 | 
        pageWrap.getModel().setDeleted(Constants.ZERO); 
 | 
        pageWrap.getModel().setRootId(user.getRootDepartment().getId()); 
 | 
        pageWrap.getModel().setCompanyUserId(user.getCompanyUser().getId()); 
 | 
        PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        List<NoticesExtListVO> result = noticesExtMapper.selectList(pageWrap.getModel()); 
 | 
        return PageData.from(new PageInfo<>(result)); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 需要设置  companyUserId,title,content,type,url 
 | 
     * @param model 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public Integer sendNotice(Notices model) { 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ResponseStatus.NOT_ALLOWED.getMessage()); 
 | 
        } 
 | 
       return  sendNoticeDo(user,model); 
 | 
  
 | 
    } 
 | 
  
 | 
    private Integer sendNoticeDo(LoginUserInfo user, Notices model) { 
 | 
        CompanyUserExtListVO cu = companyUserExtService.selectById(model.getCompanyUserId()); 
 | 
        if(cu == null){ 
 | 
            return null; 
 | 
        } 
 | 
        model.setId(UUID.randomUUID().toString()); 
 | 
        model.setDeleted(Constants.ZERO); 
 | 
        model.setRootId(user.getRootDepartment().getId()); 
 | 
        model.setUserId(cu.getUserId()); 
 | 
        model.setDepartmentId(user.getCurComDepartment().getId()); 
 | 
        model.setStatus(Constants.ZERO); 
 | 
        model.setCreateTime(DateUtil.getCurrentDate()); 
 | 
        model.setCreateUser(user.getId()); 
 | 
        CompanyExtListVO company = user.getCompany(); 
 | 
        model.setDdStatus(Constants.ZERO); 
 | 
        if(StringUtils.isNotBlank(model.getUrl())){ 
 | 
            model.setUrl(model.getUrl().replace("{dbid}",model.getId())); 
 | 
            if(StringUtils.isNotBlank(cu.getDdUserid())){ 
 | 
                try { 
 | 
                    String token = companyExtService.getDingdingToken(company.getId()); 
 | 
                    JSONObject json = JSONObject.parseObject(company.getDingdingInfo()); 
 | 
                    Long agentId = Long.parseLong(json.getString("agentid")); 
 | 
                    String taskId =  DingDingUtil.sendActionCardNotice(token,agentId,cu.getDdUserid(),model.getUrl(),model.getTitle(),model.getContent()); 
 | 
                    model.setDdParam(taskId); 
 | 
                    model.setDdStatus(Constants.ONE); 
 | 
                }catch (Exception e){ 
 | 
                    e.printStackTrace(); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        //插入数据 
 | 
        return   noticesExtMapper.insert(model); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 需要设置  companyUserId,title,content,type,url 
 | 
     * @param model 
 | 
     * @return 
 | 
     */ 
 | 
    @Override 
 | 
    public Integer sendNoticeNologin(Notices model,LoginUserInfo user) { 
 | 
        if(user == null){ 
 | 
            return  null; 
 | 
        } 
 | 
        return  sendNoticeDo(user,model); 
 | 
    } 
 | 
    /** 
 | 
     * @param param 
 | 
     * @param 
 | 
     */ 
 | 
    @Override 
 | 
    public NoticeExtListCountVO pageCount(QueryNoticesExtDTO param){ 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "对不起,您无权限进行该操作!"); 
 | 
        } 
 | 
        param.setDeleted(Constants.ZERO); 
 | 
        //只能查看当前根组织的数据 
 | 
        param.setRootId(user.getRootDepartment().getId()); 
 | 
        param.setUserId(user.getId()); 
 | 
        param.setCompanyUserId(user.getCompanyUser().getId()); 
 | 
  
 | 
        NoticeExtListCountVO result = new NoticeExtListCountVO(); 
 | 
        //全部数量 
 | 
        result.setAllNum(noticesExtMapper.selectCount(param)); 
 | 
        param.setStatus(Constants.ZERO); 
 | 
        //未完成数量 
 | 
        result.setStartNum(noticesExtMapper.selectCount(param)); 
 | 
        param.setStatus(Constants.ONE); 
 | 
        //未完成数量 
 | 
        result.setEndNum(noticesExtMapper.selectCount(param)); 
 | 
        return result; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 处理待办 
 | 
     * @param objId 对象编码 
 | 
     * @param type  通知类型 
 | 
     * @param dealInfo 处理备注 
 | 
     */ 
 | 
    @Override 
 | 
    public void dealNotice(Integer objId,Integer type,String dealInfo){ 
 | 
        if(objId == null || type == null){ 
 | 
            return; 
 | 
        } 
 | 
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
        if(!Constants.equalsInteger(user.getType(),Constants.USERTYPE.COM)){ 
 | 
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), ResponseStatus.NOT_ALLOWED.getMessage()); 
 | 
        } 
 | 
        QueryNoticesExtDTO dto = new QueryNoticesExtDTO(); 
 | 
        dto.setObjId(objId); 
 | 
        dto.setType(type); 
 | 
        dto.setDeleted(Constants.ZERO); 
 | 
        NoticesExtListVO notice = noticesExtMapper.selectByModel(dto); 
 | 
        if(notice == null){ 
 | 
            return; 
 | 
        } 
 | 
        Notices model = new Notices(); 
 | 
        model.setId(notice.getId()); 
 | 
        model.setDealDate(DateUtil.getCurrentDate()); 
 | 
        model.setStatus(Constants.ONE); 
 | 
        model.setDealInfo(dealInfo); 
 | 
          //插入数据 
 | 
        noticesExtMapper.updateById(model); 
 | 
    } 
 | 
    @Override 
 | 
    public  Integer create(Notices model){ 
 | 
         model.setUserId(105); 
 | 
         model.setCompanyUserId(18); 
 | 
         model.setTitle("测试工厂通知"); 
 | 
         model.setContent(StringUtils.defaultString(model.getContent(),"测试工厂通知内容")); 
 | 
         model.setUrl("http://www.doumee.com"); 
 | 
         return  sendNotice(model); 
 | 
    } 
 | 
} 
 |