DingdingServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. package cn.com.lzt.dingding.service.impl;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import cn.hutool.core.date.DateUtil;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.daju.mix.dao.entity.TBusAttendanceTotal;
  9. import com.daju.mix.dao.entity.TSBaseUser;
  10. import com.daju.mix.dao.mapper.TBCarMapper;
  11. import com.daju.mix.dao.mapper.TBusAttendanceTotalMapper;
  12. import com.daju.mix.dao.mapper.TSBaseUserMapper;
  13. import com.daju.mix.dto.UserClockDto;
  14. import com.dingtalk.api.response.OapiAttendanceGetcolumnvalResponse;
  15. import org.apache.commons.lang.xwork.StringUtils;
  16. import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
  17. import org.jeecgframework.web.system.service.SystemService;
  18. import org.jeecgframework.web.system.service.UserService;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import cn.com.lzt.arrangeduty.service.ArrangeDutyServiceI;
  23. import cn.com.lzt.attendancetemp.service.AttendanceTempServiceI;
  24. import cn.com.lzt.calendar.service.CalendarServiceI;
  25. import cn.com.lzt.common.util.dingding.DingTool;
  26. import cn.com.lzt.dingattendanceinfo.service.DingAttendanceinfoServiceI;
  27. import cn.com.lzt.dingding.service.DingdingService;
  28. import cn.com.lzt.projarrangedetail.service.ProjarrangeDetailServiceI;
  29. import cn.com.lzt.userarrangedetail.service.UserArrangeDetailServiceI;
  30. import com.dingtalk.open.client.api.model.corp.CorpUserDetail;
  31. import com.dingtalk.open.client.api.model.corp.Department;
  32. import javax.annotation.Resource;
  33. @Service("DingdingService")
  34. @Transactional
  35. public class DingdingServiceImpl extends CommonServiceImpl implements DingdingService{
  36. @Autowired
  37. private UserService userService;
  38. @Autowired
  39. private DingAttendanceinfoServiceI dingAttendanceinfoService;
  40. @Autowired
  41. private SystemService systemService;
  42. @Autowired
  43. private CalendarServiceI calendarService;
  44. @Autowired
  45. private AttendanceTempServiceI attendanceTempService;
  46. @Autowired
  47. private ProjarrangeDetailServiceI projarrangeDetailService;
  48. @Autowired
  49. private UserArrangeDetailServiceI userArrangeDetailService;
  50. @Autowired
  51. private ArrangeDutyServiceI arrangeDutyService;
  52. @Resource
  53. private TSBaseUserMapper tsBaseUserMapper;
  54. @Resource
  55. private TBCarMapper tbCarMapper;
  56. @Resource
  57. private TBusAttendanceTotalMapper tBusAttendanceTotalMapper;
  58. /**
  59. * 创建部门
  60. *
  61. * @param name 部门名称
  62. * @param parentId 父部门ID
  63. * @return 部门ID(创建失败,返回"")
  64. */
  65. public String createDepartment(String name, String parentId){
  66. DingTool dingTool = new DingTool();
  67. if("".equals(parentId)) {
  68. parentId = "1";
  69. }
  70. return dingTool.createDepartment(name, parentId, "1", false);
  71. }
  72. /**
  73. * 查询部门详情
  74. *
  75. * @param deptId 部门ID
  76. *
  77. */
  78. public Department getDepartment(String deptId) {
  79. DingTool dingTool = new DingTool();
  80. return dingTool.getDepartment(deptId);
  81. }
  82. /**
  83. * 查询子部门信息
  84. *
  85. * @param parentDeptId 父部门ID
  86. * @return deptList 子部门信息List
  87. */
  88. public List<Department> listDepartments(String parentDeptId) {
  89. DingTool dingTool = new DingTool();
  90. return dingTool.listDepartments(parentDeptId);
  91. }
  92. /**
  93. * 更新部门信息
  94. *
  95. * @param id 部门Id
  96. * @param name 部门名
  97. * @param parentId 父部门Id
  98. *
  99. * @return returnFlg 更新成败flg
  100. *
  101. *
  102. */
  103. public boolean updateDepartment(long id, String name, String parentId) {
  104. if("".equals(parentId)) {
  105. parentId = "1";
  106. }
  107. DingTool dingTool = new DingTool();
  108. return dingTool.updateDepartment(id, name, parentId, "1", false, true, "", false, "", "", false, "", "", "");
  109. }
  110. /**
  111. * 删除部门
  112. *
  113. * @param id 部门Id
  114. *
  115. * @return returnFlg 删除成败flg
  116. *
  117. */
  118. public boolean deleteDepartment(long id) {
  119. DingTool dingTool = new DingTool();
  120. return dingTool.deleteDepartment(id);
  121. }
  122. /**
  123. * 新建人员
  124. *
  125. * @param userid String 人员编号
  126. * @param name String 人员姓名
  127. * @param department List 成员所属部门id列表
  128. * @param mobile String 手机号码
  129. * @param jobnumber String 工号
  130. * @return boolean
  131. */
  132. public boolean createUser(String userid, String name, List<Long> department, String mobile, String jobnumber) {
  133. DingTool dingTool = new DingTool();
  134. CorpUserDetail userDetail = new CorpUserDetail();
  135. userDetail.setUserid(userid);
  136. userDetail.setName(name);
  137. userDetail.setDepartment(department);
  138. if(mobile != null && mobile.length()>0){
  139. StringBuffer sb = new StringBuffer();
  140. String endString = mobile.substring(4);
  141. sb.append("1444");
  142. sb.append(endString);
  143. userDetail.setMobile(sb.toString());
  144. }
  145. userDetail.setJobnumber(jobnumber);
  146. boolean success = dingTool.createUser(userDetail);
  147. if(success) {
  148. return success;
  149. }else {
  150. return recreateUserWithDiffMobile(userDetail);
  151. }
  152. }
  153. /**
  154. * 1444开头的手机号可能重复导致无法更新用户信息
  155. * @param userDetail
  156. */
  157. private boolean recreateUserWithDiffMobile(CorpUserDetail userDetail) {
  158. String mobile = userDetail.getMobile();
  159. if(mobile != null && mobile.length()>0){
  160. StringBuffer sb = new StringBuffer();
  161. String endString = mobile.substring(4);
  162. sb.append("1446");
  163. sb.append(endString);
  164. userDetail.setMobile(sb.toString());
  165. }
  166. DingTool dingTool = new DingTool();
  167. boolean r = dingTool.createUser(userDetail);
  168. if(r) {
  169. System.out.println("userid:"+userDetail.getUserid()+"1446手机号同步成功");
  170. }
  171. return r;
  172. }
  173. /**
  174. * 获取用户信息
  175. *
  176. * @param userid
  177. * @return 返回对象中的active表示该用户是否激活,false为未激活。
  178. */
  179. public CorpUserDetail getUser(String userid) {
  180. DingTool dingTool = new DingTool();
  181. return dingTool.getUser(userid);
  182. }
  183. /**
  184. * 更新用户信息
  185. *
  186. * @param userid String 人员编号
  187. * @param name String 人员姓名
  188. * @param department List 成员所属部门id列表
  189. * @param mobile String 手机号码
  190. * @param jobnumber String 工号
  191. * @return boolean
  192. * @return
  193. */
  194. public boolean updateUser(String userid, String name, List<Long> department, String mobile, String jobnumber) {
  195. DingTool dingTool = new DingTool();
  196. CorpUserDetail userDetail = new CorpUserDetail();
  197. userDetail.setUserid(userid);
  198. userDetail.setName(name);
  199. userDetail.setDepartment(department);
  200. if(mobile != null && mobile.length()>0){
  201. StringBuffer sb = new StringBuffer();
  202. String endString = mobile.substring(4);
  203. sb.append("1444");
  204. sb.append(endString);
  205. userDetail.setMobile(sb.toString());
  206. }
  207. userDetail.setJobnumber(jobnumber);
  208. boolean success = dingTool.updateUser(userDetail);
  209. if(success) {
  210. return success;
  211. }else {
  212. return reupdateUserWithDiffMobile(userDetail);
  213. }
  214. }
  215. /**
  216. * 1444开头的手机号可能重复导致无法更新用户信息
  217. * @param userDetail
  218. */
  219. private boolean reupdateUserWithDiffMobile(CorpUserDetail userDetail) {
  220. String mobile = userDetail.getMobile();
  221. if(mobile != null && mobile.length()>0){
  222. StringBuffer sb = new StringBuffer();
  223. String endString = mobile.substring(4);
  224. sb.append("1446");
  225. sb.append(endString);
  226. userDetail.setMobile(sb.toString());
  227. }
  228. DingTool dingTool = new DingTool();
  229. boolean r = dingTool.updateUser(userDetail);
  230. if(r) {
  231. System.out.println("userid:"+userDetail.getUserid()+"1446手机号同步成功");
  232. }
  233. return r;
  234. }
  235. /**
  236. * 批量删除用户
  237. *
  238. * @param useridlist
  239. * @return 如果有一个用户删除失败,都不会删除
  240. * 删除用户时,会将考勤记录一并删除,删除用户之前需要先把考勤记录同步到本地数据库
  241. */
  242. public boolean batchDeleteUser(List<String> useridlist) {
  243. DingTool dingTool = new DingTool();
  244. return dingTool.batchDeleteUser(useridlist);
  245. }
  246. /**
  247. * 根据手机号获取userId,并更新至数据库
  248. */
  249. //@Transactional(rollbackFor = Exception.class)
  250. public boolean getUserIdByPhone(){
  251. DingTool dingTool = new DingTool();
  252. ArrayList<String> list = tbCarMapper.getUserPhone();
  253. for (String li : list) {
  254. String userId = dingTool.getUserIdByPhone(li);
  255. if(StringUtils.isNotBlank(userId)){
  256. LambdaQueryWrapper<TSBaseUser> wrapper = new LambdaQueryWrapper<>();
  257. wrapper.eq(TSBaseUser::getUsername, li);
  258. TSBaseUser tsBaseUser = tsBaseUserMapper.selectOne(wrapper);
  259. tsBaseUser.setDid(userId);
  260. tsBaseUserMapper.updateById(tsBaseUser);
  261. }
  262. }
  263. return Boolean.TRUE;
  264. }
  265. public boolean getColumnVal(){
  266. DingTool dingTool = new DingTool();
  267. List<UserClockDto> list = tbCarMapper.getUserDid();
  268. for (UserClockDto li : list) {
  269. List<OapiAttendanceGetcolumnvalResponse.ColumnValForTopVo> dList = dingTool.getColumnVal(li.getDid());
  270. HashMap<String, Double> hashMap = new HashMap<>();
  271. for (OapiAttendanceGetcolumnvalResponse.ColumnValForTopVo d : dList) {
  272. double num = 0;
  273. for (OapiAttendanceGetcolumnvalResponse.ColumnDayAndVal value : d.getColumnVals()) {
  274. num += Double.valueOf(value.getValue());
  275. }
  276. hashMap.put(d.getColumnVo().getId().toString(), num);
  277. }
  278. int year = DateUtil.year(new Date());
  279. int month = DateUtil.month(new Date()) + 1;
  280. String tMonth = new StringBuilder().append(year).append("-").append(month).toString();
  281. String a = DateUtil.parse(DateUtil.now(), "yyyy-MM").toString();
  282. LambdaQueryWrapper<TBusAttendanceTotal> wrapper = new LambdaQueryWrapper<>();
  283. wrapper.eq(TBusAttendanceTotal::getTMonth, tMonth);
  284. wrapper.eq(TBusAttendanceTotal::getUserId, li.getUserId());
  285. TBusAttendanceTotal total = tBusAttendanceTotalMapper.selectOne(wrapper);
  286. if (total != null){
  287. total.setShouldTime(hashMap.get("290802238").toString());
  288. total.setRealityTime(hashMap.get("290802241").toString());
  289. total.setNumOfLate(hashMap.get("290802244").toString());
  290. total.setNumLeaveEarly(hashMap.get("290802249").toString());
  291. tBusAttendanceTotalMapper.updateById(total);
  292. } else {
  293. TBusAttendanceTotal tBusAttendanceTotal = new TBusAttendanceTotal();
  294. tBusAttendanceTotal.setUserId(li.getUserId());
  295. tBusAttendanceTotal.setUserCode(li.getCode());
  296. tBusAttendanceTotal.setRealname(li.getName());
  297. tBusAttendanceTotal.setTMonth(tMonth);
  298. tBusAttendanceTotal.setDepart(li.getDepart());
  299. tBusAttendanceTotal.setPost(li.getPost());
  300. tBusAttendanceTotal.setShouldTime(hashMap.get("290802238").toString());
  301. tBusAttendanceTotal.setRealityTime(hashMap.get("290802241").toString());
  302. tBusAttendanceTotal.setNumOfLate(hashMap.get("290802244").toString());
  303. tBusAttendanceTotal.setNumLeaveEarly(hashMap.get("290802249").toString());
  304. tBusAttendanceTotalMapper.insert(tBusAttendanceTotal);
  305. }
  306. }
  307. return Boolean.TRUE;
  308. }
  309. }