ソースを参照

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

ggooalice 2 年 前
コミット
47af1d9c82
21 ファイル変更451 行追加24 行削除
  1. 3 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyController.java
  2. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CorpwxPreAuthCodeController.java
  3. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CorpwxRegisterCodeController.java
  4. 37 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  5. 53 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CorpwxPreAuthCode.java
  6. 46 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CorpwxRegisterCode.java
  7. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/CorpwxPreAuthCodeMapper.java
  8. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/CorpwxRegisterCodeMapper.java
  9. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CorpwxPreAuthCodeService.java
  10. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CorpwxRegisterCodeService.java
  11. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CorpwxPreAuthCodeServiceImpl.java
  12. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CorpwxRegisterCodeServiceImpl.java
  13. 35 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java
  14. 33 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/InformationServiceImpl.java
  15. 47 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskProgressServiceImpl.java
  16. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CorpwxPreAuthCodeMapper.xml
  17. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CorpwxRegisterCodeMapper.xml
  18. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/Home.vue
  19. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue
  20. 3 2
      fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue
  21. 9 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyController.java

@@ -83,7 +83,7 @@ public class CompanyController {
             HttpRespMsg msg = new HttpRespMsg();
             String token = request.getHeader("TOKEN");
             User user = userMapper.selectById(token);
-            //判断时间
+            /*//判断时间
             long now = System.currentTimeMillis();
             if (syncLog.get(token) == null) {
                 syncLog.put(token, now);
@@ -110,7 +110,7 @@ public class CompanyController {
                         }
                     }
                 }
-            }
+            }*/
 
             Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", user.getCompanyId()));
             Integer employeeCnt = userMapper.selectCount(new QueryWrapper<User>().eq("company_id", company.getId()).eq("is_active",1));
@@ -123,7 +123,7 @@ public class CompanyController {
             if (companyDingding != null) {
                 System.out.println("===========同步钉钉===========");
                 String rest = dingDingService.syncCorpMembs(companyDingding.getCorpid());
-                syncLog.remove(user.getCompanyId()+"_status");
+                /*syncLog.remove(user.getCompanyId()+"_status");*/
                 if (rest.startsWith("调用失败")) {
                     msg.setError(rest);
                 } else {

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CorpwxPreAuthCodeController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+@RestController
+@RequestMapping("/corpwx-pre-auth-code")
+public class CorpwxPreAuthCodeController {
+
+}
+

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CorpwxRegisterCodeController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+@RestController
+@RequestMapping("/corpwx-register-code")
+public class CorpwxRegisterCodeController {
+
+}
+

+ 37 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -55,7 +55,7 @@ public class WeiXinCorpController {
     //获取企业永久授权码
     public static final String GET_CORP_PERMANENT_CODE_URL = "https://qyapi.weixin.qq.com/cgi-bin/service/get_permanent_code?suite_access_token=SUITE_ACCESS_TOKEN";
     public static final String GET_CORP_ACCESSTOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/service/get_corp_token?suite_access_token=SUITE_ACCESS_TOKEN";
-
+    public static final String GET_AUTH_INFO = "https://qyapi.weixin.qq.com/cgi-bin/service/get_auth_info?suite_access_token=SUITE_ACCESS_TOKEN";
     //获取成员详情
     public static final String GET_USER_INFO_URL = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&userid=USERID";
     //获取部门列表
@@ -2048,16 +2048,45 @@ public class WeiXinCorpController {
             exception.printStackTrace();
         }
         if (wxCorpInfo.getAuthMode() == 0) {
+            //修正: 获取企业的人员授权范围
+            JSONArray allowUserList = null;
+            JSONArray allowPartyList = null;
+            try {
+                String url = GET_AUTH_INFO.replaceAll("SUITE_ACCESS_TOKEN", getSuiteAccessToken());
+                JSONObject map = new JSONObject();
+                map.put("auth_corpid",wxCorpInfo.getCorpid());
+                map.put("permanent_code",wxCorpInfo.getPermanentCode());
+                HttpHeaders headers = new HttpHeaders();
+                headers.setContentType(MediaType.APPLICATION_JSON);
+                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.toJSONString());
+                if (json.containsKey("auth_corp_info")){
+                    JSONArray jsonArray = json.getJSONObject("auth_info").getJSONArray("agent");
+                    for (int i=0;i<jsonArray.size(); i++) {
+                        JSONObject jsonObject = jsonArray.getJSONObject(i);
+                        if (jsonObject.getString("name").equals("工时管家")) {
+                            System.out.println(jsonObject);
+                            JSONObject privilege = jsonObject.getJSONObject("privilege");
+                            allowUserList = privilege.getJSONArray("allow_user");
+                            allowPartyList = privilege.getJSONArray("allow_party");
+                            break;
+                        }
+                    }
+                }
+            } catch (Exception exception) {
+                exception.printStackTrace();
+            }
             //管理员授权模式下,获取部门人员
             int companyRootDeptId = 1;
-            JSONArray usersUnderRootArray = getDeptUserInfo(curCorpAccessToken, companyRootDeptId);
-            System.out.println("获取到公司下的员工数量="+usersUnderRootArray.size());
             SysRole defaultRole = sysRoleMapper.selectOne(
                     new QueryWrapper<SysRole>().eq("company_id", companyId).eq("is_default", 1));
             List<User> allCorpWxUserList = new ArrayList<>();
-            for (int m=0;m<usersUnderRootArray.size(); m++) {
-                JSONObject userJson = usersUnderRootArray.getJSONObject(m);
-                System.out.println(userJson.toString());
+            //单独授权的人员,获取人员详情进行处理
+            for (int i=0;i<allowUserList.size(); i++) {
+                String allowUserId = allowUserList.getString(i);
+                JSONObject userJson = getUserInfo(curCorpAccessToken, allowUserId);
                 String curUserid = userJson.getString("userid");
                 String openUserid = userJson.getString("open_userid");
                 //跳过非激活状态的员工
@@ -2067,8 +2096,8 @@ public class WeiXinCorpController {
                 JSONArray userDeptArray = userJson.getJSONArray("department");
                 //取最末级的,也就是最大的deptId
                 int maxDeptId = 1;
-                for (int i=0;i<userDeptArray.size(); i++) {
-                    int curId = userDeptArray.getInteger(i);
+                for (int m=0;m<userDeptArray.size(); m++) {
+                    int curId = userDeptArray.getInteger(m);
                     if (curId > maxDeptId) maxDeptId = curId;
                 }
                 user.setId(SnowFlake.nextId()+"")

+ 53 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CorpwxPreAuthCode.java

@@ -0,0 +1,53 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CorpwxPreAuthCode extends Model<CorpwxPreAuthCode> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("code")
+    private String code;
+
+    @TableField("indate")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime indate;
+
+    @TableField("expire_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime expireTime;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 46 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CorpwxRegisterCode.java

@@ -0,0 +1,46 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CorpwxRegisterCode extends Model<CorpwxRegisterCode> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("code")
+    private String code;
+
+    @TableField("indate")
+    private LocalDateTime indate;
+
+    @TableField("expire_time")
+    private LocalDateTime expireTime;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/CorpwxPreAuthCodeMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.CorpwxPreAuthCode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+public interface CorpwxPreAuthCodeMapper extends BaseMapper<CorpwxPreAuthCode> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/CorpwxRegisterCodeMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.CorpwxRegisterCode;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+public interface CorpwxRegisterCodeMapper extends BaseMapper<CorpwxRegisterCode> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CorpwxPreAuthCodeService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.CorpwxPreAuthCode;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+public interface CorpwxPreAuthCodeService extends IService<CorpwxPreAuthCode> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CorpwxRegisterCodeService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.CorpwxRegisterCode;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+public interface CorpwxRegisterCodeService extends IService<CorpwxRegisterCode> {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CorpwxPreAuthCodeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.CorpwxPreAuthCode;
+import com.management.platform.mapper.CorpwxPreAuthCodeMapper;
+import com.management.platform.service.CorpwxPreAuthCodeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+@Service
+public class CorpwxPreAuthCodeServiceImpl extends ServiceImpl<CorpwxPreAuthCodeMapper, CorpwxPreAuthCode> implements CorpwxPreAuthCodeService {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CorpwxRegisterCodeServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.CorpwxRegisterCode;
+import com.management.platform.mapper.CorpwxRegisterCodeMapper;
+import com.management.platform.service.CorpwxRegisterCodeService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-11-22
+ */
+@Service
+public class CorpwxRegisterCodeServiceImpl extends ServiceImpl<CorpwxRegisterCodeMapper, CorpwxRegisterCode> implements CorpwxRegisterCodeService {
+
+}

+ 35 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -72,6 +73,8 @@ public class DingDingServiceImpl implements DingDingService {
     @Resource
     private SysRoleMapper sysRoleMapper;
     @Resource
+    private HttpServletRequest request;
+    @Resource
     private SysModuleMapper sysModuleMapper;
     @Resource
     private LeaveQuotaNumService leaveQuotaNumService;
@@ -135,6 +138,8 @@ public class DingDingServiceImpl implements DingDingService {
     @Value("${configEnv.isDev}")
     private boolean isDev;//是否是本地开发环境
 
+    public static final HashMap<String, Long> syncLog = new HashMap();
+
     @Override
     public synchronized HttpRespMsg initSystem(String corpid) throws ApiException {
         System.out.println("========接收到initSystem请求===corpid="+corpid);
@@ -351,6 +356,35 @@ public class DingDingServiceImpl implements DingDingService {
     public String syncCorpMembs(String corpid) throws ApiException {
         CompanyDingding dingding = companyDingdingMapper.selectById(corpid);
         String accessToken = null;
+        Integer companyId = dingding.getCompanyId();
+        Company company = companyMapper.selectById(companyId);
+        String token=company.getCompanyName();
+        //判断时间
+        long now = System.currentTimeMillis();
+        if (syncLog.get(token) == null) {
+            syncLog.put(token, now);
+            syncLog.put(company.getId()+"_status", 1L);
+        } else {
+            if (now - syncLog.get(token) < 30*1000) {
+                //msg.setError("调用过于频繁,请稍后再试");
+                return MessageUtils.message("Company.callError");
+            } else {
+                //检查是否当前公司有同步的正在进行
+                if (syncLog.get(company.getId()+"_status") == null) {
+                    //没有进行中的任务,更新最近同步的时间
+                    syncLog.put(token, now);
+                    syncLog.put(company.getId()+"_status", 1L);
+                } else {
+                    if (now - syncLog.get(token) > 0.5*3600*1000) {
+                        //更新最近同步的时间
+                        syncLog.put(token, now);
+                    } else {
+                        //msg.setError("同步正在进行中,请稍后再试");
+                        return MessageUtils.message("Company.synError");
+                    }
+                }
+            }
+        }
         if (dingding == null) {
             System.out.println("corpid不存在=="+corpid);
             return "调用失败:corpid不存在==";
@@ -388,6 +422,7 @@ public class DingDingServiceImpl implements DingDingService {
             System.out.println("syncCorpMembs 开始获取部门, accessToken="+accessToken);
             //获取授权的部门
             getAuthedDeptsAndUsers(dingding, accessToken);
+            syncLog.remove(company.getId()+"_status");
             return "调用成功";
         }
     }

+ 33 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/InformationServiceImpl.java

@@ -3,8 +3,12 @@ package com.management.platform.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.Information;
+import com.management.platform.entity.TaskComment;
+import com.management.platform.entity.User;
+import com.management.platform.entity.WxCorpInfo;
 import com.management.platform.mapper.InformationMapper;
 import com.management.platform.mapper.UserMapper;
+import com.management.platform.mapper.WxCorpInfoMapper;
 import com.management.platform.service.InformationService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
@@ -12,6 +16,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * <p>
@@ -30,13 +35,38 @@ public class InformationServiceImpl extends ServiceImpl<InformationMapper, Infor
     @Resource
     private UserMapper userMapper;
 
+    @Resource
+    private WxCorpInfoMapper wxCorpInfoMapper;
+
     @Override
     public HttpRespMsg getInformationList(HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
-            String userId = userMapper.selectById(request.getHeader("Token")).getId();
-            httpRespMsg.data = informationMapper.selectList(new QueryWrapper<Information>()
-                    .eq("user_id", userId).orderByDesc("time").last("LIMIT 10"));
+            User user = userMapper.selectById(request.getHeader("token"));
+            List<Information> information = informationMapper.selectList(new QueryWrapper<Information>()
+                    .eq("user_id", user.getId()).orderByDesc("time").last("LIMIT 10"));
+            WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",user.getCompanyId()));
+            if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
+                List<User> users = userMapper.selectList(new QueryWrapper<User>().eq("company_id",user.getCompanyId()));
+                for (Information info : information) {
+                    if (info.getMsg() == null){
+                        continue;
+                    } else if (info.getMsg().contains("更新任务进展为")){
+                        String name = info.getMsg().substring(0, info.getMsg().indexOf("更新任务进展为"));
+                        String userWxId = "";
+                        for (User item : users) {
+                            if (name.equals(item.getName())){
+                                userWxId = item.getCorpwxRealUserid();
+                                break;
+                            }
+                        }
+                        String msg = info.getMsg();
+                        String newMsg = msg.replace(name, "$userName=" + userWxId + "$");
+                        info.setMsg(newMsg);
+                    }
+                }
+            }
+            httpRespMsg.data = information;
         } catch (NullPointerException e) {
             //httpRespMsg.setError("验证失败");
             httpRespMsg.setError(MessageUtils.message("access.verificationError"));

+ 47 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskProgressServiceImpl.java

@@ -1,11 +1,14 @@
 package com.management.platform.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.TaskProgressService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.service.TprogressPaticipatorsService;
+import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.ListUtil;
 import com.management.platform.util.MessageUtils;
@@ -45,6 +48,10 @@ public class TaskProgressServiceImpl extends ServiceImpl<TaskProgressMapper, Tas
     private ProjectMapper projectMapper;
     @Resource
     private TaskCommentMapper taskCommentMapper;
+    @Resource
+    private WxCorpInfoService wxCorpInfoService;
+    @Resource
+    private WxCorpInfoMapper wxCorpInfoMapper;
     //String[] statusList = new String[]{"状态正常", "存在风险", "进展逾期"};
     @Override
     public HttpRespMsg addProgress(TaskProgress progress, String participatorIds, HttpServletRequest request) {
@@ -77,7 +84,9 @@ public class TaskProgressServiceImpl extends ServiceImpl<TaskProgressMapper, Tas
         String updateStr = creator.getName()+MessageUtils.message("stages.upTask") + status;
         comment.setContent(updateStr);
         taskCommentMapper.insert(comment);
-
+        Task task = taskMapper.selectById(progress.getTaskId());
+        Project project = projectMapper.selectById(task.getProjectId());
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", creator.getCompanyId()));
         if (!StringUtils.isEmpty(participatorIds)) {
             List<String> ids = ListUtil.convertLongIdsArrayToList(participatorIds);
             List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", ids));
@@ -87,16 +96,50 @@ public class TaskProgressServiceImpl extends ServiceImpl<TaskProgressMapper, Tas
                 item.setUserId(user.getId());
                 item.setUserName(user.getName());
                 tprogressPaticipatorsMapper.insert(item);
-
                 //发消息通知进展
                 Information information = new Information();
-                information.setContent(""+progress.getTaskId());
+                Integer projectId = taskMapper.selectById(progress.getTaskId()).getProjectId();
+                information.setContent(""+projectId);
                 information.setMsg(updateStr);
                 information.setUserId(user.getId());
                 information.setType(2);
                 informationMapper.insert(information);
-
                 //TODO:如果关联了微信或者企业微信,可以推送通知
+                if(user.getCorpwxUserid()!=null){
+                    String corpwxUserid = user.getCorpwxUserid();
+                    //推送到企业微信
+                    JSONObject json=new JSONObject();
+                    JSONArray dataJson=new JSONArray();
+                    JSONObject jsonObj=new JSONObject();
+                    jsonObj.put("key", "项目名称");
+                    jsonObj.put("value",project.getProjectName());
+
+                    JSONObject jsonObj1=new JSONObject();
+                    jsonObj1.put("key", "任务名称");
+                    jsonObj1.put("value",task.getName());
+
+                    JSONObject jsonObj2=new JSONObject();
+                    jsonObj2.put("key", "进展内容");
+                    jsonObj2.put("value",progress.getContent());
+
+                    JSONObject jsonObj3=new JSONObject();
+                    jsonObj3.put("key", "任务状态");
+                    switch (progress.getStatus()){
+                        case 0:jsonObj3.put("value","状态正常");
+                        break;
+                        case 1:jsonObj3.put("value","存在风险");
+                        break;
+                        case 2:jsonObj3.put("value","进展逾期");
+                    }
+                    dataJson.add(jsonObj);
+                    dataJson.add(jsonObj1);
+                    dataJson.add(jsonObj2);
+                    dataJson.add(jsonObj3);
+                    json.put("template_id","tty9TkCAAASja8aiHGlheqEHQ7OIpRyg");
+                    json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://worktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
+                    json.put("content_item",dataJson);
+                    wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfo, corpwxUserid, json);
+                }
             }
         }
 

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CorpwxPreAuthCodeMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.CorpwxPreAuthCodeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.CorpwxPreAuthCode">
+        <id column="id" property="id" />
+        <result column="code" property="code" />
+        <result column="indate" property="indate" />
+        <result column="expire_time" property="expireTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, code, indate, expire_time
+    </sql>
+
+</mapper>

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/CorpwxRegisterCodeMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.CorpwxRegisterCodeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.CorpwxRegisterCode">
+        <id column="id" property="id" />
+        <result column="code" property="code" />
+        <result column="indate" property="indate" />
+        <result column="expire_time" property="expireTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, code, indate, expire_time
+    </sql>
+
+</mapper>

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/Home.vue

@@ -43,7 +43,7 @@
                                 src="../assets/image/code.jpg" />
                             </div>
                             <div v-if="isCorpWX">
-                                <div>客服微信</div>
+                                <div>{{ $t('ke-fu-wei-xin') }}</div>
                                 <img
                                 style="width: 120px; height: 120px"
                                 src="../assets/image/qwcode.png" />

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/expense/expense.vue

@@ -321,14 +321,14 @@
         <div class="informant"><!--  报销人 -->
           <el-form :model="ParticularsList" label-width="80px">
             <el-form-item :label="$t('peopleconcerned')" style="width: 270px" :rules="{ required: true, message: $t('pleaseselecttheapplicant'), trigger: 'blur' }">
-              <!-- <el-input v-show="flg" v-model="ParticularsList.ownerName" disabled ></el-input> -->
+              <el-input v-show="flg" v-model="ParticularsList.ownerName" disabled v-if="user.userNameNeedTranslate != '1'"></el-input>
               <!-- <el-select v-model="ParticularsList.ownerId" :placeholder="$t('pleaseselecttheapplicant')" style="width: 150px" :disabled="flg || ParticularsList.ownerId == ParticularsList.operatorId">
                 <span v-for="(item, index) in users" :key="index">
                   <el-option :label="item.name" :value="item.id"></el-option>
                 </span>
               </el-select> -->
 
-              <selectCat v-if="user.userNameNeedTranslate != '1'" :size="'medium'" :widthStr="'150'" :distinction="'3'" :subject="users" :disabled="flg || ParticularsList.ownerId == ParticularsList.operatorId" :subjectId="ParticularsList.ownerId" ref="selectCat" @selectCal="selectCal"></selectCat>
+              <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :widthStr="'150'" :distinction="'3'" :subject="users" :disabled="flg || ParticularsList.ownerId == ParticularsList.operatorId" :subjectId="ParticularsList.ownerId" ref="selectCat" @selectCal="selectCal"></selectCat>
 
             </el-form-item>
             <el-form-item :label="$t('fillinthedate')">

+ 3 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/finance.vue

@@ -188,8 +188,9 @@
             <el-table-column prop="name" :label="$t('lable.name')" sortable width="150" fixed="left">
                 <template slot-scope="scope">
                     <div>
-                        <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName' :openid='scope.row.name'></ww-open-data></span>
-                        <span v-if="user.userNameNeedTranslate != '1'">{{scope.row.name}}</span>
+                        <!-- <span v-if="user.userNameNeedTranslate == '1'"><ww-open-data type='userName' :openid='scope.row.name'></ww-open-data></span> -->
+                        <!-- <span v-if="user.userNameNeedTranslate != '1'">{{scope.row.name}}</span> -->
+                        {{scope.row.name}}
                     </div>
                 </template>
             </el-table-column>

+ 9 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

@@ -1,5 +1,7 @@
 <template>
     <section class="sectionaa">
+        <div v-loading="!componentFlg" :style="'width: 100%;height:'+tableHeight+'px'" id="components">
+        <div v-if="componentFlg">
         <el-tabs v-model="activeName" @tab-click="handleClick">
             <el-tab-pane :label="$t('maincontent')" name="project" @click="null" disabled=true>
                 <template slot="label">
@@ -1041,6 +1043,8 @@
                 </el-upload>
             </div>
         </el-dialog>
+        </div>
+        </div>
     </section>
 </template>
 <script>
@@ -1084,6 +1088,7 @@
         
         data() {
             return {
+                componentFlg: false,
                 mileageCup: false,
                 loadingExport : false,
                 saveTemplateLoading: false,
@@ -3305,6 +3310,10 @@
                 that.stageListHeight = that.tableHeight - 45;
                 that.taskListinH = that.stageListHeight - 75;
             };
+
+            setTimeout(function(){
+                that.componentFlg = true
+            }, 1000)
         },
         mounted() {
 
@@ -3317,7 +3326,6 @@
             
             this.getInsideData();
             this.getGroupTemplate();
-            
         }
     };
 </script>