浏览代码

Merge remote-tracking branch 'origin/master'

yusm 1 月之前
父节点
当前提交
a39345b6c7

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -195,6 +195,8 @@ public class WeiXinCorpController {
 
     @Resource
     private RedisUtil redisUtil;
+    @Autowired
+    private ProjectDeptRelateMapper projectDeptRelateMapper;
 
     public class Item {
         public String jsTicket = null;
@@ -2585,6 +2587,22 @@ public class WeiXinCorpController {
                     }*/
                     List<String> stringList = newUserList.stream().filter(u -> u != null && org.apache.commons.lang3.StringUtils.isNotEmpty(u.getCorpwxUserid())).map(User::getCorpwxUserid).distinct().collect(Collectors.toList());
                     wxCorpInfoService.getUserByCompanyIdAndTransferLicenseBatch(companyId,stringList);
+                    //员工的部门如果全部参与了项目,那这个员工也自动变成项目参与人
+                    List<Participation> autoAddParticiList = new ArrayList<>();
+                    for (User user : newUserList) {
+                        List<ProjectDeptRelate> joinProjectList = projectDeptRelateMapper.selectList(new QueryWrapper<ProjectDeptRelate>().eq("department_id", user.getDepartmentId()));
+                        if (joinProjectList.size() > 0) {
+                            for (ProjectDeptRelate projectDeptRelate : joinProjectList) {
+                                Participation participation = new Participation();
+                                participation.setUserId(user.getId());
+                                participation.setProjectId(projectDeptRelate.getProjectId());
+                                autoAddParticiList.add(participation);
+                            }
+                        }
+                    }
+                    if (autoAddParticiList.size() > 0) {
+                        participationMapper.insertBatch(autoAddParticiList);
+                    }
                 }
             }
             //姓名,部门,账号的同步更新

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DeviceLogServiceImpl.java

@@ -391,7 +391,7 @@ public class DeviceLogServiceImpl extends ServiceImpl<DeviceLogMapper, DeviceLog
         Integer companyId = targetUser.getCompanyId();
         List<Map<String, Object>> sumProjectList =deviceLogMapper.selectListGroupByProject(companyId,startDate,endDate,projectId);
         List<Device> deviceList = deviceMapper.selectList(new QueryWrapper<Device>().eq("company_id", companyId));
-        List<DeviceLog> deviceLogs = deviceLogMapper.selectList(new QueryWrapper<DeviceLog>().between("create_date", startDate, endDate).isNotNull("end_time"));
+        List<DeviceLog> deviceLogs = deviceLogMapper.selectList(new QueryWrapper<DeviceLog>().between("start_time", startDate, endDate).isNotNull("end_time"));
 
         ArrayList<List<String>> allList = new ArrayList<>();
         List<String> headList = new ArrayList<String>();

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

@@ -48,7 +48,7 @@
         inner JOIN device_log dl on p.id=dl.project_id
         <where>
             <if test="startDate !=null and startDate!='' and endDate !=null and endDate!='' ">
-                and dl.create_date BETWEEN #{startDate} and #{endDate}
+                and dl.start_time BETWEEN #{startDate} and #{endDate}
             </if>
             <if test="companyId!=null">
                 and p.company_id=#{companyId}

+ 9 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/mapper/PlanMapper.java

@@ -3,8 +3,12 @@ package com.management.platform.mapper;
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.management.platform.entity.Plan;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.PlanProcedureTotal;
+import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
-import org.springframework.test.context.jdbc.Sql;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -18,4 +22,8 @@ public interface PlanMapper extends BaseMapper<Plan> {
 
     @Update("update plan set real_end_date = null,hide_state=0 where id = #{id}")
     void setToNormalState(Integer id);
+
+    @Select("SELECT plan_id,prod_procedure_id FROM plan_procedure_total \n" +
+            "LEFT JOIN prod_procedure ON plan_procedure_total.`prod_procedure_id` = prod_procedure.`id` WHERE  prod_procedure.name like #{name}")
+    List<PlanProcedureTotal> findPlanByProcedureName(String name);
 }

