Przeglądaj źródła

修改一批bug

seyason 4 lat temu
rodzic
commit
90043d0d14
39 zmienionych plików z 1425 dodań i 192 usunięć
  1. 30 0
      cloud-model/src/main/java/com/hssx/cloudmodel/config/RestTemplateConfig.java
  2. 2 0
      cloud-model/src/main/java/com/hssx/cloudmodel/constant/Constant.java
  3. 29 0
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/BannerPictureController.java
  4. 38 0
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/CompanyController.java
  5. 1 0
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/EquipmentRecCommandController.java
  6. 4 4
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/MouldController.java
  7. 4 4
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/MouldFileController.java
  8. 12 2
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/PowerController.java
  9. 2 2
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/ProjectFileController.java
  10. 26 8
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/UserController.java
  11. 67 0
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/WeiXinController.java
  12. 390 0
      cloud-model/src/main/java/com/hssx/cloudmodel/controller/WeiXinCorpController.java
  13. 31 1
      cloud-model/src/main/java/com/hssx/cloudmodel/entity/Mould.java
  14. 32 12
      cloud-model/src/main/java/com/hssx/cloudmodel/entity/User.java
  15. 1 0
      cloud-model/src/main/java/com/hssx/cloudmodel/entity/vo/UserVO.java
  16. 4 0
      cloud-model/src/main/java/com/hssx/cloudmodel/service/CompanyService.java
  17. 2 2
      cloud-model/src/main/java/com/hssx/cloudmodel/service/MouldFileService.java
  18. 1 1
      cloud-model/src/main/java/com/hssx/cloudmodel/service/MouldService.java
  19. 2 0
      cloud-model/src/main/java/com/hssx/cloudmodel/service/PowerService.java
  20. 1 1
      cloud-model/src/main/java/com/hssx/cloudmodel/service/ProjectFileService.java
  21. 5 1
      cloud-model/src/main/java/com/hssx/cloudmodel/service/UserService.java
  22. 17 24
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/CompanyServiceImpl.java
  23. 120 58
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldFileServiceImpl.java
  24. 4 3
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldHistoryServiceImpl.java
  25. 33 8
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldServiceImpl.java
  26. 8 0
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/PowerServiceImpl.java
  27. 4 3
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/ProjectFileServiceImpl.java
  28. 5 0
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/ProjectServiceImpl.java
  29. 169 40
      cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/UserServiceImpl.java
  30. 1 1
      cloud-model/src/main/java/com/hssx/cloudmodel/util/CodeGenerator.java
  31. 127 0
      cloud-model/src/main/java/com/hssx/cloudmodel/util/EmojiHttpServletRequestWraper.java
  32. 94 0
      cloud-model/src/main/java/com/hssx/cloudmodel/util/JsapiTicketUtil.java
  33. 40 0
      cloud-model/src/main/java/com/hssx/cloudmodel/util/MD5Util.java
  34. 79 0
      cloud-model/src/main/java/com/hssx/cloudmodel/util/Sha1Util.java
  35. 3 1
      cloud-model/src/main/resources/application-prod.properties
  36. 9 0
      cloud-model/src/main/resources/application.properties
  37. 1 1
      cloud-model/src/main/resources/mapper/MouldEquipmentMapper.xml
  38. 8 3
      cloud-model/src/main/resources/mapper/MouldMapper.xml
  39. 19 12
      cloud-model/src/main/resources/mapper/UserMapper.xml

+ 30 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/config/RestTemplateConfig.java

@@ -0,0 +1,30 @@
+package com.hssx.cloudmodel.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.http.converter.StringHttpMessageConverter;
+import org.springframework.web.client.RestTemplate;
+
+import java.nio.charset.StandardCharsets;
+
+@Configuration
+public class RestTemplateConfig {
+
+    @Bean
+    public RestTemplate restTemplate(ClientHttpRequestFactory factory){
+        RestTemplate restTemplate = new RestTemplate(factory);
+        restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        return restTemplate;
+    }
+
+    @Bean
+    public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
+        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+        factory.setConnectTimeout(15000);
+        factory.setReadTimeout(5000);
+        return factory;
+    }
+
+}

+ 2 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/constant/Constant.java

