| package com.doumee.service.business.impl.hksync; | 
|   | 
| import com.alibaba.fastjson.JSONObject; | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; | 
| import com.doumee.biz.system.SystemDictDataBiz; | 
| import com.doumee.core.constants.ResponseStatus; | 
| import com.doumee.core.exception.BusinessException; | 
| import com.doumee.core.haikang.model.HKConstants; | 
| import com.doumee.core.haikang.model.param.BaseListPageResponse; | 
| import com.doumee.core.haikang.model.param.BaseResponse; | 
| import com.doumee.core.haikang.model.param.request.*; | 
| import com.doumee.core.haikang.model.param.respose.*; | 
| import com.doumee.core.haikang.service.HKService; | 
| import com.doumee.core.utils.Constants; | 
| import com.doumee.core.utils.DateUtil; | 
| import com.doumee.dao.business.dao.MemberMapper; | 
| import com.doumee.dao.business.model.Member; | 
| import com.doumee.dao.system.join.NoticesJoinMapper; | 
| import com.doumee.dao.system.model.Notices; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Service; | 
|   | 
| import java.net.URLEncoder; | 
| import java.util.*; | 
|   | 
| /** | 
|  * 海康访客业务Service实现 | 
|  * @author 江蹄蹄 | 
|  * @date 2023/11/30 15:33 | 
|  */ | 
| @Service | 
| @Slf4j | 
| public class HkSyncNoticeServiceImpl extends HkSyncBaseServiceImpl { | 
|     @Autowired | 
|     private NoticesJoinMapper noticesJoinMapper; | 
|     @Autowired | 
|     private SystemDictDataBiz systemDictDataBiz; | 
|     @Autowired | 
|     private MemberMapper memberMapper; | 
|   | 
|     @Override | 
|     public String syncHkNotices(String username){ | 
|         if(Constants.DEALING_HK_NOTICE_LIST){ | 
|             return   null; | 
|         } | 
|         Constants.DEALING_HK_NOTICE_LIST =true; | 
|         try { | 
|             List<String> users = new ArrayList<>(); | 
|             users.add(username); | 
|   | 
|             List<Integer> userIds = new ArrayList<>(); | 
|             List<Member > userList = memberMapper.selectList(new QueryWrapper<Member>().lambda() | 
|                     .in(Member::getPhone,users) | 
|                     .eq(Member::getType,Constants.TWO) | 
|                     .eq(Member::getIsdeleted,Constants.ZERO)); | 
|             Member tu= getFromUserList(username,userList); | 
|             if(tu!=null){ | 
|                 userIds.add(tu.getId()); | 
|             }else{ | 
|                 throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,无效账号~"); | 
|             } | 
|             if(userIds.size()>0){ | 
|                 //清空海康全部的代办数据 | 
|                 noticesJoinMapper.delete(new UpdateWrapper<Notices>().lambda() | 
|                         .eq(Notices::getType, Constants.noticesObjectType.hknotice) | 
|                         .in(Notices::getUserId, userIds)); | 
|             } | 
|             Date date = new Date(); | 
|             List<GetTodoListResponse> allHkList = new ArrayList<>(); | 
|             boolean hasNext = true; | 
|             int curTotal = 0; | 
|             int curPage = 1; | 
|             while (hasNext){ | 
|                 //分页遍历循环查询所有门禁设备数据 | 
|                 GetTodoListRequest param = new GetTodoListRequest(); | 
| //                param.setComId("dfe");//接全部的代办 | 
|                 param.setUserId(username); | 
|                 param.setStatus(1);//只查待处理的数据 | 
|                 param.setPageNo(curPage); | 
|                 param.setLocaleType("zh_CN"); | 
|                 param.setPageSize(100); | 
|                 BaseResponse<BaseListPageResponse<GetTodoListResponse>>   response = HKService.getTodoListPage(param); | 
|                 if(response == null || !StringUtils.equals(response.getCode(), HKConstants.RESPONSE_SUCCEE)){ | 
|                     throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(), "对不起,海康同步数据失败~"); | 
|                 } | 
|                 BaseListPageResponse<GetTodoListResponse> r = response.getData(); | 
|                 curTotal += 100; | 
|                 if(curTotal >= r.getTotal()){ | 
|                     hasNext = false; | 
|                 } | 
|                 if(r.getList() == null || r.getList().size()==0){ | 
|                     hasNext =false; | 
|                 }else{ | 
|                     allHkList.addAll(r.getList()); | 
|                 } | 
|                 curPage++; | 
|             } | 
|             if(allHkList!=null && allHkList.size()>0){ | 
|                 String gotoUrl = systemDictDataBiz.queryByCode(Constants.HK_PARAM,Constants.HK_WEBSITE_DOMAIN_URL).getCode(); | 
|                  List<Notices> list = new ArrayList<>(); | 
|                 for(GetTodoListResponse data :allHkList){ | 
|                    Member u = getFromUserList(data.getUserId(),userList); | 
|                    if(u==null){ | 
|                        continue; | 
|                    } | 
|                     userIds.add(u.getId()); | 
|                     JSONObject param = new JSONObject(); | 
|                     param.put("componentId","dfe"); | 
|                     param.put("msgType","tlnc"); | 
|                     param.put("componentMenuId", data.getMenuCode()); | 
|                     JSONObject c = new JSONObject(); | 
|                     c.put("method","dealTlncMsg"); | 
|                     c.put("argument", data); | 
|                     param.put("callback",c); | 
|                     Notices notices = new Notices(); | 
|                     notices.setCreateDate(DateUtil.getISO8601DateByStr(data.getMsgCreateTimeIso())); | 
|                     notices.setUserId(u.getId()); | 
|                     notices.setStatus(Constants.ZERO); | 
|                     notices.setSendacopy(Constants.ZERO); | 
|                     //业务状态信息 0 =待处理;1=已同意/已处理;2=已拒绝/已退回;3=已转交;4=已撤销 | 
|                     notices.setParam1(JSONObject.toJSONString(data)); | 
|                     notices.setParam2(Constants.ZERO+""); | 
|                     notices.setTitle(data.getMsgTitle()); | 
|                     if(notices.getCreateDate() == null){ | 
|                         notices.setCreateDate(date); | 
|                     } | 
|                     notices.setIsdeleted(Constants.ZERO); | 
|                     notices.setParam4(data.getMsgCreateTimeIso()); | 
|                     notices.setParam3(data.getMsgCreateTime()); | 
|                     notices.setParam5(JSONObject.toJSONString(param)); | 
|                     notices.setType(Constants.noticesObjectType.hknotice); | 
| //                  notices.setRemark(gotoUrl+"dps/web/wxAuth/loginV2?oaId=atwl&redirectId=index"); | 
|                     //https://atwl.ahzyssl.com/dps/web/wxAuth/loginV2?oaId=atwl&redirectUrl=encode(url) | 
|                     String domainUrl = gotoUrl + HKConstants.InterfacePath.wxAuthUrl[0]; | 
|                     notices.setRemark(domainUrl+ URLEncoder.encode("/"+StringUtils.defaultString(data.getSegmentId(),"") | 
|                             +StringUtils.defaultString(data.getH5Url(),""),"utf-8")); | 
|                     list.add(notices); | 
|                 } | 
|                  if(list.size()>0){ | 
|                     noticesJoinMapper.insert(list);//批量插入记录 | 
|                 } | 
|             } | 
|         }catch (Exception e){ | 
|             e.printStackTrace(); | 
|         }finally { | 
|             Constants.DEALING_HK_NOTICE_LIST =false; | 
|         } | 
|         return  null; | 
|     } | 
|   | 
|     private Member getFromUserList(String userId, List<Member> userList) { | 
|         if(userList!=null ){ | 
|             for(Member u :userList){ | 
|                 if(StringUtils.equals(u.getPhone(),userId)){ | 
|                     return  u; | 
|                 } | 
|             } | 
|         } | 
|         return null; | 
|     } | 
|   | 
|   | 
| } |