+ 21 - 9
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanServiceImpl.java

@@ -23,6 +23,7 @@ import org.apache.poi.xssf.usermodel.XSSFRow;
 import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -99,6 +100,8 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
 
     @Value(value = "${upload.path}")
     private String path;
+    @Autowired
+    private PlanProcedureTotalMapper planProcedureTotalMapper;
 
     @Override
     public HttpRespMsg getList(String date, String steelStampNumber, Integer planType,Integer deptId,Integer pageIndex,Integer pageSize,Integer isMob,Integer searchType,String searchValue) {
@@ -177,14 +180,6 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             List<DepartmentOtherManager> otherManagers = departmentOtherManagerService.list(new LambdaQueryWrapper<DepartmentOtherManager>().eq(DepartmentOtherManager::getOtherManagerId,user.getId()));
             List<Integer> otherDeptIds = otherManagers.stream().map(DepartmentOtherManager::getDepartmentId).distinct().collect(Collectors.toList());
             deptIds.addAll(otherDeptIds);
-            /*作为部门负责人看到的数据*/
-//            if(departmentMapper.selectCount(new LambdaQueryWrapper<Department>().eq(Department::getManagerId,user.getId()))>0
-//                    ||departmentOtherManagerService.count(new LambdaQueryWrapper<DepartmentOtherManager>().eq(DepartmentOtherManager::getOtherManagerId,user.getId()))>0){
-////                queryWrapper.and(wrapper->wrapper.and(wr->wr.in(Plan::getStationId,deptIds).eq(Plan::getStatus,1)).or().eq(Plan::getCreateId,user.getId()));
-//                queryWrapper.and(wrapper->wrapper.and(wr->wr.in(Plan::getStationId,deptIds)).or().eq(Plan::getCreateId,user.getId()));
-//            }else {
-//
-//            }
             List<ProdProcedureTeam> prodProcedureTeams = prodProcedureTeamService.list(new QueryWrapper<ProdProcedureTeam>().eq("company_id", companyId).eq("user_id", user.getId()));
             List<Integer> collect=new ArrayList<>();
             if(prodProcedureTeams!=null&&prodProcedureTeams.size()>0){
@@ -204,6 +199,17 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
             ids.add(-1);
             queryWrapper.in(Plan::getId,ids);
         }
+        List<PlanProcedureTotal> searchPlanProcedureList = null;
+        if (searchType != null && searchType == 5 && !StringUtils.isEmpty(searchValue)) {
+            //按工序名称匹配搜索
+            searchPlanProcedureList = planMapper.findPlanByProcedureName("%"+searchValue+"%");
+            List<Integer> planIds = searchPlanProcedureList.stream().map(PlanProcedureTotal::getPlanId).collect(Collectors.toList());
+            if (planIds.size() == 0) {
+                queryWrapper.eq(Plan::getId, -1);
+            } else {
+                queryWrapper.in(Plan::getId,planIds);
+            }
+        }
         queryWrapper.orderByDesc(Plan::getCreateTime).orderByDesc(Plan::getStartDate);
         IPage<Plan> planIPage = planMapper.selectPage(new Page<>(pageIndex, pageSize), queryWrapper);
         List<Plan> records = planIPage.getRecords();
@@ -212,7 +218,13 @@ public class PlanServiceImpl extends ServiceImpl<PlanMapper, Plan> implements Pl
         List<Product> productList = productMapper.selectList(new QueryWrapper<Product>().in("id", ids));
         List<Integer> planIds = records.stream().map(Plan::getId).distinct().collect(Collectors.toList());
         planIds.add(-1);
-        List<PlanProcedureTotal> procedureTotals = planProcedureTotalService.list(new QueryWrapper<PlanProcedureTotal>().in("plan_id", planIds));
+
+        QueryWrapper<PlanProcedureTotal> planProcedureTotalQueryWrapper = new QueryWrapper<PlanProcedureTotal>().in("plan_id", planIds);
+//        if (searchPlanProcedureList != null && searchPlanProcedureList.size() > 0) {
+//            //在按工序名称搜索过滤后的数据中进行匹配
+//            planProcedureTotalQueryWrapper.in("id", searchPlanProcedureList.stream().map(PlanProcedureTotal::getId).collect(Collectors.toList()));
+//        }
+        List<PlanProcedureTotal> procedureTotals = planProcedureTotalService.list(planProcedureTotalQueryWrapper);
         List<PlanSteelStampNumber> planSteelStampNumbers = planSteelStampNumberService.list(new QueryWrapper<PlanSteelStampNumber>().in("plan_id", planIds));
         List<Integer> ptIds = procedureTotals.stream().map(PlanProcedureTotal::getId).collect(Collectors.toList());
         ptIds.add(-1);

+ 1 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java

@@ -424,6 +424,7 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
                 }
 
                 ProdProcedure prodProcedure=new ProdProcedure();
