浏览代码

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper

Lijy 2 年之前
父节点
当前提交
8939492b7c

+ 310 - 210
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -484,6 +484,75 @@ public class WeiXinCorpController {
                     ReportServiceImpl.corpwxJobCenter.put(jobId, result);
                     UserServiceImpl.corpwxJobCenter.put(jobId, result);
                     TaskServiceImpl.corpwxJobCenter.put(jobId, result);
+                } else if ("auto_activate".equals(infoType)) {
+                    //被邀请的同事自动激活使用
+                    //{"xml":{"Scene":1,"InfoType":"auto_activate",
+                    // "AccountList":{"Type":1,"PreviousStatus":1,"UserId":"woy9TkCAAACuqbgmQBZxra6gy6Bv7mMg",
+                    // "ExpireTime":1671465600,"ActiveCode":"LA10000001400000163774145"},
+                    // "ServiceCorpId":"wwf11426cf618e1703",
+                    // "AuthCorpId":"wpy9TkCAAA6ii2OYKAEj5rCEqjwEQSuA","TimeStamp":1668761791}}
+                    String corpId = jsonObject.getString("AuthCorpId");
+                    org.json.JSONObject authUserJson = jsonObject.getJSONObject("AccountList");
+                    String authUserId = authUserJson.getString("UserId");
+                    User oneUser = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", authUserId));
+                    if (oneUser == null) {
+                        //生成该用户
+                        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectById(corpId);
+                        if (wxCorpInfo != null) {
+                            Integer companyId = wxCorpInfo.getCompanyId();
+                            SysRole defaultRole = sysRoleMapper.selectOne(new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
+
+                            if (wxCorpInfo.getSaasSyncContact() == 1) {
+                                //直接通过企业微信通讯录同步
+                                JSONObject userObj = getUserInfo(getCorpAccessToken(wxCorpInfo), authUserId);
+                                System.out.println("userObj=="+userObj);
+                                //成功获取到通讯录的个人详情
+                                Long id = SnowFlake.nextId();
+                                //通过getUserInfo接口获取到的json key是小写的
+                                JSONArray department = userObj.getJSONArray("department");
+                                Integer curUserWXDeptid = getMaxDeptIdFromArray(department);
+                                Department sysDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("corpwx_deptid", curUserWXDeptid));
+                                String userId = userObj.getString("userid");
+                                String openUserId = userObj.getString("open_userid");
+                                User user = new User()
+                                        .setId(id.toString())
+                                        .setRoleId(defaultRole.getId())
+                                        .setRoleName(defaultRole.getRolename())
+                                        .setName(userObj.getString("name"))
+                                        .setPhone(userObj.getString("mobile"))
+                                        .setPassword(MD5Util.getPassword("000000"))
+                                        .setCorpwxUserid(openUserId)
+                                        .setCorpwxRealUserid(userId)
+                                        .setJobNumber(openUserId.equals(userId)?null:userId)
+                                        .setColor(ColorUtil.randomColor())
+                                        .setCompanyId(companyId);
+                                if (sysDept != null) {
+                                    user.setDepartmentId(sysDept.getDepartmentId());
+                                    List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+                                    user.setDepartmentCascade(convertDepartmentIdToCascade(user.getDepartmentId(), allDeptList));
+                                }
+                                Integer employeeCnt = userMapper.selectCount(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active",1));
+                                Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", companyId));
+                                ContactSyncLog contactSyncLog = new ContactSyncLog();
+                                contactSyncLog.setCompanyId(companyId);
+                                System.err.println("企业微信自动同步新增人员日志记录===============================");
+                                if (employeeCnt + 1 > company.getStaffCountMax()){
+                                    contactSyncLog.setResult(0);
+                                    //contactSyncLog.setMsg("公司人员已达上限,请联系客服提高人数上限。");
+                                    contactSyncLog.setMsg(MessageUtils.message("wx.employeeFull"));
+                                    System.err.println("日志信息:"+ contactSyncLog.toString());
+                                    contactSyncLogMapper.insert(contactSyncLog);
+                                }else {
+                                    userMapper.insert(user);
+                                    contactSyncLog.setResult(1);
+                                    //contactSyncLog.setMsg("同步成功");
+                                    contactSyncLog.setMsg(MessageUtils.message("wx.synSuccess"));
+                                    System.err.println("日志信息:"+ contactSyncLog.toString());
+                                    contactSyncLogMapper.insert(contactSyncLog);
+                                }
+                            }
+                        }
+                    }
                 }
             }
         } catch (Exception e) {
@@ -540,22 +609,81 @@ public class WeiXinCorpController {
             org.json.JSONObject jsonObject = XML.toJSONObject(sMsg);
             log.info("json=="+jsonObject.toString());
             jsonObject = jsonObject.getJSONObject("xml");
-
-            //存储更新订单、更新公司续费情况
+            //订单回调。存储更新订单、更新公司续费情况
             if (jsonObject.has("InfoType")){
+                System.err.println("+++++++++++++++++++订单回调开始++++++++++++++++++++++");
+                System.err.println(jsonObject);
                 String infoType = jsonObject.getString("InfoType");
-                //open_order:下单成功通知; change_order:改单通知; pay_for_app_success:支付成功通知;
-                //refund:退款通知; change_editon:付费版本变更通知;
-                if ("open_order".equals(infoType) || "change_order".equals(infoType) || "pay_for_app_success".equals(infoType) || "refund".equals(infoType) || "change_editon".equals(infoType)){
-                    boolean b = saveOrderAndUpCompany(jsonObject);
-                    if (!b){
-                        System.out.println("+++++++++++++++++++微信应用市场付费回调处理失败+++++++++++++++++++++++");
-                        System.out.println(jsonObject);
-                    }
+                String orderId = "";
+                if (jsonObject.has("OrderId")){
+                    orderId = jsonObject.getString("OrderId");
+                }
+                WxOrder wxOrder = null;
+                switch (infoType){
+                    case "open_order"://open_order:下单成功通知
+                        System.err.println("###########################下单成功");
+                        wxOrder = getOrder(orderId);
+                        if (wxOrder!=null){
+                            wxOrderMapper.insert(wxOrder);
+                        }
+                        break;
+                    case "pay_for_app_success"://pay_for_app_success:支付成功通知
+                        System.err.println("###########################订单支付成功");
+                        wxOrder = getOrder(orderId);
+                        if (wxOrder!=null){
+                            wxOrderMapper.updateById(wxOrder);
+                            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", wxOrder.getPaidCorpid()));
+                            if (wxCorpInfo!=null){
+                                System.err.println("#######################要进行更改有效期的公司信息为:"+ wxCorpInfo.toString());
+                                Company newCompany = new Company();
+                                LocalDateTime endTime = wxOrder.getEndTime();
+                                newCompany.setId(wxCorpInfo.getCompanyId());
+                                newCompany.setExpirationDate(endTime);
+                                newCompany.setSetMeal(1);
+                                newCompany.setStaffCountMax(wxOrder.getUserCount());
+                                companyMapper.updateById(newCompany);
+                                System.out.println("有效期变更为:" + endTime);
+                            }
+                        }
+                        break;
+                    case "change_editon"://change_editon:付费版本变更通知
+                        System.err.println("###########################付费版本变更");
+                        String paidCorpId = jsonObject.getString("PaidCorpId");
+                        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", paidCorpId));
+                        if(wxCorpInfo != null){
+                            System.err.println("版本变更的公司信息为:");
+                            System.err.println(wxCorpInfo.toString());
+                            versionChange(wxCorpInfo);
+                        }else {
+                            System.err.println("#############################" + paidCorpId + "该公司尚未授权开通,将在授权开通后为其变更版本及更新到期时间。");
+                        }
+                        break;
+                    case "change_order"://change_order:改单通知
+                        System.err.println("###########################改单通知");
+                        orderId = jsonObject.getString("NewOrderId");
+                        wxOrder = getOrder(orderId);
+                        if (wxOrder!=null){
+                            wxOrder.setOldOrderid(jsonObject.getString("OldOrderId"));
+                            wxOrderMapper.insert(wxOrder);
+                        }
+                        break;
+                    case "refund"://refund:退款通知
+                        System.err.println("###########################退款通知");
+                        wxOrder = getOrder(orderId);
+                        wxOrderMapper.updateById(wxOrder);
+                        WxCorpInfo corpid = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", wxOrder.getPaidCorpid()));
+                        if (corpid!=null){
+                            Company newCompany = new Company();
+                            newCompany.setId(corpid.getCompanyId());
+                            //退款则将其到期时间设置为现在的时间减去一天
+                            newCompany.setExpirationDate(LocalDateTime.now().minusDays(1));
+                            companyMapper.updateById(newCompany);
+                            System.out.println("已将该公司有效期设置为:");
+                        }
+                        break;
                 }
             }
 
-
             if (jsonObject.has("AuthCode")) {
                 //企业授权通知
                 String authCode = jsonObject.getString("AuthCode");
@@ -1148,8 +1276,8 @@ public class WeiXinCorpController {
                         project.setCreatorId(user.getId());
                         project.setCreatorName(user.getName());
                         project.setCreateDate(LocalDate.now());
-                        project.setProjectCode("example1");
-                        project.setProjectName(MessageUtils.message("project.example"));
+                        project.setProjectCode("example");
+                        project.setProjectName("示例项目");
                         projectMapper.insert(project);
                         //todo:  设置初始项目参与人
                         Participation participation=new Participation();
@@ -1165,13 +1293,13 @@ public class WeiXinCorpController {
                         TaskGroup taskGroup = new TaskGroup();
                         taskGroup.setProjectId(project.getId())
                                 .setInchargerId(user.getId())
-                                .setName(MessageUtils.message("entry.projectStage"));
+                                .setName("项目阶段");
                         taskGroupMapper.insert(taskGroup);
                         Stages stage = new Stages();
                         stage.setGroupId(taskGroup.getId());
                         stage.setSequence(1);
                         stage.setProjectId(project.getId());
-                        stage.setStagesName(MessageUtils.message("excel.WorkUnfolds"));
+                        stage.setStagesName("工作开展");
                         stagesMapper.insert(stage);
                         Task task=new Task();
                         task.setCreateDate(LocalDate.now());
@@ -1186,7 +1314,7 @@ public class WeiXinCorpController {
                         task.setStagesId(stage.getId());
                         task.setGroupId(taskGroup.getId());
                         task.setSeq(0);
-                        task.setName(MessageUtils.message("Stages.example"));
+                        task.setName("示例任务");
                         taskMapper.insert(task);
                     }
 
@@ -1194,52 +1322,60 @@ public class WeiXinCorpController {
                     //获取公司根部门人员,也就是没有分配部门的人员
                     getCorpMembsFromPlatform(companyId);
                     //对已经开通版本的新公司进行版本变更和开通时长变更
+                    System.err.println("###################################开始检查该新建公司是否已支付过订单");
+                    System.err.println("该公司corpId为:"+corpId);
                     WxOrder wxOrder = wxOrderMapper.selectOne(new QueryWrapper<WxOrder>().eq("paid_corpid",corpId).eq("order_status",1).orderByDesc("paid_time"));
                     if (wxOrder != null){
+                        Company newCompany = new Company();
+                        newCompany.setId(company.getId());
                         System.err.println("########################查询到该新建企业" + company.getCompanyName() + "已支付过订单,进行版本变更");
                         String editionId = wxOrder.getEditionId();
                         switch (editionId){
                             //基础版
                             case "sp17da4a6e6f2a91f8":
-                                company.setPackageProject(0);
-                                company.setPackageOa(0);
-                                company.setPackageExpense(0);
-                                company.setPackageCustomer(0);
-                                company.setPackageEngineering(0);
-                                company.setPackageProvider(0);
+                                newCompany.setPackageProject(0);
+                                newCompany.setPackageOa(0);
+                                newCompany.setPackageExpense(0);
+                                newCompany.setPackageCustomer(0);
+                                newCompany.setPackageEngineering(0);
+                                newCompany.setPackageProvider(0);
                                 break;
                             //专业版
                             case "sp4a30d92ede178afd":
-                                company.setPackageProject(1);//项目协作平台
-                                company.setPackageOa(0);//OA平台;请假,出差等
-                                company.setPackageExpense(1);//费用报销
-                                company.setPackageCustomer(0);//客户管理
-                                company.setPackageEngineering(0);//工程专业
-                                company.setPackageProvider(0);//供应商模块
+                                newCompany.setPackageProject(1);//项目协作平台
+                                newCompany.setPackageOa(0);//OA平台;请假,出差等
+                                newCompany.setPackageExpense(1);//费用报销
+                                newCompany.setPackageCustomer(0);//客户管理
+                                newCompany.setPackageEngineering(0);//工程专业
+                                newCompany.setPackageProvider(0);//供应商模块
                                 break;
                             //建筑版
                             case "spd04f1b0582a0fe19":
-                                company.setPackageProject(1);//项目协作平台
-                                company.setPackageOa(0);//OA平台;请假,出差等
-                                company.setPackageExpense(1);//费用报销
-                                company.setPackageCustomer(1);//客户管理
-                                company.setPackageEngineering(1);//工程专业
-                                company.setPackageProvider(0);//供应商模块
+                                newCompany.setPackageProject(1);//项目协作平台
+                                newCompany.setPackageOa(0);//OA平台;请假,出差等
+                                newCompany.setPackageExpense(1);//费用报销
+                                newCompany.setPackageCustomer(1);//客户管理
+                                newCompany.setPackageEngineering(1);//工程专业
+                                newCompany.setPackageProvider(0);//供应商模块
                                 break;
                             //旗舰版
                             case "sp69f71e42798c7f55":
-                                company.setPackageProject(1);//项目协作平台
-                                company.setPackageOa(1);//OA平台;请假,出差等
-                                company.setPackageExpense(1);//费用报销
-                                company.setPackageCustomer(1);//客户管理
-                                company.setPackageEngineering(0);//工程专业
-                                company.setPackageProvider(1);//供应商模块
+                                newCompany.setPackageProject(1);//项目协作平台
+                                newCompany.setPackageOa(1);//OA平台;请假,出差等
+                                newCompany.setPackageExpense(1);//费用报销
+                                newCompany.setPackageCustomer(1);//客户管理
+                                newCompany.setPackageEngineering(0);//工程专业
+                                newCompany.setPackageProvider(1);//供应商模块
                                 break;
                         }
                         LocalDateTime endTime = wxOrder.getEndTime();
-                        company.setExpirationDate(endTime);
-                        System.out.println("版本变更成功,到期时间更新成功。版本变更后的信息为:" + company.toString());
-                        companyMapper.updateById(company);
+                        newCompany.setExpirationDate(endTime);
+                        newCompany.setSetMeal(1);
+                        newCompany.setStaffCountMax(wxOrder.getUserCount());
+                        companyMapper.updateById(newCompany);
+                        System.out.println("版本变更成功,到期时间更新成功。");
+                    }else {
+                        System.out.println("未查询到该新建公司有支付订单");
                     }
                 } else {
                     //企业已经存在
@@ -2817,173 +2953,6 @@ public class WeiXinCorpController {
         return cnt>0;
     }
 
-    private boolean saveOrderAndUpCompany(org.json.JSONObject jsonObject) throws Exception {
-        System.err.println("+++++++++++++++++++订单回调开始++++++++++++++++++++++");
-        String infoType = jsonObject.getString("InfoType");
-        String suiteAccessToken = getSuiteAccessToken();
-        System.out.println("++++++++++++++++++++suiteAccessToken为:"+suiteAccessToken);
-        HttpHeaders headers = new HttpHeaders();
-        RestTemplate restTemplate = new RestTemplate();
-        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
-        headers.setContentType(type);
-        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
-        //版本变更
-        if ("change_editon".equals(infoType)){
-            String url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_auth_info?suite_access_token="+suiteAccessToken;
-            String paidCorpId = jsonObject.getString("PaidCorpId");
-            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", paidCorpId));
-            Company company = companyMapper.selectById(wxCorpInfo.getCompanyId());
-            if(company != null){
-                System.err.println("版本变更的公司信息为:");
-                System.err.println(wxCorpInfo.toString());
-                JSONObject map = new JSONObject();
-                map.put("auth_corpid",wxCorpInfo.getCorpid());
-                map.put("permanent_code",wxCorpInfo.getPermanentCode());
-                HttpEntity<JSONObject> detailEntity = new HttpEntity<>(map, headers);
-                ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(url, detailEntity, String.class);
-                JSONObject json = JSONObject.parseObject(detailResponseEntity.getBody());
-                System.out.println("+++++++++++++++++++++++++版本更新信息为:"+json);
-                if (json.containsKey("auth_corp_info")){
-                    String edition_id = json.getJSONObject("edition_info").getJSONArray("agent")
-                            .getJSONObject(0).getString("edition_id");
-                    switch (edition_id){
-                        //基础版
-                        case "sp17da4a6e6f2a91f8":
-                            company.setPackageProject(0);
-                            company.setPackageOa(0);
-                            company.setPackageExpense(0);
-                            company.setPackageCustomer(0);
-                            company.setPackageEngineering(0);
-                            company.setPackageProvider(0);
-                            break;
-                        //专业版
-                        case "sp4a30d92ede178afd":
-                            company.setPackageProject(1);//项目协作平台
-                            company.setPackageOa(0);//OA平台;请假,出差等
-                            company.setPackageExpense(1);//费用报销
-                            company.setPackageCustomer(0);//客户管理
-                            company.setPackageEngineering(0);//工程专业
-                            company.setPackageProvider(0);//供应商模块
-                            break;
-                        //建筑版
-                        case "spd04f1b0582a0fe19":
-                            company.setPackageProject(1);//项目协作平台
-                            company.setPackageOa(0);//OA平台;请假,出差等
-                            company.setPackageExpense(1);//费用报销
-                            company.setPackageCustomer(1);//客户管理
-                            company.setPackageEngineering(1);//工程专业
-                            company.setPackageProvider(0);//供应商模块
-                            break;
-                        //旗舰版
-                        case "sp69f71e42798c7f55":
-                            company.setPackageProject(1);//项目协作平台
-                            company.setPackageOa(1);//OA平台;请假,出差等
-                            company.setPackageExpense(1);//费用报销
-                            company.setPackageCustomer(1);//客户管理
-                            company.setPackageEngineering(0);//工程专业
-                            company.setPackageProvider(1);//供应商模块
-                            break;
-                    }
-                    companyMapper.updateById(company);
-                    System.out.println(company.getCompanyName()+"已成功变更版本,版本号为:"+edition_id);
-                }else {
-                    System.out.println("++++++++++++++++++++++"+"版本变更失败!"+"++++++++++++++++++++++++");
-                    return false;
-                }
-            }else {
-                System.err.println("#############################" + paidCorpId + "该公司尚未授权开通,将在授权开通后为其变更版本及更新到期时间。");
-            }
-        }else {
-            String orderId = "";
-            if (jsonObject.has("OrderId")){
-                orderId = jsonObject.getString("OrderId");
-            }else {
-                orderId = jsonObject.getString("NewOrderId");
-            }
-            WxOrder wxOrder = new WxOrder();
-            String detailUrl = "https://qyapi.weixin.qq.com/cgi-bin/service/get_order?suite_access_token=" + suiteAccessToken;
-            JSONObject detailMap = new JSONObject();
-            detailMap.put("orderid",orderId);
-            HttpEntity<JSONObject> detailEntity = new HttpEntity<>(detailMap, headers);
-            ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(detailUrl, detailEntity, String.class);
-            String body = detailResponseEntity.getBody();
-            System.out.println("+++++++++++++++++++++++++++++++++++++++订单详情信息!");
-            System.out.println(body);
-            JSONObject orderDetail = JSONObject.parseObject(body);
-            if (orderDetail.getInteger("errcode")==0){
-                wxOrder.setOrderid(orderDetail.getString("orderid"));
-                wxOrder.setOrderStatus(orderDetail.getInteger("order_status"));
-                wxOrder.setOrderType(orderDetail.getInteger("order_type"));
-                wxOrder.setPaidCorpid(orderDetail.getString("paid_corpid"));
-                if (orderDetail.containsKey("operator_id")){
-                    wxOrder.setOperatorId(orderDetail.getString("operator_id"));
-                }
-                wxOrder.setSuiteid(orderDetail.getString("suiteid"));
-                if (orderDetail.containsKey("appid")){
-                    wxOrder.setAppid(orderDetail.getString("appid"));
-                }
-                wxOrder.setEditionId(orderDetail.getString("edition_id"));
-                wxOrder.setEditionName(orderDetail.getString("edition_name"));
-                wxOrder.setPrice(orderDetail.getInteger("price"));
-                wxOrder.setUserCount(orderDetail.getInteger("user_count"));
-                wxOrder.setOrderPeriod(orderDetail.getInteger("order_period"));
-                LocalDateTime order_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("order_time"),0,ZoneOffset.ofHours(8));
-                wxOrder.setOrderTime(order_time);
-                if (orderDetail.getLong("paid_time")!=0){
-                    LocalDateTime paid_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("paid_time"),0,ZoneOffset.ofHours(8));
-                    wxOrder.setPaidTime(paid_time);
-                }
-                if (orderDetail.getLong("begin_time")!=0){
-                    LocalDateTime begin_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("begin_time"),0,ZoneOffset.ofHours(8));
-                    wxOrder.setBeginTime(begin_time);
-                }
-                if (orderDetail.getLong("end_time")!=0){
-                    LocalDateTime end_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("end_time"),0,ZoneOffset.ofHours(8));
-                    wxOrder.setEndTime(end_time);
-                }
-                wxOrder.setOrderFrom(orderDetail.getInteger("order_from"));
-                wxOrder.setOperatorCorpid(orderDetail.getString("operator_corpid"));
-                wxOrder.setServiceShareAmount(orderDetail.getInteger("service_share_amount"));
-                wxOrder.setPlatformShareAmount(orderDetail.getInteger("platform_share_amount"));
-                wxOrder.setDealerShareAmount(orderDetail.getInteger("dealer_share_amount"));
-                if (orderDetail.containsKey("dealer_corp_info")){
-                    JSONObject dealer_corp_info = orderDetail.getJSONObject("dealer_corp_info");
-                    wxOrder.setDealerCorpid(dealer_corp_info.getString("corpid"));
-                    wxOrder.setDealerCorpName(dealer_corp_info.getString("corp_name"));
-                }
-                //获取该公司对象
-                WxCorpInfo corpid = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("corpid", wxOrder.getPaidCorpid()));
-                if (corpid!=null){
-                    Company company = companyMapper.selectById(corpid.getCompanyId());
-                    if("pay_for_app_success".equals(infoType)){
-                        wxOrderMapper.updateById(wxOrder);
-                        Integer orderPeriod = wxOrder.getOrderPeriod();
-                        //若到期时间早已过期,则取当前时间加上开通时长
-                        if (LocalDateTime.now().isAfter(company.getExpirationDate())){
-                            company.setExpirationDate(LocalDateTime.now().plusDays(orderPeriod));
-                        }else {
-                            company.setExpirationDate(company.getExpirationDate().plusDays(orderPeriod));
-                        }
-                    }else if ("refund".equals(infoType)){
-                        wxOrderMapper.updateById(wxOrder);
-                        //退款则将其到期时间设置为现在的时间减去一天
-                        company.setExpirationDate(LocalDateTime.now().minusDays(1));
-                    }
-                }
-                if ("open_order".equals(infoType)){
-                    wxOrderMapper.insert(wxOrder);
-                }else if ("change_order".equals(infoType)){
-                    wxOrder.setOldOrderid(jsonObject.getString("OldOrderId"));
-                    wxOrderMapper.insert(wxOrder);
-                }
-            }else {
-                System.out.println("+++++++++++++"+"微信订单查询更新失败"+"+++++++++++++++");
-                return  false;
-            }
-        }
-        return true;
-    }
-
     @RequestMapping("getCorpAuthInfo")
     public HttpRespMsg getCorpAuthInfo(String corpId) throws Exception {
         HttpRespMsg msg = new HttpRespMsg();
@@ -3023,4 +2992,135 @@ public class WeiXinCorpController {
 
         return new HttpRespMsg();
     }
+
+    //查询订单
+    private WxOrder getOrder (String orderId) throws Exception {
+        String suiteAccessToken = getSuiteAccessToken();
+        System.out.println("++++++++++++++++++++suiteAccessToken为:"+suiteAccessToken);
+        HttpHeaders headers = new HttpHeaders();
+        RestTemplate restTemplate = new RestTemplate();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+        String detailUrl = "https://qyapi.weixin.qq.com/cgi-bin/service/get_order?suite_access_token=" + suiteAccessToken;
+        JSONObject detailMap = new JSONObject();
+        detailMap.put("orderid",orderId);
+        HttpEntity<JSONObject> detailEntity = new HttpEntity<>(detailMap, headers);
+        ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(detailUrl, detailEntity, String.class);
+        String body = detailResponseEntity.getBody();
+        System.out.println("+++++++++++++++++++++++++++++++++++++++订单详情信息!");
+        System.out.println(body);
+        JSONObject orderDetail = JSONObject.parseObject(body);
+        WxOrder wxOrder = new WxOrder();
+        if (orderDetail.getInteger("errcode")==0){
+            wxOrder.setOrderid(orderDetail.getString("orderid"));
+            wxOrder.setOrderStatus(orderDetail.getInteger("order_status"));
+            wxOrder.setOrderType(orderDetail.getInteger("order_type"));
+            wxOrder.setPaidCorpid(orderDetail.getString("paid_corpid"));
+            if (orderDetail.containsKey("operator_id")){
+                wxOrder.setOperatorId(orderDetail.getString("operator_id"));
+            }
+            wxOrder.setSuiteid(orderDetail.getString("suiteid"));
+            wxOrder.setEditionId(orderDetail.getString("edition_id"));
+            wxOrder.setEditionName(orderDetail.getString("edition_name"));
+            wxOrder.setPrice(orderDetail.getInteger("price"));
+            wxOrder.setUserCount(orderDetail.getInteger("user_count"));
+            wxOrder.setOrderPeriod(orderDetail.getInteger("order_period"));
+            LocalDateTime order_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("order_time"),0,ZoneOffset.ofHours(8));
+            wxOrder.setOrderTime(order_time);
+            if (orderDetail.getLong("paid_time")!=0){
+                LocalDateTime paid_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("paid_time"),0,ZoneOffset.ofHours(8));
+                wxOrder.setPaidTime(paid_time);
+            }
+            if (orderDetail.getLong("begin_time")!=0){
+                LocalDateTime begin_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("begin_time"),0,ZoneOffset.ofHours(8));
+                wxOrder.setBeginTime(begin_time);
+            }
+            if (orderDetail.getLong("end_time")!=0){
+                LocalDateTime end_time =LocalDateTime.ofEpochSecond(orderDetail.getLong("end_time"),0,ZoneOffset.ofHours(8));
+                wxOrder.setEndTime(end_time);
+            }
+            wxOrder.setOrderFrom(orderDetail.getInteger("order_from"));
+            wxOrder.setOperatorCorpid(orderDetail.getString("operator_corpid"));
+            wxOrder.setServiceShareAmount(orderDetail.getInteger("service_share_amount"));
+            wxOrder.setPlatformShareAmount(orderDetail.getInteger("platform_share_amount"));
+            wxOrder.setDealerShareAmount(orderDetail.getInteger("dealer_share_amount"));
+            if (orderDetail.containsKey("dealer_corp_info")){
+                JSONObject dealer_corp_info = orderDetail.getJSONObject("dealer_corp_info");
+                wxOrder.setDealerCorpid(dealer_corp_info.getString("corpid"));
+                wxOrder.setDealerCorpName(dealer_corp_info.getString("corp_name"));
+            }
+            return wxOrder;
+        }else {
+            System.out.println("+++++++++++++"+"微信订单查询更新失败"+"+++++++++++++++");
+            return  null;
+        }
+    }
+
+    //版本变更
+    private void versionChange (WxCorpInfo wxCorpInfo) throws Exception {
+        String suiteAccessToken = getSuiteAccessToken();
+        System.out.println("++++++++++++++++++++suiteAccessToken为:"+suiteAccessToken);
+        String url = "https://qyapi.weixin.qq.com/cgi-bin/service/get_auth_info?suite_access_token="+suiteAccessToken;
+        HttpHeaders headers = new HttpHeaders();
+        RestTemplate restTemplate = new RestTemplate();
+        MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+        headers.setContentType(type);
+        headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+        JSONObject map = new JSONObject();
+        map.put("auth_corpid",wxCorpInfo.getCorpid());
+        map.put("permanent_code",wxCorpInfo.getPermanentCode());
+        HttpEntity<JSONObject> detailEntity = new HttpEntity<>(map, headers);
+        ResponseEntity<String> detailResponseEntity = restTemplate.postForEntity(url, detailEntity, String.class);
+        JSONObject json = JSONObject.parseObject(detailResponseEntity.getBody());
+        System.out.println("+++++++++++++++++++++++++版本更新信息为:"+json);
+        Company newCompany = new Company();
+        newCompany.setId(wxCorpInfo.getCompanyId());
+        if (json.containsKey("auth_corp_info")){
+            String edition_id = json.getJSONObject("edition_info").getJSONArray("agent")
+                    .getJSONObject(0).getString("edition_id");
+            switch (edition_id){
+                //基础版
+                case "sp17da4a6e6f2a91f8":
+                    newCompany.setPackageProject(0);
+                    newCompany.setPackageOa(0);
+                    newCompany.setPackageExpense(0);
+                    newCompany.setPackageCustomer(0);
+                    newCompany.setPackageEngineering(0);
+                    newCompany.setPackageProvider(0);
+                    break;
+                //专业版
+                case "sp4a30d92ede178afd":
+                    newCompany.setPackageProject(1);//项目协作平台
+                    newCompany.setPackageOa(0);//OA平台;请假,出差等
+                    newCompany.setPackageExpense(1);//费用报销
+                    newCompany.setPackageCustomer(0);//客户管理
+                    newCompany.setPackageEngineering(0);//工程专业
+                    newCompany.setPackageProvider(0);//供应商模块
+                    break;
+                //建筑版
+                case "spd04f1b0582a0fe19":
+                    newCompany.setPackageProject(1);//项目协作平台
+                    newCompany.setPackageOa(0);//OA平台;请假,出差等
+                    newCompany.setPackageExpense(1);//费用报销
+                    newCompany.setPackageCustomer(1);//客户管理
+                    newCompany.setPackageEngineering(1);//工程专业
+                    newCompany.setPackageProvider(0);//供应商模块
+                    break;
+                //旗舰版
+                case "sp69f71e42798c7f55":
+                    newCompany.setPackageProject(1);//项目协作平台
+                    newCompany.setPackageOa(1);//OA平台;请假,出差等
+                    newCompany.setPackageExpense(1);//费用报销
+                    newCompany.setPackageCustomer(1);//客户管理
+                    newCompany.setPackageEngineering(0);//工程专业
+                    newCompany.setPackageProvider(1);//供应商模块
+                    break;
+            }
+            companyMapper.updateById(newCompany);
+            System.out.println("已成功变更版本,版本号为:"+edition_id);
+        }else {
+            System.out.println("++++++++++++++++++++++"+"版本变更失败!"+"++++++++++++++++++++++++");
+        }
+    }
 }