@@ -21,9 +21,11 @@ public class Constant {
     public static final Integer SYS_ID = 1;//系统管理员的id
     public static final String PROJECT_PREFIX = "YMXM";//项目编号
     public static final String UPLOAD = "上传";//上传
+    public static final String APPLY_DELETE = "申请删除";//上传
     public static final String UPDATE = "申请模具更新";//申请模具更新
     public static final String DOWNLOAD = "下载";//下载
     public static final String APPROVAL = "审批";//审批
+    public static final String DEL_APPROVAL = "删除审批";//删除审批
     public static final Integer UPDATE_AUTHORITY = 0;//修改权限
     public static final Integer DOWNLOAD_AUTHORITY = 1;//下载权限
     public static final Integer VIEW_AUTHORITY = 2;//浏览权限

+ 29 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/controller/BannerPictureController.java

@@ -0,0 +1,29 @@
+package com.hssx.cloudmodel.controller;
+
+import com.hssx.cloudmodel.entity.vo.CompanyVO;
+import com.hssx.cloudmodel.util.HttpRespMsg;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.net.URI;
+
+@RestController
+@RequestMapping("/banner-pictures")
+public class BannerPictureController {
+    @Autowired
+    RestTemplate restTemplate;
+
+    @ApiOperation("获取广告图片")
+    @RequestMapping("/getBannerUrl")
+    @ResponseBody
+    public HttpRespMsg getBannerUrl() {
+        return restTemplate.getForObject("http://111.231.87.63:8088/banner-pictures/getBannerUrl", HttpRespMsg.class);
+    }
+}

+ 38 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/controller/CompanyController.java

@@ -86,6 +86,30 @@ public class CompanyController {
         return msg;
     }
 
+    @ApiOperation("修改管理员")
+    @RequestMapping("/changeAdmin")
+    @ResponseBody
+    public HttpRespMsg changeAdmin(Integer companyId, Integer userId, String username) {
+        HttpRespMsg msg = new HttpRespMsg();
+        Company company = new Company();
+        company.setId(companyId);
+        company.setAdministrator(username);
+        company.setAdministratorId(userId);
+        companyService.updateById(company);
+        return msg;
+    }
+
+
+    @ApiOperation("新增为管理员")
+    @RequestMapping("/newAdmin")
+    @ResponseBody
+    public HttpRespMsg newAdmin(Integer companyId, String username, String account, String roleName) {
+        HttpRespMsg msg = new HttpRespMsg();
+        msg = companyService.newAdmin(companyId, username, account, roleName);
+        return msg;
+    }
+
+
 
     @ApiOperation("公司详情")
     @RequestMapping("/detail")
@@ -109,6 +133,20 @@ public class CompanyController {
         return msg;
     }
 
+    /**
+     * 建立关联公司时的公司列表
+     * 参数:companyType 公司类型 0-资产方 1-生产方
+     * @return
+     */
+    @ApiOperation("建立关联公司时的公司列表")
+    @RequestMapping("/getRelatedProducerList")
+    @ResponseBody
+    public HttpRespMsg getRelatedProducerList(@RequestParam Integer companyId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        msg = companyService.getRelatedProducerList(companyId);
+        return msg;
+    }
+
     /**
      * 创建模具获取的(资产方)公司列表
      * @return

+ 1 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/controller/EquipmentRecCommandController.java

@@ -35,6 +35,7 @@ public class EquipmentRecCommandController {
     public HttpRespMsg getList(String equipmentNo) {
         QueryWrapper<EquipmentRecCommand> queryWrapper = new QueryWrapper<EquipmentRecCommand>();
         queryWrapper.orderByDesc("indate");
+        queryWrapper.eq("equipment_no", equipmentNo);
         HttpRespMsg msg = new HttpRespMsg();
         msg.data = equipmentRecCommandService.list(queryWrapper);
         //新反馈重置为0

+ 4 - 4
cloud-model/src/main/java/com/hssx/cloudmodel/controller/MouldController.java

@@ -247,7 +247,7 @@ public class MouldController {
         BeanUtils.copyProperties(user,userVO);
         HttpRespMsg modelListMapByUser = projectService.getModelListMapByUser(userVO);
         List<MouldVO> mouldVOList = (List<MouldVO>) modelListMapByUser.data;
-        //重新处理数据, 按照生产方工厂来显示点, 超出生产方200米范围的,单独显示该点,作为报警;
+        //重新处理数据, 按照生产方工厂来显示点, 超出生产方2000米范围的,单独显示该点,作为报警;
         List<Company> companyList = companyService.list(new QueryWrapper<Company>().eq("company_type", 1));
         List<LngLatCompany> positionList = lngLatCompanyService.list();
         List<MapItemVO> retList = new ArrayList<>();
@@ -268,7 +268,7 @@ public class MouldController {
                 //当前这个模盒距离生产工厂的距离
                 double distance = getDistance(m.getLng(), m.getLat(), Double.parseDouble(pos.getyLng()), Double.parseDouble(pos.getxLat()));
                 System.out.println("distance==="+distance);
-                if (distance < 0.2) {//单位是千米
+                if (distance < 2) {//单位是千米
                     Optional<MapItemVO> oldItem = retList.stream().filter(r->r.getName().equals(comp.getCompanyName())&&r.getItemId() == comp.getId()).findFirst();
                     if (oldItem.isPresent()) {
                         //按工厂名称和id匹配,取到之前已经添加的元素
@@ -304,8 +304,8 @@ public class MouldController {
     @ApiOperation("申请移模")
     @RequestMapping("/applyMove")
     @ResponseBody
-    public HttpRespMsg applyMove(int mouldId, String reason) {
-        return mouldService.applyMove(mouldId, reason);
+    public HttpRespMsg applyMove(int mouldId, String reason, String time, String address) {
+        return mouldService.applyMove(mouldId, reason, time, address);
     }
     @ApiOperation("审核移模申请")
     @RequestMapping("/checkApplyMove")

+ 4 - 4
cloud-model/src/main/java/com/hssx/cloudmodel/controller/MouldFileController.java

@@ -110,10 +110,10 @@ public class MouldFileController {
     @ApiOperation("模具文档的审核")
     @RequestMapping("/check")
     @ResponseBody
-    public HttpRespMsg check(@RequestParam Integer mouldFileId, @RequestParam Integer isPass,
+    public HttpRespMsg check(@RequestParam Integer mouldFileId, @RequestParam Integer isPass,String reason,
                              HttpServletResponse response, HttpServletRequest request, UserVO userVO) throws Exception {
         HttpRespMsg msg = new HttpRespMsg();
-        msg = mouldFileService.check(mouldFileId, isPass, userVO);
+        msg = mouldFileService.check(mouldFileId, isPass, userVO,reason);
         return msg;
     }
 
@@ -177,8 +177,8 @@ public class MouldFileController {
     @ApiOperation("发起项目文档的删除申请")
     @RequestMapping("/applyDelete")
     @ResponseBody
-    public HttpRespMsg applyDelete(MouldFile mouldFile, String token, Integer belongType) {
-        HttpRespMsg msg = mouldFileService.applyDelete(mouldFile,token, belongType);
+    public HttpRespMsg applyDelete(MouldFile mouldFile, String token, Integer belongType, String reason) {
+        HttpRespMsg msg = mouldFileService.applyDelete(mouldFile,token, belongType, reason);
         return msg;
     }
 

+ 12 - 2
cloud-model/src/main/java/com/hssx/cloudmodel/controller/PowerController.java

@@ -48,14 +48,24 @@ public class PowerController {
      *
      * @return
      */
-    @ApiOperation("权限列表")
+    @ApiOperation("修改列表")
     @RequestMapping("/update")
     @ResponseBody
-    public HttpRespMsg list(UserVO userVO,String token){
+    public HttpRespMsg update(UserVO userVO,String token){
         HttpRespMsg msg = powerService.updatePower(userVO,token);
         return msg;
     }
 
+    @ApiOperation("获取权限")
+    @RequestMapping("/getByProject")
+    @ResponseBody
+    public HttpRespMsg getByProject(Integer projectId, Integer userId){
+        HttpRespMsg msg = powerService.getByProject(projectId,userId);
+        return msg;
+    }
+
+
+
 
 }
 

+ 2 - 2
cloud-model/src/main/java/com/hssx/cloudmodel/controller/ProjectFileController.java

@@ -87,8 +87,8 @@ public class ProjectFileController {
     @ApiOperation("项目文档删除申请")
     @RequestMapping("/delFileApplication")
     @ResponseBody
-    public HttpRespMsg delFileApplication(ProjectFile projectFile,String token){
-        HttpRespMsg msg = projectFileService.delFileApplication(projectFile,token);
+    public HttpRespMsg delFileApplication(ProjectFile projectFile,String token, String reason){
+        HttpRespMsg msg = projectFileService.delFileApplication(projectFile,token, reason);
         return msg;
     }
 

+ 26 - 8
cloud-model/src/main/java/com/hssx/cloudmodel/controller/UserController.java

@@ -13,11 +13,7 @@ import com.hssx.cloudmodel.util.PageUtil;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -47,10 +43,9 @@ public class UserController {
     @ApiOperation(value = "普通用户登录", notes = "登录方法")
     @RequestMapping("/login")
     @ResponseBody
-    public HttpRespMsg sysLogin(UserVO userVO, HttpServletRequest request,
+    public HttpRespMsg sysLogin(UserVO userVO, boolean checkFirst, HttpServletRequest request,
                                 HttpServletResponse response) {
-//        log.info("user"+userVO);
-        HttpRespMsg msg = userService.login(userVO,request);
+        HttpRespMsg msg = userService.login(userVO, checkFirst, request);
         return msg;
     }
 
@@ -72,6 +67,14 @@ public class UserController {
         return msg;
     }
 
+    @ApiOperation("创建新的管理员")
+    @RequestMapping("/addNewAdmin")
+    @ResponseBody
+    public HttpRespMsg addNewAdmin(User user) {
+        HttpRespMsg msg = userService.addNewAdmin(user);
+        return msg;
+    }
+
     /**
      * 添加/修改用户
      * @param user
@@ -147,6 +150,15 @@ public class UserController {
         return msg;
     }
 
+    @ApiOperation("根据公司id")
+    @RequestMapping("/getUserListByCompanyId")
+    @ResponseBody
+    public HttpRespMsg getUserListByCompanyId(String companyId){
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = userService.list(new QueryWrapper<User>().eq("company_id", companyId));
+        return msg;
+    }
+
     /**
      * 获取用户列表
      * 参数: companyId 公司id,subordinateType 所属方 0-供应商 1-客户
@@ -177,5 +189,11 @@ public class UserController {
         HttpRespMsg msg = userService.getAllAvailableUserList(userId);
         return msg;
     }
+
+    @RequestMapping(value = "/bindWeiXin", method = RequestMethod.GET)
+    public HttpRespMsg bindWeiXin(String code, String token) {
+        return userService.bindWeiXin(code, token);
+    }
+
 }
 

+ 67 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/controller/WeiXinController.java

@@ -0,0 +1,67 @@
+package com.hssx.cloudmodel.controller;
+
+import com.github.pagehelper.util.StringUtil;
+import com.hssx.cloudmodel.constant.Constant;
+import com.hssx.cloudmodel.entity.vo.UserVO;
+import com.hssx.cloudmodel.util.HttpRespMsg;
+import com.hssx.cloudmodel.util.JsapiTicketUtil;
+import com.hssx.cloudmodel.util.Sha1Util;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+@RestController
+@RequestMapping("/weixin")
+@Slf4j
+public class WeiXinController {
+    @ApiOperation(value = "获取微信jssdk初始化配置参数", notes = "获取微信jssdk初始化配置参数")
+    @RequestMapping("/getWXConfig")
+    @ResponseBody
+    public HttpRespMsg getConfigParam(String url) {
+        HttpRespMsg msg = new HttpRespMsg();
+        try {
+            Date now = new Date();
+            String jsapiTicket = "";
+            System.out.println("now.getTime()="+now.getTime());
+            System.out.println("JsapiTicketUtil.TOKEN_EXPIRE="+JsapiTicketUtil.TOKEN_EXPIRE);
+            jsapiTicket = JsapiTicketUtil.getJSApiTicket();
+            if (StringUtil.isEmpty(JsapiTicketUtil.ticket) || (now.getTime() > JsapiTicketUtil.TOKEN_EXPIRE)) {
+                //微信token过期了
+                System.out.println("重新获取jsapiticket");
+                jsapiTicket = JsapiTicketUtil.getJSApiTicket();
+            } else {
+                System.out.println("使用默认的");
+                jsapiTicket = JsapiTicketUtil.ticket;
+            }
+            if (StringUtil.isEmpty(jsapiTicket)) {
+                msg.setError("jsapiTicket获取失败");
+                return msg;
+            }
+            // 随机数
+            String nonce_str = Sha1Util.getNonceStr();
+            String timestamp = Sha1Util.getTimeStamp();
+            // 对以下字段进行签名
+            SortedMap<String, String> packageParams = new TreeMap<String, String>();
+            packageParams.put("jsapi_ticket", jsapiTicket);
+            packageParams.put("noncestr", nonce_str);
+            packageParams.put("timestamp", ""+timestamp);
+            packageParams.put("url", url);
+            String sign = Sha1Util.createSHA1Sign(packageParams);
+            packageParams.put("sign", sign);
+            packageParams.put("appid", Constant.WECHAT_APPID);
+            msg.data = packageParams;
+        } catch (Exception e) {
+            msg.setError(e.getMessage());
+        }
+        return msg;
+    }
+}

Plik diff jest za duży
+ 390 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/controller/WeiXinCorpController.java


+ 31 - 1
cloud-model/src/main/java/com/hssx/cloudmodel/entity/Mould.java

@@ -15,7 +15,7 @@ import java.io.Serializable;
  * </p>
  *
  * @author seya
- * @since 2020-07-27
+ * @since 2020-08-16
  */
 @TableName("tb_mould")
 public class Mould extends Model<Mould> {
@@ -208,6 +208,18 @@ public class Mould extends Model<Mould> {
     @TableField("move_apply_reason")
     private String moveApplyReason;
 
+    /**
+     * 移模时间
+     */
+    @TableField("move_apply_time")
+    private String moveApplyTime;
+
+    /**
+     * 移模地点
+     */
+    @TableField("move_apply_address")
+    private String moveApplyAddress;
+
 
     public Integer getId() {
         return id;
@@ -457,6 +469,22 @@ public class Mould extends Model<Mould> {
         this.moveApplyReason = moveApplyReason;
     }
 
+    public String getMoveApplyTime() {
+        return moveApplyTime;
+    }
+
+    public void setMoveApplyTime(String moveApplyTime) {
+        this.moveApplyTime = moveApplyTime;
+    }
+
+    public String getMoveApplyAddress() {
+        return moveApplyAddress;
+    }
+
+    public void setMoveApplyAddress(String moveApplyAddress) {
+        this.moveApplyAddress = moveApplyAddress;
+    }
+
     @Override
     protected Serializable pkVal() {
         return this.id;
@@ -496,6 +524,8 @@ public class Mould extends Model<Mould> {
         ", fixedMaintainCount=" + fixedMaintainCount +
         ", moveApplyState=" + moveApplyState +
         ", moveApplyReason=" + moveApplyReason +
+        ", moveApplyTime=" + moveApplyTime +
+        ", moveApplyAddress=" + moveApplyAddress +
         "}";
     }
 }

+ 32 - 12
cloud-model/src/main/java/com/hssx/cloudmodel/entity/User.java

@@ -6,11 +6,6 @@ import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
 import java.time.LocalDateTime;
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.NoArgsConstructor;
-
 import java.io.Serializable;
 
 /**
@@ -18,14 +13,10 @@ import java.io.Serializable;
  * 
  * </p>
  *
- * @author 吴涛涛
- * @since 2019-08-12
+ * @author seya
+ * @since 2020-08-09
  */
 @TableName("tb_user")
-//以下注解是用于Builder对象来直接构造对象。
-//@NoArgsConstructor
-//@AllArgsConstructor
-//@Builder(toBuilder = true)
 public class User extends Model<User> {
 
     private static final long serialVersionUID=1L;
@@ -106,7 +97,6 @@ public class User extends Model<User> {
      * 创建时间
      */
     @TableField("indate")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime indate;
 
     /**
@@ -133,6 +123,18 @@ public class User extends Model<User> {
     @TableField("openid")
     private String openid;
 
+    /**
+     * 微信头像
+     */
+    @TableField("avatar")
+    private String avatar;
+
+    /**
+     * 微信昵称
+     */
+    @TableField("nickname")
+    private String nickname;
+
 
     public Integer getId() {
         return id;
@@ -270,6 +272,22 @@ public class User extends Model<User> {
         this.openid = openid;
     }
 
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
+
     @Override
     protected Serializable pkVal() {
         return this.id;
@@ -295,6 +313,8 @@ public class User extends Model<User> {
         ", teamName=" + teamName +
         ", subordinateType=" + subordinateType +
         ", openid=" + openid +
+        ", avatar=" + avatar +
+        ", nickname=" + nickname +
         "}";
     }
 }

+ 1 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/entity/vo/UserVO.java

@@ -36,4 +36,5 @@ public class UserVO extends User {
     /**
      */
     private Integer dwgType;
+    private boolean isFirstLogin;
 }

+ 4 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/service/CompanyService.java

@@ -34,6 +34,8 @@ public interface CompanyService extends IService<Company> {
 
     HttpRespMsg relationList(Integer companyType);
 
+    HttpRespMsg getRelatedProducerList(Integer companyId);
+
     HttpRespMsg getOwnerRelateCompany(CompanyVO companyVO);
 
     HttpRespMsg getProduceCompany(UserVO userVO);
@@ -41,4 +43,6 @@ public interface CompanyService extends IService<Company> {
     HttpRespMsg getProduceCompanyByCurrentUser(UserVO userVO);
 
     HttpRespMsg detail(Integer id);
+
+    HttpRespMsg newAdmin(Integer companyId, String username, String account, String roleName);
 }

+ 2 - 2
cloud-model/src/main/java/com/hssx/cloudmodel/service/MouldFileService.java

@@ -23,7 +23,7 @@ import java.text.ParseException;
  */
 public interface MouldFileService extends IService<MouldFile> {
     HttpRespMsg addFile(UserVO userVO, Integer blongType,MultipartFile file, MultipartFile file2, String path);
-    HttpRespMsg check(Integer mouldFileId, Integer isPass, UserVO userVO);
+    HttpRespMsg check(Integer mouldFileId, Integer isPass, UserVO userVO, String reason);
     HttpRespMsg dowloadFile(MouldFile projectFile, String token);
     HttpRespMsg getAllFileList(int mouldId, UserVO userVO);
     HttpRespMsg getFileList(int mouldId, Integer blongType, UserVO userVO,String path);
@@ -35,5 +35,5 @@ public interface MouldFileService extends IService<MouldFile> {
 
     HttpRespMsg mouldUpdateCheck(UserVO userVO);
 
-    HttpRespMsg applyDelete(MouldFile mouldFile, String token, Integer blongType);
+    HttpRespMsg applyDelete(MouldFile mouldFile, String token, Integer blongType, String reason);
 }

+ 1 - 1
cloud-model/src/main/java/com/hssx/cloudmodel/service/MouldService.java

@@ -40,7 +40,7 @@ public interface MouldService extends IService<Mould> {
 
     HttpRespMsg updateLastTimeRuntimesTask();
 
-    HttpRespMsg applyMove(int mouldId, String reason);
+    HttpRespMsg applyMove(int mouldId, String reason, String time, String address);
 
     HttpRespMsg checkApplyMove(int mouldId, int status);
 

+ 2 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/service/PowerService.java

@@ -19,4 +19,6 @@ public interface PowerService extends IService<Power> {
     HttpRespMsg getList(UserVO userVO,String token,PageUtil page);
 
     HttpRespMsg updatePower(UserVO userVO, String token);
+
+    HttpRespMsg getByProject(Integer projectId, Integer userId);
 }

+ 1 - 1
cloud-model/src/main/java/com/hssx/cloudmodel/service/ProjectFileService.java

@@ -28,5 +28,5 @@ public interface ProjectFileService extends IService<ProjectFile> {
 
     HttpRespMsg delFile(ProjectFile projectFile,String token, Integer isPass);
 
-    HttpRespMsg delFileApplication(ProjectFile projectFile, String token);
+    HttpRespMsg delFileApplication(ProjectFile projectFile, String token, String reason);
 }

+ 5 - 1
cloud-model/src/main/java/com/hssx/cloudmodel/service/UserService.java

@@ -20,7 +20,7 @@ public interface UserService extends IService<User> {
 
     HttpRespMsg addAndUpdateUser(User user, Integer flag,Integer addType,String projectIds);
 
-    HttpRespMsg login(UserVO userVO, HttpServletRequest request);
+    HttpRespMsg login(UserVO userVO, boolean checkFirst, HttpServletRequest request);
 
     HttpRespMsg pageList(PageUtil page,Integer companyId,Integer flag,String keyName,User user,Integer roleType);
 
@@ -33,4 +33,8 @@ public interface UserService extends IService<User> {
     HttpRespMsg transferProject(Integer fromUid, Integer toUid, String projects);
 
     HttpRespMsg getAllAvailableUserList(Integer userId);
+
+    HttpRespMsg bindWeiXin(String code, String token);
+
+    HttpRespMsg addNewAdmin(User user);
 }

+ 17 - 24
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/CompanyServiceImpl.java

@@ -312,6 +312,16 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
         return msg;
     }
 
+    @Override
+    public HttpRespMsg getRelatedProducerList(Integer companyId) {
+        HttpRespMsg msg = new HttpRespMsg();
+        List<AssetCustomCompany> assert_id = assetCustomCompanyMapper.selectList(new QueryWrapper<AssetCustomCompany>().eq("assert_id", companyId));
+        int[] ints = assert_id.stream().mapToInt(AssetCustomCompany::getCustomId).toArray();
+        List<Integer> integers = ListUtil.convertFromIntArray(ints);
+        msg.data = companyMapper.selectList(new QueryWrapper<Company>().in("id", integers));
+        return msg;
+    }
+
     @Override
     public HttpRespMsg getOwnerRelateCompany(CompanyVO companyVO) {
         HttpRespMsg msg = new HttpRespMsg();
@@ -376,7 +386,8 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
         } else {
             if (Constant.SYS_PARENT_ID .equals(currentUser.getParentId())) {
                 companies = companyMapper.selectList(new QueryWrapper<Company>());
-            } else if (Constant.SYS_ID .equals(currentUser.getParentId())) {
+            } else {
+                //获取生产方或者资产方的公司
                 if (currentUser.getSubordinateType() == 0) {
                     List<Integer> customCompanyIds = assetCustomCompanyMapper.selectList(new QueryWrapper<AssetCustomCompany>().eq("assert_id", currentUser.getCompanyId())).stream().map(AssetCustomCompany::getCustomId).collect(Collectors.toList());
                     customCompanyIds.add(currentUser.getCompanyId());
@@ -386,29 +397,6 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
                     assetCompanyIds.add(currentUser.getCompanyId());
                     companies = companyMapper.selectList(new QueryWrapper<Company>().in("id", assetCompanyIds));
                 }
-            } else {
-                List<Integer> projectIds = new ArrayList<>();
-                QueryWrapper<Project> qwPro = new QueryWrapper<>();
-                qwPro.eq("manager_id", currentUser.getId());
-                projectIds = projectMapper.selectList(qwPro).stream().map(Project::getId).collect(Collectors.toList());
-                projectIds.add(-1);
-                //项目经理或者普通用户
-                projectIds.addAll(projectUserMapper.selectList(new QueryWrapper<ProjectUser>()
-                        .eq("user_id", currentUser.getId()))
-                        .stream()
-                        .map(ProjectUser::getProjectId)
-                        .collect(Collectors.toList()));
-                //作为审批人
-                projectIds.addAll(projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>()
-                        .eq("approver_id", currentUser.getId()))
-                        .stream()
-                        .map(ProjectApprove::getProjectId)
-                        .collect(Collectors.toList()));
-                String keyName = null;
-                List<ProjectVO> projects = projectMapper.getProjectListByUidInProjectIds(keyName, projectIds);
-                List<Integer> ids = projects.stream().map(Project::getOwnerCompany).collect(Collectors.toList());
-                ids.add(-1);
-                companies = companyMapper.selectList(new QueryWrapper<Company>().in("id", ids));
             }
             msg.data = companies;
         }
@@ -422,6 +410,11 @@ public class CompanyServiceImpl extends ServiceImpl<CompanyMapper, Company> impl
         return msg;
     }
 
+    @Override
+    public HttpRespMsg newAdmin(Integer companyId, String username, String account, String roleName) {
+        return null;
+    }
+
     @Override
     public HttpRespMsg deleteById(Integer id) {
         HttpRespMsg msg = new HttpRespMsg();

+ 120 - 58
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldFileServiceImpl.java

@@ -15,8 +15,10 @@ import lombok.extern.slf4j.Slf4j;
 import net.lingala.zip4j.core.ZipFile;
 import net.lingala.zip4j.model.ZipParameters;
 import net.lingala.zip4j.util.Zip4jConstants;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
@@ -295,21 +297,36 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
     }
 
     @Override
-    public HttpRespMsg check(Integer mouldFileId, Integer isPass, UserVO userVO) {
+    public HttpRespMsg check(Integer mouldFileId, Integer isPass, UserVO userVO, String reason) {
         HttpRespMsg msg = new HttpRespMsg();
         User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", userVO.getToken()));
         MouldFile mf = new MouldFile();
         mf.setId(mouldFileId);
         MouldFile oldData = mouldFileMapper.selectById(mouldFileId);
+        Mould baseMould = mouldMapper.selectById(oldData.getModelId());
+        Project project = projectMapper.selectById(baseMould.getProjectId());
         Mould md = mouldMapper.selectById(oldData.getModelId());
         String approverNames = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("project_id", md.getProjectId()))
                 .stream().map(ProjectApprove::getApproverName).collect(Collectors.joining(","));
+        //文档上传人
+        int creatorId = oldData.getUplodtorId();
         MouldOperationDynamics dynamics = new MouldOperationDynamics();
         if (user != null) {
             if (user.getSubordinateType() == 0) {
                 //资产方
+                boolean isDeleted = false;
                 if (isPass == 1) {
-                    if (oldData.getState() == 2) {//生产方也审核通过了
+                    if (oldData.getState() == 4 || oldData.getState() == 6) {
+                        //审批通过
+                        dynamics.setIsPass(1);
+                        if (oldData.getState() == 4) {
+                            mf.setState(5);//资产方同意删除
+                        } else if (oldData.getState() == 6){
+                            //生产方已经同意过了, 直接删除
+                            mouldFileMapper.deleteById(mouldFileId);
+                            isDeleted = true;
+                        }
+                    } else if (oldData.getState() == 2) {//生产方也审核通过了
                         mf.setState(3);
                         //审批通过
                         dynamics.setIsPass(1);
@@ -326,10 +343,17 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
                         dynamics.setIsPass(1);
                     }
                 } else {
-                    mf.setState(-1);
+                    if (oldData.getState() == 4 || oldData.getState() == 6) {
+                        mf.setState(-5);//资产方不同意删除
+                    } else {
+                        mf.setState(-1);
+                    }
                     dynamics.setIsPass(0);
                 }
-                mouldFileMapper.updateById(mf);
+                if (!isDeleted) {
+                    mouldFileMapper.updateById(mf);
+                }
+
                 if (oldData.getBlongType() == 4) {
                     if (mf.getState() == 3) {
                         Integer count = mouldOperationDynamicsMapper.selectCount(new QueryWrapper<MouldOperationDynamics>().eq("belong_type", 4).eq("is_pass", 1).eq("mould_id", oldData.getModelId()));
@@ -370,11 +394,33 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
                     dynamics.setContent(Constant.APPROVAL);
                     mouldOperationDynamicsMapper.insert(dynamics);
                 }
-
+                //发送消息给提交人
+                NewsNotice notice = new NewsNotice();
+                notice.setBelongType(oldData.getBlongType());
+                notice.setProjectId(project.getId());
+                notice.setProjectName(project.getProjectName());
+                notice.setNoticeType(0);
+                notice.setContent(user.getUsername()+"审批" + (isPass == 0?("不通过"+",原因:"+reason):"通过"));
+                notice.setRefId(oldData.getModelId());
+                newsNoticeMapper.insert(notice);
+                NewsNoticeUser noticeUser = new NewsNoticeUser();
+                noticeUser.setIsRead(0);
+                noticeUser.setUserId(creatorId);
+                noticeUser.setNewsId(notice.getId());
+                newsNoticeUserMapper.insert(noticeUser);
             } else if (user.getSubordinateType() == 1) {
                 //生产方
+                boolean isDeleted = false;
                 if (isPass == 1) {
-                    if (oldData.getState() == 1) {//资产方也审核通过了
+                    if (oldData.getState() == 4) {
+                        mf.setState(6);
+                        dynamics.setIsPass(1);
+                    } else if (oldData.getState() == 5) {
+                        //资产方同意删除了
+                        mouldFileMapper.deleteById(mouldFileId);
+                        isDeleted = true;
+                        dynamics.setIsPass(1);
+                    } else if (oldData.getState() == 1) {//资产方也审核通过了
                         mf.setState(3);
                         dynamics.setIsPass(1);
                         //将模具修改为已报废
@@ -389,10 +435,18 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
                         dynamics.setIsPass(1);
                     }
                 } else {
-                    mf.setState(-2);
+                    if (oldData.getState() == 4 || oldData.getState() == 5) {
+                        mf.setState(-6);
+                    } else {
+                        mf.setState(-2);
+                    }
+
                     dynamics.setIsPass(0);
                 }
-                mouldFileMapper.updateById(mf);
+                if (!isDeleted) {
+                    mouldFileMapper.updateById(mf);
+                }
+
                 if (oldData.getBlongType() == 4) {
                     if (mf.getState() == 3) {
                         Integer count = mouldOperationDynamicsMapper.selectCount(new QueryWrapper<MouldOperationDynamics>().eq("belong_type", 4).eq("is_pass", 1).eq("mould_id", oldData.getModelId()));
@@ -433,6 +487,20 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
                     dynamics.setContent(Constant.APPROVAL);
                     mouldOperationDynamicsMapper.insert(dynamics);
                 }
+                //发送消息给提交人
+                NewsNotice notice = new NewsNotice();
+                notice.setBelongType(oldData.getBlongType());
+                notice.setProjectId(project.getId());
+                notice.setProjectName(project.getProjectName());
+                notice.setNoticeType(0);
+                notice.setContent(user.getUsername()+"审批" + (isPass == 0?("不通过"+",原因:"+reason):"通过"));
+                notice.setRefId(oldData.getModelId());
+                newsNoticeMapper.insert(notice);
+                NewsNoticeUser noticeUser = new NewsNoticeUser();
+                noticeUser.setIsRead(0);
+                noticeUser.setUserId(creatorId);
+                noticeUser.setNewsId(notice.getId());
+                newsNoticeUserMapper.insert(noticeUser);
             } else {
                 msg.setError("只有生产方和资产方审批人才能审核");
             }
@@ -841,28 +909,9 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
         list.add(titleList);
         QueryWrapper<MouldOperationDynamics> qw = new QueryWrapper<MouldOperationDynamics>();
         qw.eq("content", Constant.DOWNLOAD);
-//        String start = userVO.getStartTime().replace("Z", " UTC");//是空格+UTC
-//        String end = userVO.getEndTime().replace("Z", " UTC");//是空格+UTC
-//        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-//        Date date1 = df.parse(start);
-//        System.out.println(date1);
-//        Date date2 = df.parse(end);
-//        System.out.println(date2);
-//        SimpleDateFormat df1 = new SimpleDateFormat ("EEE MMM dd HH:mm:ss Z yyyy", Locale.CHINA);
-//        Calendar calendar = new GregorianCalendar();
-//        calendar.setTime(date1);
-//        calendar.add(calendar.DATE, -1);//把日期往后增加一天.整数往后推,负数往前移动        date=calendar.getTime();
-//        Date startDate1 = calendar.getTime();
-//        calendar.setTime(date2);
-//        calendar.add(calendar.DATE, -1);
-//        Date startDate = df1.parse(date1.toString());
-//        Date endDate2 = calendar.getTime();
-//        Date endDate = df1.parse(date2.toString());
         SimpleDateFormat dateSdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         SimpleDateFormat dateSdf = new SimpleDateFormat("yyyy-MM-dd");
         SimpleDateFormat dateSdf2 = new SimpleDateFormat("yyyy年MM月dd+HH时mm分ss秒");
-//        String startDate = dateSdf.format(startDate1);
-//        String endDate = dateSdf.format(endDate2);
         List<MouldOperationDynamics> mouldOperationDynamics = new ArrayList<>();
         if (userVO.getStartTime() != null && userVO.getEndTime() != null) {
             mouldOperationDynamics = mouldOperationDynamicsMapper.selectOperationDynamicsList(userVO);
@@ -922,7 +971,7 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
     }
 
     @Override
-    public HttpRespMsg applyDelete(MouldFile mouldFile, String token, Integer belongType) {
+    public HttpRespMsg applyDelete(MouldFile mouldFile, String token, Integer belongType, String reason) {
         HttpRespMsg msg = new HttpRespMsg();
 
         User currentUser = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", token));
@@ -930,40 +979,53 @@ public class MouldFileServiceImpl extends ServiceImpl<MouldFileMapper, MouldFile
             msg.setError("用户不存在或者未登录");
         } else {
             MouldFile file = mouldFileMapper.selectById(mouldFile.getId());
-            Mould mould = mouldMapper.selectById(mouldFile.getModelId());
+            Mould mould = mouldMapper.selectById(file.getModelId());
             if (file.getUplodtorId().equals(currentUser.getId())) {
                 //上传人负责发起删除申请
                 //添加消息通知记录
-                if (file.getProjectId() != null) {
-                    Project project = projectMapper.selectById(file.getProjectId());
-                    List<ProjectApprove> projectApproves = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("project_id", file.getProjectId()));
-                    String content = "";
-                    NewsNotice newsNotice = new NewsNotice();
-                    newsNotice.setRefId(file.getModelId());
-                    newsNotice.setProjectId(file.getProjectId());
-                    newsNotice.setBelongType(belongType);
-                    newsNotice.setProjectName(project.getProjectName() + "-" + mould.getModelName());
-                    newsNotice.setNoticeType(Constant.APPROVEL_TYPE);
-                    if (belongType == 0) {
-                        content = "模具文档";
-                    } else if (belongType == 1) {
-                        content = "零件文档";
-                    } else if (belongType == 2) {
-                        content = "试模验收文档";
-                    } else if (belongType == 3) {
-                        content = "保养方案文档";
-                    } else if (belongType == 5) {
-                        content = "模具报废文档";
-                    }
-                    newsNotice.setContent(currentUser.getUsername() + "申请删除" + content + "模块的" + mould.getModelName() + ",待您审批。");
-                    newsNoticeMapper.insert(newsNotice);
-                    for (ProjectApprove projectApprove : projectApproves) {
-                        NewsNoticeUser newsNoticeUser = new NewsNoticeUser();
-                        newsNoticeUser.setUserId(projectApprove.getApproverId());
-                        newsNoticeUser.setNewsId(newsNotice.getId());
-                        newsNoticeUserMapper.insert(newsNoticeUser);
-                    }
+                file.setState(4);
+                mouldFileMapper.updateById(file);//更改状态为删除待审批
+                int projectId = mould.getProjectId();
+                Project project = projectMapper.selectById(projectId);
+                List<ProjectApprove> projectApproves = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().eq("project_id", projectId));
+                String content = "";
+                NewsNotice newsNotice = new NewsNotice();
+                newsNotice.setRefId(file.getModelId());
+                newsNotice.setProjectId(projectId);
+                newsNotice.setBelongType(belongType);
+                newsNotice.setProjectName(project.getProjectName()+"-"+mould.getModelName());
+                newsNotice.setNoticeType(Constant.APPROVEL_TYPE);
+                if (belongType == 0) {
+                    content = "模具文档";
+                } else if (belongType == 1) {
+                    content = "零件文档";
+                } else if (belongType == 2) {
+                    content = "试模验收文档";
+                } else if (belongType == 3) {
+                    content = "保养方案文档";
+                } else if (belongType == 5) {
+                    content = "模具报废文档";
                 }
+                newsNotice.setContent(currentUser.getUsername() + "申请删除" + content + "模块的"
+                        + file.getFileName() + (StringUtils.isNotEmpty(reason)?("(原因:"+reason+")"):"")+",待您审批。");
+                newsNoticeMapper.insert(newsNotice);
+                for (ProjectApprove projectApprove : projectApproves) {
+                    NewsNoticeUser newsNoticeUser = new NewsNoticeUser();
+                    newsNoticeUser.setUserId(projectApprove.getApproverId());
+                    newsNoticeUser.setNewsId(newsNotice.getId());
+                    newsNoticeUserMapper.insert(newsNoticeUser);
+                }
+
+                //生成操作记录
+                MouldOperationDynamics dynamics = new MouldOperationDynamics();
+                dynamics.setContent(Constant.APPLY_DELETE);
+                dynamics.setFileName(file.getFileName());
+                dynamics.setOperatorId(currentUser.getId());
+                dynamics.setOperatorName(currentUser.getUsername());
+                dynamics.setMouldId(file.getModelId());
+                dynamics.setFileId(file.getId());
+                dynamics.setBelongType(belongType);
+                mouldOperationDynamicsMapper.insert(dynamics);
             } else {
                 msg.setError("您没有该权限!");
             }

+ 4 - 3
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldHistoryServiceImpl.java

@@ -76,7 +76,7 @@ public class MouldHistoryServiceImpl extends ServiceImpl<MouldHistoryMapper, Mou
                     //时间段
                     rowList.add(cycleRuntime.getTimeSlot());
                     //运行次数
-                    rowList.add(cycleRuntime.getRuntime() + "");
+                    rowList.add(cycleRuntime.getRuntime()/1000 + "s");
 //                    rowList.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(dynamic.getIndate())
                     list.add(rowList);
                 }
@@ -84,6 +84,7 @@ public class MouldHistoryServiceImpl extends ServiceImpl<MouldHistoryMapper, Mou
                 msg.data = fileUrl;
             }else if(type == 1){
                 List<MouldHistoryTime> mouldHistoryTimeList = mouldHistoryTimeMapper.getOpeningAndClosingTimesChartCycleExcel(startTime, endTime, equipmentNo);
+
                 //数据已经查到,开始导出excel
                 List<List<String>> list = new ArrayList<List<String>>();
                 //标题
@@ -110,7 +111,7 @@ public class MouldHistoryServiceImpl extends ServiceImpl<MouldHistoryMapper, Mou
                     rowList.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(mouldHistoryTime.getOpenTime()));
 //                    rowList.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(dynamic.getIndate())
                     //开模周期
-                    rowList.add(mouldHistoryTime.getTimeCost()+"");
+                    rowList.add(mouldHistoryTime.getTimeCost()/1000+"s");
                     list.add(rowList);
                 }
                 String fileUrl = ExcelUtil.exportGeneralExcelByTitleAndList(response, equipmentNo + "-开合数据" + dateSdf2.format(new Date()), list, downloadPath);
@@ -225,7 +226,7 @@ public class MouldHistoryServiceImpl extends ServiceImpl<MouldHistoryMapper, Mou
                 MouldHistoryTimeVO vo = new MouldHistoryTimeVO();
                 vo.setMinCycle(time.getMinCost());
                 vo.setMaxCycle(time.getMaxCost());
-                vo.setAvgCycle(time.getCycle());
+                vo.setAvgCycle(time.getRunCnt());
                 vo.setTheoryCycle(fCycle);
                 dayMap.put(time.getTime(), vo);
             });

+ 33 - 8
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/MouldServiceImpl.java

@@ -20,6 +20,7 @@ import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -40,6 +41,10 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
     @Resource
     MouldMapper mouldMapper;
     @Resource
+    MouldEquipmentMapper mouldEquipmentMapper;
+    @Resource
+    MouldHistoryMapper mouldHistoryMapper;
+    @Resource
     UserMapper userMapper;
     @Resource
     PowerMapper powerMapper;
@@ -62,8 +67,6 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
     @Resource
     InjectionMoldingMapper injectionMoldingMapper;
     @Resource
-    MouldHistoryMapper mouldHistoryMapper;
-    @Resource
     MouldHistoryTimeMapper mouldHistoryTimeMapper;
     @Resource
     PacketLossRecordMapper packetLossRecordMapper;
@@ -152,6 +155,23 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
                     }
                     mould.setCreatorId(user.getId());
                     mould.setCompanyId(user.getCompanyId());
+                    //检查是否已经有模盒运行数据, 有的话需要更新运行次数
+                    MouldEquipment me = mouldEquipmentMapper.selectById(mould.getEquipmentId());
+                    String equipmentNo = me.getEquipmentNo();
+                    MouldHistoryTime time = mouldHistoryTimeMapper.selectOne(new QueryWrapper<MouldHistoryTime>().eq("equipment_no", equipmentNo).orderByDesc("open_time").last("limit 1"));
+
+                    if (time != null) {
+                        MouldHistory history = mouldHistoryMapper.selectById((time.getHistoryId()));
+                        //有记录
+                        mould.setRunTimes(history.getRunCnt());
+                        List<MouldHistoryTime> historyTimes = mouldHistoryTimeMapper.selectList(new QueryWrapper<MouldHistoryTime>().eq("history_id", history.getId()));
+                        int total = historyTimes.stream().mapToInt(MouldHistoryTime::getTimeCost).sum();
+                        System.out.println("总次数=="+total+", 次数=" + historyTimes.size());
+                        int avg = total / historyTimes.size()/1000;//转换为秒单位
+                        System.out.println("平均=="+avg);
+                        BigDecimal result = new BigDecimal(avg);
+                        mould.setOcCycle(result);
+                    }
                     mouldMapper.insert(mould);
                     injectionMolding.setMouldId(mould.getId());
                     injectionMoldingMapper.insert(injectionMolding);
@@ -224,7 +244,6 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
         mIds.stream().forEach(m->{
             System.out.println("m==="+m.intValue());
         });
-        System.out.println(mIds.stream().toArray());
         if (!mIds.contains(mouldVO.getId())) {
             msg.setError("你没有该权限!");
             return msg;
@@ -234,7 +253,6 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
             if (null != molding) {
                 mould.setInjectionMolding(molding);
             }
-
             map.put("vo", mould);
             //加上资产方审批人id, 作为前端的判断条件
             //发送给审批人
@@ -243,7 +261,6 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
                 map.put("assetApproverId", approveVo.getApproverId());
             }
 
-
             ProjectVO vo = projectMapper.getProjectById(mould.getProjectId(), user);
             if (null == mould.getProjectId()) {
                 map.put("update", 0);
@@ -309,6 +326,8 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
                     map.put("approve", approve);
                 }
             }
+            //获取实际成形周期
+
             msg.data = map;
             return msg;
         }
@@ -673,7 +692,7 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
         if(CollectionUtils.isEmpty(mouldHistoryTimes)){
             return null;
         }
-        //获取到按照equipmentNo分组的map
+        //获取到按照equipmentNoa分组的map
         Map<String, List<MouldHistoryTime>> equipmentNoList = mouldHistoryTimes.stream().collect(Collectors.groupingBy(MouldHistoryTime::getEquipmentNo));
         for (Map.Entry<String, List<MouldHistoryTime>> equipmentNoTimeList : equipmentNoList.entrySet()){
             //再把给个编号的所有数据按照日期进行分组
@@ -698,12 +717,14 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
     }
 
     @Override
-    public HttpRespMsg applyMove(int mouldId, String reason) {
+    public HttpRespMsg applyMove(int mouldId, String reason, String time, String address) {
         HttpRespMsg msg = new HttpRespMsg();
         Mould mould = new Mould();
         mould.setId(mouldId);
         mould.setMoveApplyState(1);
         mould.setMoveApplyReason(reason);
+        mould.setMoveApplyAddress(address);
+        mould.setMoveApplyTime(time);
         mouldMapper.updateById(mould);
 
         //发送消息通知
@@ -713,7 +734,11 @@ public class MouldServiceImpl extends ServiceImpl<MouldMapper, Mould> implements
         ProjectApprove approve = projectApproveMapper.selectOne(new QueryWrapper<ProjectApprove>().eq("project_id", project.getId()).eq("subordinate_type", 0));
         if (approve != null) {
             NewsNotice notice = new NewsNotice();
-            notice.setContent("申请移模,"+(!StringUtils.isEmpty(mould.getMoveApplyReason())?"原因:"+mould.getMoveApplyReason()+",":"")+"请审批");
+            notice.setContent("申请移模,"
+                    +(!StringUtils.isEmpty(mould.getMoveApplyReason())?"原因:"+mould.getMoveApplyReason()+",":"")
+                    +(!StringUtils.isEmpty(mould.getMoveApplyTime())?"时间:"+mould.getMoveApplyTime()+",":"")
+                    +(!StringUtils.isEmpty(mould.getMoveApplyAddress())?"地点:"+mould.getMoveApplyAddress()+",":"")
+                    +"请审批");
             notice.setNoticeType(0);//待审批
             notice.setRefId(mouldId);//附带模具id
             notice.setProjectName(mould.getModelName());

+ 8 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/PowerServiceImpl.java

@@ -118,4 +118,12 @@ public class PowerServiceImpl extends ServiceImpl<PowerMapper, Power> implements
         }
         return msg;
     }
+
+    @Override
+    public HttpRespMsg getByProject(Integer projectId, Integer userId) {
+        List<Power> powers = powerMapper.selectList(new QueryWrapper<Power>().eq("user_id", userId).eq("project_id", projectId));
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = powers;
+        return msg;
+    }
 }

+ 4 - 3
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/ProjectFileServiceImpl.java

@@ -13,6 +13,7 @@ import com.hssx.cloudmodel.util.FileUtil;
 import com.hssx.cloudmodel.util.HttpRespMsg;
 import com.hssx.cloudmodel.util.OpenOfficeService;
 import com.hssx.cloudmodel.util.QcloudUntil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Base64Utils;
@@ -288,7 +289,7 @@ public class ProjectFileServiceImpl extends ServiceImpl<ProjectFileMapper, Proje
     }
 
     @Override
-    public HttpRespMsg delFileApplication(ProjectFile projectFile, String token) {
+    public HttpRespMsg delFileApplication(ProjectFile projectFile, String token, String reason) {
         HttpRespMsg msg = new HttpRespMsg();
         User user = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", token));
         Project project = projectMapper.selectById(projectFileMapper.selectById(projectFile.getId()).getProjectId());
@@ -303,7 +304,7 @@ public class ProjectFileServiceImpl extends ServiceImpl<ProjectFileMapper, Proje
                 projectFile = projectFileMapper.selectById(projectFile.getId());
                 ProjectOperationDynamics dynamic = new ProjectOperationDynamics();
                 ProjectApprove approve = projectApproveMapper.selectOne(new QueryWrapper<ProjectApprove>().eq("project_id", project.getId()).eq("subordinate_type", 0));
-                dynamic.setContent("申请删除文件,待"+approve.getApproverName()+"审批");
+                dynamic.setContent("申请删除文件"+(StringUtils.isNotEmpty(reason)?("(原因:"+reason+")"):"")+",待"+approve.getApproverName()+"审批");
                 dynamic.setFileName(projectFile.getFileName());
                 dynamic.setOperator(user.getUsername());
                 dynamic.setOperatorId(user.getId());
@@ -311,7 +312,7 @@ public class ProjectFileServiceImpl extends ServiceImpl<ProjectFileMapper, Proje
                 projectOperationDynamicsMapper.insert(dynamic);
 
                 NewsNotice notice = new NewsNotice();
-                notice.setContent("申请删除文件,请审批");
+                notice.setContent("申请删除文件"+(StringUtils.isNotEmpty(reason)?("(原因:"+reason+")"):"")+",请审批");
                 notice.setNoticeType(0);//待审批
                 notice.setRefId(projectFile.getId());//附带项目文件id
                 notice.setProjectName(project.getProjectName());

+ 5 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/ProjectServiceImpl.java

@@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.hssx.cloudmodel.util.HttpRespMsg;
 import com.hssx.cloudmodel.util.ListUtil;
 import com.hssx.cloudmodel.util.PageUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -34,6 +35,7 @@ import java.util.stream.Collectors;
  * @since 2019-07-27
  */
 @Service
+@Slf4j
 public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> implements ProjectService {
 
     @Resource
@@ -239,9 +241,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     projectUser.setRoleType(1);//审批人
                     projectUserMapper.insert(projectUser);
                 }
+
                 //删除之前分配与项目关联的模具,即将之前的关联项目id修改成未关联
                 mouldMapper.updateMouldByProjectId(project);
+                log.info("==============删除之前关联的模具==========");
                 //再次模具的分配
+                log.info("==============新模具=========="+modelIds);
                 if (modelIds != null && !"".equals(modelIds)) {
                     List<Integer> modelList = ListUtil.convertIntegerIdsArrayToList(modelIds);
                     int sum = 1;

+ 169 - 40
cloud-model/src/main/java/com/hssx/cloudmodel/service/impl/UserServiceImpl.java

@@ -1,6 +1,7 @@
 package com.hssx.cloudmodel.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
@@ -10,18 +11,18 @@ import com.hssx.cloudmodel.entity.vo.UserVO;
 import com.hssx.cloudmodel.mapper.*;
 import com.hssx.cloudmodel.service.UserService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.hssx.cloudmodel.util.HttpRespMsg;
-import com.hssx.cloudmodel.util.ListUtil;
-import com.hssx.cloudmodel.util.MD5Util;
-import com.hssx.cloudmodel.util.PageUtil;
+import com.hssx.cloudmodel.util.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 
@@ -50,9 +51,27 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Value("${sysPwd}")
     private String sysPwd;
 
+    @Value("${wxAppId}")
+    private String wxAppId;
+    @Value("${wxAppSecret}")
+    private String wxAppSecret;
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Resource
+    private LoginLogMapper loginLogMapper;
+    @Resource
+    private PowerMapper powerMapper;
+
+
+    public static final String GET_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
+    public static final String GET_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=accessToken&openid=openId&lang=zh_CN";
+
+
     @Override
-    public HttpRespMsg login(UserVO userVO, HttpServletRequest request) {
-        System.out.println("user" + userVO);
+    public HttpRespMsg login(UserVO userVO, boolean checkFirst, HttpServletRequest request) {
+        System.out.println("user account== " + userVO.getAccount());
         HttpRespMsg msg = new HttpRespMsg();
         //验证用户名是否存在
         QueryWrapper<User> qw = new QueryWrapper<>();
@@ -68,6 +87,25 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 if (projectMapper.selectCount(new QueryWrapper<Project>().eq("manager_id", newUser.getId())) > 0) {
                     newUser.setIsManager(1);
                 }
+
+                //是否是首次登陆
+                if (checkFirst) {
+                    Integer selectCount = loginLogMapper.selectCount(new QueryWrapper<LoginLog>().eq("user_id", newUser.getId()));
+                    if (selectCount == 0) {
+                        newUser.setFirstLogin(true);
+                    } else {
+                        //非第一次才自动记录
+                        LoginLog log = new LoginLog();
+                        log.setUserId(newUser.getId());
+                        loginLogMapper.insert(log);
+                    }
+                } else {
+                    //前端用户确认后,不需要再检查是否首次登陆
+                    LoginLog log = new LoginLog();
+                    log.setUserId(newUser.getId());
+                    loginLogMapper.insert(log);
+                }
+
                 msg.data = newUser;
             } else {
                 msg.setError("密码错误");
@@ -104,13 +142,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 uIds.add(-1);
                 users = userMapper.selectUserListByCondition(roleType, companyId, flag, keyName, uIds,user);
             } else if (user.getSubordinateType() == 1) {
-//                List<Integer> projectIds = customCompanyMapper.selectList(new QueryWrapper<CustomCompany>().eq("company_id", user.getCompanyId())).stream().map(CustomCompany::getProjectId).collect(Collectors.toList());
-//                projectIds.add(-1);
-//                uIds = projectMapper.selectList(new QueryWrapper<Project>().in("id", projectIds)).stream().map(Project::getManagerId).collect(Collectors.toList());
-//                List<Integer> projectUserIds = projectUserMapper.selectList(new QueryWrapper<ProjectUser>().in("project_id", projectIds)).stream().map(ProjectUser::getUserId).collect(Collectors.toList());
-//                uIds.addAll(projectUserIds);
-//                List<Integer> projectApproveIds = projectApproveMapper.selectList(new QueryWrapper<ProjectApprove>().in("project_id", projectIds)).stream().map(ProjectApprove::getApproverId).collect(Collectors.toList());
-//                uIds.addAll(projectApproveIds);
                 uIds = userMapper.selectList(new QueryWrapper<User>().eq("company_id", user.getCompanyId())).stream().map(User::getId).collect(Collectors.toList());
                 uIds.add(-1);
                 users = userMapper.selectUserListByCondition(roleType, companyId, flag, keyName, uIds,user);
@@ -374,6 +405,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         } else if (Constant.SYS_ID.equals(user.getParentId())) {
             //只有资产方管理员有权限,获取该公司下的所有人员,包括相关的生产方的人员
             if (user.getSubordinateType().equals(0)) {
+                System.out.println("=========getAllAvailableUserList=============");
                 List<Integer> integerList = new ArrayList<>();
                 integerList.add(compId);
                 //相关的生产方的公司
@@ -387,6 +419,101 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return msg;
     }
 
+    @Override
+    public HttpRespMsg bindWeiXin(String code, String token) {
+        HttpRespMsg respMsg = new HttpRespMsg();
+        log.debug("code=="+code);
+        System.out.println("code==" + code);
+        // 拼接用户授权接口信息
+        String requestUrl = GET_TOKEN_URL.replace("APPID", wxAppId).replace("SECRET", wxAppSecret)
+                .replace("CODE", code);
+        // 存储获取到的授权字段信息
+        JSONObject result = new JSONObject();
+        Map<String, String> dataMap = new HashMap<>();
+        ResponseEntity<String> responseEntity = this.restTemplate.exchange(requestUrl,
+                HttpMethod.GET, null, String.class);
+        if (responseEntity.getStatusCode() == HttpStatus.OK) {
+            String resp = responseEntity.getBody();
+            log.debug("返回信息=="+resp);
+            System.out.println("返回信息=="+resp);
+            dataMap.put("resp", resp);
+            JSONObject OpenidJSONO = JSONObject.parseObject(resp);
+            result = OpenidJSONO;
+            //{"access_token":"32_sheMcGJRDYXVaBoc06o8iT9CyxquudqHl90qGKHg_MGxFhpFA5S8WKUL_mCnfY7O1gcJpS_gBFa4w5Vqb8pCHA","expires_in":7200,"refresh_token":"32_c4ocyhmbbbKyEmG4pS-ywgbV7FkK3A29F_GdZdHKrcvidy0amQeGmhBAo1WBcEWn0T7kSxjbp0BI4lYYtY4wAw","openid":"o1L3L5lOrOl3_UEJjONaoT2Rne1I","scope":"snsapi_userinfo"}
+            if (OpenidJSONO.containsKey("access_token")) {
+                // OpenidJSONO可以得到的内容:access_token expires_in refresh_token openid scope
+                String openid = String.valueOf(OpenidJSONO.get("openid"));
+                String accessToken = String.valueOf(OpenidJSONO.get("access_token"));
+                // 用户保存的作用域
+                String scope = String.valueOf(OpenidJSONO.get("scope"));
+                String refresh_token = String.valueOf(OpenidJSONO.get("refresh_token"));
+
+                // 第四步:拉取用户信息(需scope为 snsapi_userinfo)
+                String url = GET_USERINFO_URL.replaceAll("accessToken", accessToken).replaceAll("openId", openid);
+                responseEntity = this.restTemplate.exchange(url,
+                        HttpMethod.GET, null, String.class);
+                resp = responseEntity.getBody();
+                log.debug("获取微信个人信息返回=="+resp);
+                System.out.println("获取微信个人信息返回=="+resp);
+                JSONObject json = JSONObject.parseObject(resp);
+                //更新用户微信信息
+                User curUser = userMapper.selectOne(new QueryWrapper<User>().eq("head_imgurl", token));
+                if (curUser != null) {
+                    if (!json.containsKey("errcode")) {
+                        curUser.setOpenid(openid);
+                        curUser.setNickname(EmojiHttpServletRequestWraper.filterEmoji(json.getString("nickname")));
+                        curUser.setAvatar(json.getString("headimgurl"));
+                        userMapper.updateById(curUser);
+                    }
+                }
+                respMsg.data = curUser;
+            } else {
+                respMsg.setError(OpenidJSONO.getString("errcode")+":"+OpenidJSONO.getString("errmsg"));
+            }
+        }
+        return respMsg;
+    }
+
+    @Override
+    public HttpRespMsg addNewAdmin(User user) {
+        //获取该账号的创建者
+        User parentUser = userMapper.selectById(user.getParentId());
+        HttpRespMsg msg = new HttpRespMsg();
+        if (Constant.SYS_PARENT_ID.equals(parentUser.getParentId())) {
+            User oldAdmin = userMapper.selectOne(new QueryWrapper<User>().eq("company_id", user.getCompanyId()).eq("parent_id", parentUser.getId()));
+            //添加用户
+            QueryWrapper<User> qw = new QueryWrapper<>();
+            qw.eq("account", user.getAccount());
+            int count = userMapper.selectCount(qw);
+            if (count > 0) {
+                User existingUser = userMapper.selectOne(qw);
+                msg.setError("账号已存在");
+                return msg;
+            } else {
+                //创建账号默认密码"000000"
+                user.setPassword(MD5Util.getPassword(Constant.DEFAULT_PWD));
+                user.setHeadImgurl(UUID.randomUUID().toString().replaceAll("-", ""));
+                //获取角色所属的团体
+                Company company = companyMapper.selectById(user.getCompanyId());
+                if (Constant.ASSETS_COMPANY.equals(company.getCompanyType())) {
+                    user.setSubordinateType(Constant.ASSETS_COMPANY);
+                    user.setTeamName("资产方");
+                } else if (Constant.PRODUCER_COMPANY.equals(company.getCompanyType())) {
+                    user.setSubordinateType(Constant.PRODUCER_COMPANY);
+                    user.setTeamName("生产方");
+                }
+                userMapper.insert(user);
+                //老的管理员归到新管理员名下
+                oldAdmin.setParentId(user.getId());
+                userMapper.updateById(oldAdmin);
+                company.setAdministratorId(user.getId());
+                company.setAdministrator(user.getUsername());
+                companyMapper.updateById(company);
+            }
+        }
+        return msg;
+    }
+
     @Override
     public HttpRespMsg addAndUpdateUser(User user, Integer flag, Integer addType, String projectIds) {
         //获取该账号的创建者
@@ -435,14 +562,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }
             } else if (flag == 1) {
                 //更新角色信息
-//                Company company = companyMapper.selectById(user.getCompanyId());
-//                if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
-//                    user.setSubordinateType(Constant.ASSETS_COMPANY);
-//                    user.setTeamName("资产方");
-//                } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
-//                    user.setSubordinateType(Constant.PRODUCER_COMPANY);
-//                    user.setTeamName("生产方");
-//                }
+                Company company = companyMapper.selectById(user.getCompanyId());
+                if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
+                    user.setSubordinateType(Constant.ASSETS_COMPANY);
+                    user.setTeamName("资产方");
+                } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
+                    user.setSubordinateType(Constant.PRODUCER_COMPANY);
+                    user.setTeamName("生产方");
+                }
                 userMapper.updateById(user);
             }
         } else if (Constant.SYS_ID.equals(parentUser.getParentId())) {
@@ -538,14 +665,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }
             } else if (flag == 1) {
                 //更新角色信息
-//                Company company = companyMapper.selectById(user.getCompanyId());
-//                if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
-//                    user.setSubordinateType(Constant.ASSETS_COMPANY);
-//                    user.setTeamName("资产方");
-//                } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
-//                    user.setSubordinateType(Constant.PRODUCER_COMPANY);
-//                    user.setTeamName("生产方");
-//                }
+                Company company = companyMapper.selectById(user.getCompanyId());
+                if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
+                    user.setSubordinateType(Constant.ASSETS_COMPANY);
+                    user.setTeamName("资产方");
+                } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
+                    user.setSubordinateType(Constant.PRODUCER_COMPANY);
+                    user.setTeamName("生产方");
+                }
                 userMapper.updateById(user);
             }
         } else {
@@ -638,18 +765,20 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }
             } else if (flag == 1) {
                 //更新角色信息
-//                Company company = companyMapper.selectById(user.getCompanyId());
-//                if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
-//                    user.setSubordinateType(Constant.ASSETS_COMPANY);
-//                    user.setTeamName("资产方");
-//                } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
-//                    user.setSubordinateType(Constant.PRODUCER_COMPANY);
-//                    user.setTeamName("生产方");
-//                }
+                Company company = companyMapper.selectById(user.getCompanyId());
+                if (Constant.ASSETS_COMPANY == company.getCompanyType()) {
+                    user.setSubordinateType(Constant.ASSETS_COMPANY);
+                    user.setTeamName("资产方");
+                } else if (Constant.PRODUCER_COMPANY == company.getCompanyType()) {
+                    user.setSubordinateType(Constant.PRODUCER_COMPANY);
+                    user.setTeamName("生产方");
+                }
                 userMapper.updateById(user);
             }
         }
         return msg;
     }
 
+
+
 }

+ 1 - 1
cloud-model/src/main/java/com/hssx/cloudmodel/util/CodeGenerator.java

@@ -210,7 +210,7 @@ public class CodeGenerator {
         //若想要生成的实体类继承某个Controller,则可打开下面注释。写上需要继承的Controller的位置即可
 //        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
         //此处user是表名,多个英文逗号分割
-        strategy.setInclude("equipment_rec_command");
+        strategy.setInclude("tb_mould");
 //        strategy.setExclude();//数据库表全生成
 //        strategy.setInclude(scanner("user").split(","));//表名,多个英文逗号分割
         strategy.setControllerMappingHyphenStyle(true);

+ 127 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/util/EmojiHttpServletRequestWraper.java

@@ -0,0 +1,127 @@
+package com.hssx.cloudmodel.util;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+
+public class EmojiHttpServletRequestWraper extends HttpServletRequestWrapper {
+
+    public EmojiHttpServletRequestWraper(HttpServletRequest request) {
+        super(request);
+    }
+    
+    @Override
+    public String getParameter(String name) {
+        return filterEmoji(super.getParameter(name));
+    }
+    
+    @Override
+    public String getHeader(String name) {
+        return filterEmoji(super.getParameter(name));
+    }
+    
+    
+    
+    @Override
+    public String[] getParameterValues(String name) {
+        System.out.println("getParameterValues----->转义处理:"+name);
+        if(!StringUtils.isEmpty(name)){
+            String[] values = super.getParameterValues(name);
+            if(values != null ){
+            	if(values.length > 0) {
+            		String[] newValues = new String[values.length];
+            		
+            		for(int i =0; i< values.length; i++){
+            			if (containsEmoji(values[i])) {
+            				System.out.println("包含emoji:"+values[i]);
+            				newValues[i] = filterEmoji(values[i]);
+            				System.out.println("包含emoji,处理后:"+newValues[i]);
+            			} else {
+            				newValues[i] = values[i];
+            			}
+            		}
+            		return newValues;
+            	}
+            } 
+        }
+        return null;
+    }
+
+    
+    public static boolean containsEmoji(String source) {
+        if (StringUtils.isEmpty(source)) {
+            return false;
+        }
+
+        int len = source.length();
+
+        for (int i = 0; i < len; i++) {
+            char codePoint = source.charAt(i);
+
+            if (isEmojiCharacter(codePoint)) {
+                //do nothing,判断到了这里表明,确认有表情字符
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    private static boolean isEmojiCharacter(char codePoint) {
+        return (codePoint == 0x0) || 
+                (codePoint == 0x9) ||                            
+                (codePoint == 0xA) ||
+                (codePoint == 0xD) ||
+                ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) ||
+                ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) ||
+                ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
+    }
+
+    /**
+     * 过滤emoji 或者 其他非文字类型的字符
+     * @param source
+     * @return
+     */
+    public static String filterEmoji(String source) {
+    	if (source == null || "".equals(source)) {
+    		return source;
+    	}
+    	System.out.println("过滤 = "+source);
+        source = source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", "*");
+        if (!containsEmoji(source)) {
+            return source;//如果不包含,直接返回
+        }
+        //到这里铁定包含
+        StringBuilder buf = null;
+
+        int len = source.length();
+
+        for (int i = 0; i < len; i++) {
+            char codePoint = source.charAt(i);
+
+            if (isEmojiCharacter(codePoint)) {
+                if (buf == null) {
+                    buf = new StringBuilder(source.length());
+                }
+
+                buf.append(codePoint);
+            } else {
+                buf.append("*");
+            }
+        }
+
+        if (buf == null) {
+            return source;//如果没有找到 emoji表情,则返回源字符串
+        } else {
+            if (buf.length() == len) {//这里的意义在于尽可能少的toString,因为会重新生成字符串
+                buf = null;
+                return source;
+            } else {
+                return buf.toString();
+            }
+        }
+
+    }
+}

+ 94 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/util/JsapiTicketUtil.java

@@ -0,0 +1,94 @@
+package com.hssx.cloudmodel.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+import com.alibaba.fastjson.JSONObject;
+import com.hssx.cloudmodel.constant.Constant;
+
+
+public class JsapiTicketUtil {
+    public static int WX_TOKEN_EXPIRE = 7200*1000;
+    public static long TOKEN_EXPIRE = 0L;
+    public static String ticket = "";
+    /***
+     * 模拟get请求
+     * @param url
+     * @param charset
+     * @param timeout
+     * @return
+     */
+    public static String sendGet(String url, String charset, int timeout)
+    {
+        String result = "";
+        try
+        {
+            URL u = new URL(url);
+            try
+            {
+                URLConnection conn = u.openConnection();
+                conn.connect();
+                conn.setConnectTimeout(timeout);
+                BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), charset));
+                String line="";
+                while ((line = in.readLine()) != null)
+                {
+
+                    result = result + line;
+                }
+                in.close();
+            } catch (IOException e) {
+                return result;
+            }
+        }
+        catch (MalformedURLException e)
+        {
+            return result;
+        }
+
+        return result;
+    }
+    /***
+     * 获取acess_token
+     * 来源www.vxzsk.com
+     * @return
+     */
+    public static String getAccessToken(){
+        String appid = Constant.WECHAT_APPID;//应用ID
+        String appSecret = Constant.WECHAT_SECRET;//(应用密钥)
+        String url ="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appSecret+"";
+        String backData;
+        backData = sendGet(url, "utf-8", 10000);
+        System.out.println("backData=="+backData);
+        String accessToken = (String) JSONObject.parseObject(backData).get("access_token");
+        return accessToken;
+    }
+    /***
+     * 获取jsapiTicket
+     * 来源 www.vxzsk.com
+     * @return
+     */
+    public static String getJSApiTicket(){
+        //获取token
+        String acess_token= JsapiTicketUtil.getAccessToken();
+
+        String urlStr = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+acess_token+"&type=jsapi";
+        String backData;
+        backData = sendGet(urlStr, "utf-8", 10000);
+        String ticket = (String) JSONObject.parseObject(backData).get("ticket");
+
+        //刷新内存中的ticket和失效时间
+        JsapiTicketUtil.ticket = ticket;
+        TOKEN_EXPIRE = System.currentTimeMillis() + WX_TOKEN_EXPIRE;
+        return  ticket;
+
+    }
+    public static void main(String[] args) {
+        String jsapiTicket = JsapiTicketUtil.getJSApiTicket();
+        System.out.println("调用微信jsapi的凭证票为:"+jsapiTicket);
+    }
+}

+ 40 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/util/MD5Util.java

@@ -11,6 +11,7 @@ import org.springframework.util.DigestUtils;
 import javax.servlet.ServletOutputStream;
 import java.io.*;
 import java.net.URLEncoder;
+import java.security.MessageDigest;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -28,6 +29,9 @@ import java.util.zip.ZipOutputStream;
  */
 public class MD5Util {
 
+    private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5",
+            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
+
     public static String getPassword(String password) {
         return DigestUtils.md5DigestAsHex(password.getBytes());
     }
@@ -52,6 +56,8 @@ public class MD5Util {
         if(num == num1){
             System.out.println("xiangdeng");
         }
+
+
 //        zip4jDemo();
 
 //        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@@ -158,4 +164,38 @@ public class MD5Util {
             e.printStackTrace();
         }
     }
+
+
+    private static String byteArrayToHexString(byte b[]) {
+        StringBuffer resultSb = new StringBuffer();
+        for (int i = 0; i < b.length; i++)
+            resultSb.append(byteToHexString(b[i]));
+
+        return resultSb.toString();
+    }
+
+    private static String byteToHexString(byte b) {
+        int n = b;
+        if (n < 0)
+            n += 256;
+        int d1 = n / 16;
+        int d2 = n % 16;
+        return hexDigits[d1] + hexDigits[d2];
+    }
+
+    public static String MD5Encode(String origin, String charsetname) {
+        String resultString = null;
+        try {
+            resultString = new String(origin);
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            if (charsetname == null || "".equals(charsetname))
+                resultString = byteArrayToHexString(md.digest(resultString
+                        .getBytes()));
+            else
+                resultString = byteArrayToHexString(md.digest(resultString
+                        .getBytes(charsetname)));
+        } catch (Exception exception) {
+        }
+        return resultString;
+    }
 }

+ 79 - 0
cloud-model/src/main/java/com/hssx/cloudmodel/util/Sha1Util.java

@@ -0,0 +1,79 @@
+package com.hssx.cloudmodel.util;
+
+
+
+import java.net.URLDecoder;
+import java.security.MessageDigest;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.SortedMap;
+
+/*
+'============================================================================
+'api说明:
+'createSHA1Sign创建签名SHA1
+'getSha1()Sha1签名
+'============================================================================
+'*/
+public class Sha1Util {
+
+    public static void main(String[] args) {
+        String str = "jsapi_ticket=kgt8ON7yVITDhtdwci0qecaNzS34qhbQACy88uRm_S0XvT3hcWiBONbLzKnA5o5uPukt2sA3a8bBfETg4TyaQg&noncestr=10907813b97e249163587e6246612e21&timestamp=1516590573&url=http://www.dzjy.com/payHtml.html?num=1&code=001EjC0a2q6qoO0fn2Z92E6D0a2EjC0D&state=1";
+        String sign = getSha1(str);
+        System.out.println(sign);
+    }
+
+    public static String getNonceStr() {
+        Random random = new Random();
+        return MD5Util.MD5Encode(String.valueOf(random.nextInt(10000)), "UTF-8");
+    }
+    public static String getTimeStamp() {
+        return String.valueOf(System.currentTimeMillis() / 1000);
+    }
+
+    //创建签名SHA1
+    public static String createSHA1Sign(SortedMap<String, String> signParams) throws Exception {
+        StringBuffer sb = new StringBuffer();
+        Set es = signParams.entrySet();
+        Iterator it = es.iterator();
+        while (it.hasNext()) {
+            Map.Entry entry = (Map.Entry) it.next();
+            String k = (String) entry.getKey();
+            String v = (String) entry.getValue();
+            sb.append(k + "=" + v + "&");
+            //要采用URLENCODER的原始值!
+        }
+        String params = sb.substring(0, sb.lastIndexOf("&"));
+        System.out.println("sha1之前:" + params);
+        System.out.println("SHA1签名为:"+getSha1(params));
+        return getSha1(params);
+    }
+    //Sha1签名
+    public static String getSha1(String str) {
+        if (str == null || str.length() == 0) {
+            return null;
+        }
+        char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+                'a', 'b', 'c', 'd', 'e', 'f' };
+
+        try {
+            MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
+            mdTemp.update(str.getBytes("UTF-8"));
+
+            byte[] md = mdTemp.digest();
+            int j = md.length;
+            char buf[] = new char[j * 2];
+            int k = 0;
+            for (int i = 0; i < j; i++) {
+                byte byte0 = md[i];
+                buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                buf[k++] = hexDigits[byte0 & 0xf];
+            }
+            return new String(buf);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+}

+ 3 - 1
cloud-model/src/main/resources/application-prod.properties

@@ -63,5 +63,7 @@ spring.datasource.hikari.max-lifetime =30000
 spring.datasource.hikari.connection-test-query=SELECT 1
 ########################################################################################################
 # ÈÕÖ¾
-logging.path=E:/staticproject/cloudmodel/
+logging.file=E:/staticproject/cloudmodel/cloud.log
 
+wxAppId=wx42c0f9d19a4756a7
+wxAppSecret=473ee2fab33e6d8a885800403d777581

+ 9 - 0
cloud-model/src/main/resources/application.properties

@@ -58,3 +58,12 @@ spring.datasource.hikari.max-lifetime =30000
 spring.datasource.hikari.connection-test-query=SELECT 1
 logging.path=C:/log/
 
+wxAppId=wx42c0f9d19a4756a7
+wxAppSecret=473ee2fab33e6d8a885800403d777581
+
+suitId=ww8a64b0fbf8218b40
+suitSecret=ui3yZ-BFBhp8wqa0M2WvEseO637ocKGe3Wlmtj-yDU4
+#ƽ̨×÷Ϊ·þÎñÉ̵IJÎÊý
+corpId=wwac2556115d7620b7
+token=ApaKC
+encodingAesKey=e6oM3EusZzoAtKG9YSjjNrjdlYOduoEpt6PZmelaQNm

+ 1 - 1
cloud-model/src/main/resources/mapper/MouldEquipmentMapper.xml

@@ -94,7 +94,7 @@
                 and tbme.belong_company_id = #{companyId}
             </if>
             <if test="keyName != null and keyName != ''">
-                and tbme.equipment_no like concat('%',#{keyName},'%')
+                and (tbme.equipment_no like concat('%',#{keyName},'%') or tbme.equipment_name like concat('%', #{keyName}, '%'))
             </if>
         </where>
     </select>

+ 8 - 3
cloud-model/src/main/resources/mapper/MouldMapper.xml

@@ -35,11 +35,13 @@
         <result column="fixed_maintain_count" property="fixedMaintainCount" />
         <result column="move_apply_state" property="moveApplyState" />
         <result column="move_apply_reason" property="moveApplyReason" />
+        <result column="move_apply_time" property="moveApplyTime" />
+        <result column="move_apply_address" property="moveApplyAddress" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, model_no, model_name, water_gap, tonnage, oc_cycle, daily_output, company_id, current_version_id, state, is_delete, creator_id, project_id, rfid, setting_life, area, produce_company_name, initial_modulus, equipment_id, belong_project_grade, produce_company_id, run_times, is_maintain, maintain_count, holes, pre_update_id, history_run_times, last_rec_time, fixed_maintain_count, move_apply_state, move_apply_reason
+        id, model_no, model_name, water_gap, tonnage, oc_cycle, daily_output, company_id, current_version_id, state, is_delete, creator_id, project_id, rfid, setting_life, area, produce_company_name, initial_modulus, equipment_id, belong_project_grade, produce_company_id, run_times, is_maintain, maintain_count, holes, pre_update_id, history_run_times, last_rec_time, fixed_maintain_count, move_apply_state, move_apply_reason, move_apply_time, move_apply_address
     </sql>
     <resultMap id="BaseResultMapVO" type="com.hssx.cloudmodel.entity.vo.MouldVO">
         <id column="id" property="id"/>
@@ -85,6 +87,8 @@
         <result column="pre_update_id" property="preUpdateId" />
         <result column="move_apply_state" property="moveApplyState" />
         <result column="move_apply_reason" property="moveApplyReason" />
+        <result column="move_apply_time" property="moveApplyTime" />
+        <result column="move_apply_address" property="moveApplyAddress" />
         <result column="start_time" property="startTime" />
     </resultMap>
 
@@ -100,7 +104,7 @@
         tbmp.equipment_no equipmentNo,tbm.setting_life setting_life,tbp.owner_company_name ownerCompanyName,tbm.run_times run_times,
         tbmp.lng,tbmp.lat,tbmp.stage,tbmp.lastopentime
         ,tbmp.curhill_number hillNumber,tbmp.curtemperature temperature,
-        tbm.produce_company_id produce_company_id,tbm.move_apply_state, tbmp.start_time
+        tbm.produce_company_id produce_company_id,tbm.move_apply_state,tbm.move_apply_time, tbm.move_apply_address,tbmp.start_time
         from
         tb_mould tbm
         left join
@@ -155,7 +159,7 @@
         tbmp.lng,tbmp.lat,tbmp.stage,tbmp.lastopentime,
         tbmp.curhill_number hillNumber,
         tbmp.curtemperature temperature,
-        tbm.produce_company_id produce_company_id,tbm.move_apply_state, tbmp.start_time
+        tbm.produce_company_id produce_company_id,tbm.move_apply_state,tbm.move_apply_time, tbm.move_apply_address,tbmp.start_time
         from
         tb_mould tbm
         left join
@@ -211,6 +215,7 @@
         tbp.manager mangerName,tbco.company_address area,tbm.rfid rfid,tbm.oc_cycle oc_cycle,tbc.company_name companyName,tbm.pre_update_id,tbmp.equipment_name equipmentName,
         tbmp.equipment_no equipmentNo,tbmp.curhill_number hillNumber,
         tbmp.curtemperature temperature,tbm.setting_life setting_life,tbm.run_times run_times,tbmp.stage,tbm.move_apply_state,tbm.move_apply_reason,
+        tbm.move_apply_time,tbm.move_apply_address,
         tbmp.start_time
         from
         tb_mould tbm

+ 19 - 12
cloud-model/src/main/resources/mapper/UserMapper.xml

@@ -21,6 +21,8 @@
         <result column="team_name" property="teamName" />
         <result column="subordinate_type" property="subordinateType" />
         <result column="openid" property="openid" />
+        <result column="avatar" property="avatar" />
+        <result column="nickname" property="nickname" />
     </resultMap>
 
     <resultMap id="BaseResultMapVO" type="com.hssx.cloudmodel.entity.vo.UserVO">
@@ -41,28 +43,31 @@
         <result column="head_imgurl" property="headImgurl" />
         <result column="team_name" property="teamName" />
         <result column="subordinate_type" property="subordinateType" />
+        <result column="openid" property="openid" />
+        <result column="avatar" property="avatar" />
+        <result column="nickname" property="nickname" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, account, username, password, mobile, role_type, company_id, parent_id, sex, role_name, work_state, is_disable, indate, head_imgurl, team_name, subordinate_type, openid
+        id, account, username, password, mobile, role_type, company_id, parent_id, sex, role_name, work_state, is_disable, indate, head_imgurl, team_name, subordinate_type, openid, avatar, nickname
     </sql>
 
     <select id="selsctUsersByUids" resultMap="BaseResultMapVO">
-      SELECT
+        SELECT
         u.id id,  u.username username,  u.mobile mobile,  u.company_id company_id, c.`company_name` company_name,
         u.parent_id parent_id,  u.work_state work_state, u.is_disable is_disable,
-        u.indate indate, u.head_imgurl head_imgurl, u.team_name team_name, u.subordinate_type subordinate_type
+        u.indate indate, u.head_imgurl head_imgurl, u.team_name team_name, u.subordinate_type subordinate_type,avatar, nickname
         FROM
         tb_user AS u
         LEFT JOIN tb_company c
         ON u.company_id = c.`id`
-      <where>
-        <foreach collection="list" separator="," close=")" item="item" open="u.id in (" index="index">
-          #{item}
-        </foreach>
-          and u.id != #{id}
-      </where>
+        <where>
+            <foreach collection="list" separator="," close=")" item="item" open="u.id in (" index="index">
+                #{item}
+            </foreach>
+            and u.id != #{id}
+        </where>
     </select>
 
     <select id="selectListByCondition" resultMap="BaseResultMapVO">
@@ -101,10 +106,12 @@
         LEFT JOIN tb_company c
         ON u.company_id = c.`id`
         <where>
+            (
             u.id in
             <foreach collection="list" index="index" open="(" item="item" close=")" separator=",">
-              #{item}
-        </foreach>
+                #{item}
+            </foreach>
+            or u.parent_id = #{user.id})
             and u.id != #{user.id}
             <if test="flag==0 and keyName != '' and keyName !=null">
                 AND u.username like concat('%',#{keyName},'%')
@@ -122,7 +129,7 @@
         select
           u.id id, u.account account, u.username username, u.password password, u.mobile mobile, u.role_type role_type, u.company_id company_id, c.`company_name` company_name,
           u.role_name role_name,u.parent_id parent_id, u.sex sex, u.work_state work_state, u.is_disable is_disable,
-          u.indate indate, u.head_imgurl head_imgurl, u.team_name team_name, u.subordinate_type subordinate_type
+          u.indate indate, u.head_imgurl head_imgurl, u.team_name team_name, u.subordinate_type subordinate_type,avatar, nickname, openid
         from
           tb_user AS u
         LEFT JOIN tb_company c