+                prodProcedure.setCompanyId(companyId);
                 if( productNameCell!=null){
                     prodProcedure.setProductName(productNameCell.getStringCellValue());
                 }else{

+ 30 - 1
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/InsertionPlan/InsertionPlan.vue

@@ -2,6 +2,16 @@
   <div class="flexCoum">
     <van-nav-bar title="插单计划" left-text="返回" @click-left="back" fixed left-arrow v-if="!beDeptList" />
     <van-nav-bar title="插单计划" left-text="返回" right-text="新建" @click-left="back" v-if="beDeptList" fixed left-arrow @click-right="add" />
+    <div class="seachPlan">
+      <van-search
+        v-model="searchValue"
+        placeholder="请输入搜索关键词"
+        clearable
+        @input="debouncedPlanSeach"
+        @search="debouncedPlanSeach"
+        @clear="debouncedPlanSeach"
+      />
+    </div>
     <div class="InsertionPlan flexCoum-box">
       <div class="InsertionPlanBox contentRoll">
         <div v-for="item,index in planList" :key="index" class="InsertionPlanBox_item">
@@ -24,6 +34,8 @@ export default {
       beDeptList: JSON.parse(localStorage.getItem('beDeptList')), // 是否为工长
       user: JSON.parse(localStorage.getItem('userInfo')),
       planList: [],
+      debouncedPlanSeach: () => {},
+      searchValue: '',
     };
   },
   computed: {},