+ 1 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/WxOrder.java

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2022-11-09
+ * @since 2022-11-17
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -66,12 +66,6 @@ public class WxOrder extends Model<WxOrder> {
     @TableField("suiteid")
     private String suiteid;
 
-    /**
-     * 应用id。(仅旧套件有该字段)
-     */
-    @TableField("appid")
-    private String appid;
-
     /**
      * 购买版本ID
      */

+ 11 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -5934,8 +5934,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             List<Map<String,Object>> dataList=new ArrayList<>();
             long days =dateTimeList.size();
             List<LeaveSheet> leaveSheets = leaveSheetList.stream().filter(ls -> ls.getOwnerId().equals(user.getId())
-                    &&(ls.getStartDate().isAfter(ChronoLocalDate.from(sDate))||ls.getStartDate().isEqual(ChronoLocalDate.from(sDate))||ls.getStartDate().isBefore(ChronoLocalDate.from(eDate))||ls.getStartDate().isEqual(ChronoLocalDate.from(eDate)))
-                    &&(ls.getEndDate().isBefore(ChronoLocalDate.from(eDate))||ls.getEndDate().isEqual(ChronoLocalDate.from(eDate))||ls.getEndDate().isAfter(ChronoLocalDate.from(sDate))||ls.getEndDate().isEqual(ChronoLocalDate.from(sDate)))).collect(Collectors.toList());
+                    &&((ls.getStartDate().isBefore(ChronoLocalDate.from(eDate))||ls.getStartDate().isEqual(ChronoLocalDate.from(eDate))))
+                    &&((ls.getEndDate().isAfter(ChronoLocalDate.from(sDate))||ls.getEndDate().isEqual(ChronoLocalDate.from(sDate))))).collect(Collectors.toList());
             TimelinessRateVO timelinessRateVO=new TimelinessRateVO();
             timelinessRateVO.setUserName(user.getName());
             timelinessRateVO.setJobNumber(user.getJobNumber());