@@ -31,8 +43,21 @@ export default {
   created() {},
   mounted() {
     this.getPlanList()
+    this.debouncedPlanSeach = this.debounce(this.planSeach, 500); // 300ms 防抖
   },
   methods: {
+    debounce(func, wait) {
+      let timeout;
+      return function (...args) {
+        clearTimeout(timeout);
+        timeout = setTimeout(() => {
+          func.apply(this, args);
+        }, wait);
+      };
+    },
+    planSeach() {
+      this.getPlanList()
+    },
     back() {
       this.$router.go(-1);
     },
@@ -51,6 +76,8 @@ export default {
         pageIndex: 0,
         pageSize: 10000,
         planType: 2,
+        searchType: 5,
+        searchValue: this.searchValue,
       })
       .then(res => {
         if (res.code == "ok") {
@@ -87,10 +114,12 @@ export default {
   * {
     box-sizing: border-box;
   }
+  .seachPlan {
+    padding-top: 46px;
+  }
   .InsertionPlan {
     height: 100%;
     background-color: #F4F4F4;
-    padding-top: 46px;
     display: flex;
     flex-direction: column;
 

+ 32 - 3
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/todayPlan/todayPlan.vue

@@ -1,6 +1,16 @@
 <template>
   <div class="flexCoum">
     <van-nav-bar title="今日计划" left-text="返回" @click-left="back" fixed left-arrow />
+    <div class="seachPlan">
+      <van-search
+        v-model="searchValue"
+        placeholder="请输入搜索关键词"
+        clearable
+        @input="debouncedPlanSeach"
+        @search="debouncedPlanSeach"
+        @clear="debouncedPlanSeach"
+      />
+    </div>
     <div class="todayPlan flexCoum-box">
       <PlanComponent :titleText="'今日计划'" :planList="planList" v-if="planList.length > 0" @planClick="getPlanList"></PlanComponent>
       <van-empty description="暂无数据" v-else />
@@ -18,6 +28,8 @@ export default {
   data() {
     return {
       planList: [], // 今日计划数据
+      searchValue: '',
+      debouncedPlanSeach: () => {},
     };
   },
   computed: {},
@@ -25,11 +37,24 @@ export default {
   created() { },
   mounted() {
     this.getPlanList()
+    this.debouncedPlanSeach = this.debounce(this.planSeach, 500); // 300ms 防抖
   },
   methods: {
     back() {
       this.$router.go(-1);
     },
+    debounce(func, wait) {
+      let timeout;
+      return function (...args) {
+        clearTimeout(timeout);
+        timeout = setTimeout(() => {
+          func.apply(this, args);
+        }, wait);
+      };
+    },
+    planSeach() {
+      this.getPlanList()
+    },
     getPlanList() {
       this.$toast.loading({
         duration: 0, // 持续展示 toast
@@ -40,7 +65,9 @@ export default {
         pageIndex: 0,
         pageSize: 10000,
         planType: 0,
-        isMob:1
+        isMob:1,
+        searchType: 5,
+        searchValue: this.searchValue,
         // date: this.getNowFormatDate()
       })
       .then(res => {
@@ -48,6 +75,7 @@ export default {
           res.data.records.forEach(item => { item.flg = false })
           // this.planList = res.data.records;
           this.planList = []
+          this.planListCopy = []
           // res.data.records.forEach((item => {
           //   const newProgress = item.progress && item.progress.split('%')[0]
           //   const progressFlag = newProgress ? (newProgress > 0 && newProgress < 100) ? true : false : false
@@ -102,10 +130,11 @@ export default {
 * {
   box-sizing: border-box;
 }
-
+.seachPlan {
+  padding-top: 46px;
+}
 .todayPlan {
   height: 100%;
   background-color: #F4F4F4;
-  padding-top: 46px;
 }
 </style>

+ 29 - 2
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/planView/tomorrowPlan/tomorrowPlan.vue

@@ -1,7 +1,17 @@
 <template>
   <div class="flexCoum">
     <van-nav-bar title="明日计划" left-text="返回" @click-left="back" fixed left-arrow/>
-    <div class="todayPlan flexCoum-box">
+    <div class="seachPlan">
+      <van-search
+        v-model="searchValue"
+        placeholder="请输入搜索关键词"
+        clearable
+        @input="debouncedPlanSeach"
+        @search="debouncedPlanSeach"
+        @clear="debouncedPlanSeach"
+      />
+    </div>
+    <div class="flexCoum-box">
       <PlanComponent :titleText="'明日计划'" :planList="planList" v-if="planList.length > 0"></PlanComponent>
       <van-empty description="赞无数据" v-else />
     </div>
@@ -18,6 +28,8 @@ export default {
   data() {
     return {
       planList: [], // 明日计划数据
+      searchValue: '',
+      debouncedPlanSeach: () => {},
     };
   },
   computed: {},
@@ -25,9 +37,22 @@ export default {
   created() {},
   mounted() {
     this.getPlanList()
+    this.debouncedPlanSeach = this.debounce(this.planSeach, 500); // 300ms 防抖
   },
   methods: {
-    back() {
+
+    debounce(func, wait) {
+      let timeout;
+      return function (...args) {
+        clearTimeout(timeout);
+        timeout = setTimeout(() => {
+          func.apply(this, args);
+        }, wait);
+      };
+    },
+    planSeach() {
+      this.getPlanList()
+    },    back() {
       this.$router.go(-1);
     },
     getPlanList() {
@@ -35,6 +60,8 @@ export default {
         pageIndex: 0,
         pageSize: 10000,
         planType: 1,
+        searchType: 5,
+        searchValue: this.searchValue,
         // date: this.getNowFormatDate()
       })
       .then(res => {