@@ -5949,6 +5949,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             //去掉填非工作日
             for (LocalDateTime localDateTime : dateTimeList) {
                 if(mapList!=null){
+                    //在非工作日下 填报了的情况下 及时填报了就算作及时率计算的基数
                     if(!WorkDayCalculateUtils.isWorkDay(localDateTime.toLocalDate())&&!mapList.stream().anyMatch(ml->{
                         Object date = ml.get("createDate");
                         LocalDate createDate = LocalDate.parse(String.valueOf(date));
@@ -5964,7 +5965,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
             }
             //请假的不参与及时率统计
-            //todo: 此处对请假的 数据做处理 计请假填报
+            //todo: 此处对请假的 数据做处理 计请假填报 去除请假日期中的需要填报的日期
             long daysWithLeave =days;
             if(leaveSheets.size()>0){
                 for (LeaveSheet leaveSheet : leaveSheets) {
@@ -5974,7 +5975,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }else{
                         days-=leaveSheet.getTimeDays();
                     }
+                    System.out.println(leaveDateList.size());
                     for (LocalDateTime localDateTime : leaveDateList) {
+                        //todo: 请假区间当中有非工作日在之前被当作 不需填报 所以要加上 保证基数正确
+                        if(!WorkDayCalculateUtils.isWorkDay(localDateTime.toLocalDate())){
+                            days+=1;
+                            continue;
+                        }
                         if(localDateTime.isBefore(sDate)||localDateTime.isAfter(eDate)){
                             days++;
                             continue;
@@ -5994,6 +6001,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
             }
             int num=0;
+            System.out.println(days);
             if(mapList!=null){
                 for (Map<String, Object> map : mapList) {
                     Map<String,Object> objectMap=new HashMap<>();

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -2414,6 +2414,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     public HttpRespMsg getUserListByRole(HttpServletRequest request) {
         HttpRespMsg httpRespMsg=new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
+        SysRole sysRole = sysRoleMapper.selectById(user.getRoleId());
         List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", user.getId()));
         List<DepartmentOtherManager> otherManagers = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", user.getId()));
         //获取全部子部门
@@ -2431,6 +2432,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         }
         if(deptIds!=null&&deptIds.size()>0){
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("department_id", deptIds));
+            if(sysRole.getRolename().equals("超级管理员")){
+                userList= userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId()));
+            }
             httpRespMsg.data=userList;
         }
         return httpRespMsg;

+ 1 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/WxOrderMapper.xml

@@ -11,7 +11,6 @@
         <result column="paid_corpid" property="paidCorpid" />
         <result column="operator_id" property="operatorId" />
         <result column="suiteid" property="suiteid" />
-        <result column="appid" property="appid" />
         <result column="edition_id" property="editionId" />
         <result column="edition_name" property="editionName" />
         <result column="price" property="price" />
@@ -32,7 +31,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        orderid, old_orderid, order_status, order_type, paid_corpid, operator_id, suiteid, appid, edition_id, edition_name, price, user_count, order_period, order_time, paid_time, begin_time, end_time, order_from, operator_corpid, service_share_amount, platform_share_amount, dealer_share_amount, dealer_corpid, dealer_corp_name
+        orderid, old_orderid, order_status, order_type, paid_corpid, operator_id, suiteid, edition_id, edition_name, price, user_count, order_period, order_time, paid_time, begin_time, end_time, order_from, operator_corpid, service_share_amount, platform_share_amount, dealer_share_amount, dealer_corpid, dealer_corp_name
     </sql>
 
 </mapper>

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/corpreport/list.vue

@@ -1336,7 +1336,7 @@ export default {
                   this.groupWorktimeList.right = []
                   this.getGroupWorktimeList()
                 }else{
-                  this.getList();
+                  this.getList(true);
                 }
             },
             groupSizeChange(val){
@@ -2293,7 +2293,7 @@ export default {
       }
       if(this.ins == 12){
         this.proJuctId = ''
-        this.getList()
+        this.getList(true)
       }
       if(this.ins == 15) {
         this.getDepartmentsInvolved()

+ 18 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -1935,7 +1935,15 @@
                 let hours = 0
                 for(let i in domains){
                     if(domains[i].projectId){
-                        hours += domains[i].workingTime ? parseFloat(domains[i].workingTime) : 0
+                        if(this.reportTimeType.multiWorktime == 1){
+                            for(let m in domains[i].worktimeList){
+                                if(domains[i].worktimeList[m].startTime && domains[i].worktimeList[m].endTime){
+                                    hours += this.getHour(domains[i].worktimeList[m].startTime, domains[i].worktimeList[m].endTime)
+                                }
+                            }
+                        }else{
+                            hours += domains[i].workingTime ? parseFloat(domains[i].workingTime) : 0
+                        }
                     }
                 }
                 return hours.toFixed(1)
@@ -1969,6 +1977,15 @@
             test(){
                 // console.log('test',this.depData,this.data[0].membCount,this.reportList.length);
             },
+            getHour(s1, s2) {
+                var reDate = /\d{4}-\d{1,2}-\d{1,2} /;
+                s1 = new Date((reDate.test(s1) ? s1 : '2018-1-1 ' + s1).replace(/-/g, '/'));
+                s2 = new Date((reDate.test(s2) ? s2 : '2018-1-1 ' + s2).replace(/-/g, '/'));
+                var ms = s2.getTime() - s1.getTime();
+                if (ms < 0) return 0;
+                let ma = ms / 1000 / 60 / 60
+                return ma;  //小时
+            },
             refreshWXCardTime(workdate) {
                 if (!workdate) return;
                 this.syncTimeLoading = true;

+ 3 - 1
fhKeeper/formulahousekeeper/timesheet_h5/public/index.html

@@ -21,10 +21,12 @@
 
     <meta name="wpk-bid" content="dta_2_71020">
         <script>
-        var isDingtalk = navigator && /DingTalk/.test(navigator.userAgent);var isProductEnv = window &&window.location &&window.location.host 
+        var isDingtalk = navigator && /DingTalk/.test(navigator.userAgent);
+        var isProductEnv = window &&window.location &&window.location.host 
         && window.location.host.indexOf('//127.0.0.1')===-1
         && window.location.host.indexOf('//localhost')===-1
         && window.location.host.indexOf('//192.168.')===-1
+        && window.location.host.indexOf('//mldworktime')===-1
         // 如果有其它测试域名,请一起排掉,减少测试环境对生产环境监控的干扰
         if (isProductEnv) {    !(function(c,i,e,b){var h=i.createElement("script");var f=i.getElementsByTagName("script")[0];h.type="text/javascript";h.crossorigin=true;h.onload=function(){c[b]||(c[b]=new c.wpkReporter({bid:"dta_2_71020"}));c[b].installAll()};f.parentNode.insertBefore(h,f);h.src=e})(window,document,"https://g.alicdn.com/woodpeckerx/jssdk??wpkReporter.js","__wpk"); }
     </script>

+ 19 - 1
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -497,7 +497,16 @@ import timetoolVue from '../timetool/timetool.vue';
                 let hours = 0
                 for(let i in domains){
                     if(domains[i].projectId){
-                        hours += parseFloat(domains[i].workingTime)
+                        // hours += parseFloat(domains[i].workingTime)
+                        if(this.reportTimeType.multiWorktime == 1){
+                            for(let m in domains[i].worktimeList){
+                                if(domains[i].worktimeList[m].startTime && domains[i].worktimeList[m].endTime){
+                                    hours += this.getHour(domains[i].worktimeList[m].startTime, domains[i].worktimeList[m].endTime)
+                                }
+                            }
+                        }else{
+                            hours += domains[i].workingTime ? parseFloat(domains[i].workingTime) : 0
+                        }
                     }
                 }
                 return hours.toFixed(1)
@@ -505,6 +514,15 @@ import timetoolVue from '../timetool/timetool.vue';
         },
 
         methods: {
+            getHour(s1, s2) {
+                var reDate = /\d{4}-\d{1,2}-\d{1,2} /;
+                s1 = new Date((reDate.test(s1) ? s1 : '2018-1-1 ' + s1).replace(/-/g, '/'));
+                s2 = new Date((reDate.test(s2) ? s2 : '2018-1-1 ' + s2).replace(/-/g, '/'));
+                var ms = s2.getTime() - s1.getTime();
+                if (ms < 0) return 0;
+                let ma = ms / 1000 / 60 / 60
+                return ma;  //小时
+            },
             
             cardtimeRefresh(workdate){  // 考勤记录刷新
             if (!workdate) return;