Просмотр исходного кода

Merge remote-tracking branch 'origin/master'

Guo1B0 1 год назад
Родитель
Сommit
3dd332ee61
21 измененных файлов с 225 добавлено и 94 удалено
  1. 2 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/PlatformStartApplication.java
  2. 8 6
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ContactsController.java
  3. 34 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/TaskController.java
  4. 1 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Contacts.java
  5. 2 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ContactsService.java
  6. 2 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ContactsDocumentServiceImpl.java
  7. 36 23
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ContactsServiceImpl.java
  8. 3 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  9. 1 1
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/application-dev.yml
  10. 12 1
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/ContactsMapper.xml
  11. 21 10
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserWithBeisenController.java
  12. 11 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  13. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/WxCorpInfoController.java
  14. 11 7
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  15. 24 14
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  16. 29 17
      fhKeeper/formulahousekeeper/timesheet/src/components/select.vue
  17. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/contract/index.vue
  18. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  19. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/projectApproval/projectApproval.vue
  20. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  21. 23 0
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

+ 2 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/PlatformStartApplication.java

@@ -9,6 +9,7 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 /**
  * Author: 吴涛涛
@@ -20,6 +21,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @MapperScan("com.management.platform.mapper")
 @EnableTransactionManagement //开启事务支持
 @EnableAsync
+@EnableScheduling
 public class PlatformStartApplication {
     public static void main(String[] args) {
         SpringApplication.run(PlatformStartApplication.class, args);

+ 8 - 6
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ContactsController.java

@@ -57,23 +57,25 @@ public class ContactsController {
         return contactsService.addContacts(contacts, request);
     }
     @RequestMapping("/getAllContacts")
-    public HttpRespMsg getAllContacts(Integer customerId,HttpServletRequest request){
-        return contactsService.getAllContacts(customerId,request);
+    public HttpRespMsg getAllContacts(Integer businessId,Integer salesId ,Integer customerId,HttpServletRequest request){
+        return contactsService.getAllContacts(businessId,salesId,customerId,request);
     }
 
     /**
      * 分页查询联系人
      * @param pageIndex
      * @param pageSize
-     * @param customName
+     * @param customId
      * @param name
+     * @param email
+     * @param creatorId
      * @param phone
-     * @param ownerName
+     * @param ownerId
      * @return
      */
     @RequestMapping("/pageContacts")
-    public HttpRespMsg pageContacts(@RequestParam Integer pageIndex, @RequestParam Integer pageSize,String customName, String name, String email,String creatorName, String phone, String ownerName){
-        return contactsService.pageContacts(pageIndex,pageSize,customName,name,email,creatorName,phone,ownerName,request);
+    public HttpRespMsg pageContacts(@RequestParam Integer pageIndex, @RequestParam Integer pageSize,Integer customId, String name, String email,String creatorId, String phone, String ownerId){
+        return contactsService.pageContacts(pageIndex,pageSize,customId,name,email,creatorId,phone,ownerId,request);
     }
 
     /**

+ 34 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/TaskController.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.IPage;
 import com.management.platform.entity.*;
@@ -16,7 +17,10 @@ import com.management.platform.service.*;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.MessageUtils;
 import com.taobao.api.internal.mapping.ApiField;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.ss.formula.functions.T;
 import org.assertj.core.util.Lists;
+import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -27,6 +31,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.sql.Wrapper;
 import java.time.Duration;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -44,6 +49,7 @@ import java.util.stream.Collectors;
  */
 @RestController
 @RequestMapping("/tasks")
+@Slf4j
 public class TaskController {
     @Resource
     private HttpServletRequest request;
@@ -100,5 +106,33 @@ public class TaskController {
         return taskService.updateTaskStatus(taskDto,request);
     }
 
+    /**
+     * 定时修改过期的任务状态
+     */
+    @Scheduled(cron = "0 0/30 * * * ?")
+    public void updateTaskStatusByTiming(){
+        log.info("定时执行了===========>");
+        QueryWrapper<Task> taskQueryWrapper = new QueryWrapper<>();
+        taskQueryWrapper.eq("is_delete",0);
+        List<Task> list = taskService.list(taskQueryWrapper);
+        ArrayList<Integer> overtimeTaskIds = new ArrayList<>();
+        if (!list.isEmpty()){
+            for (Task task : list) {
+                if (task.getEndDate()!=null && task.getStatus()!=null && task.getStatus()<2 &&task.getEndDate().isBefore(LocalDateTime.now())){
+                    overtimeTaskIds.add(task.getId());
+                }
+            }
+        }
+        if (!overtimeTaskIds.isEmpty()){
+            UpdateWrapper<Task> updateWrapper = new UpdateWrapper<>();
+            updateWrapper.set("status",3).in("id",overtimeTaskIds);//设置推迟
+            taskService.update(updateWrapper);
+            log.info("修改了");
+        }else {
+            log.info("没修改");
+        }
+
+    }
+
 }
 

+ 1 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Contacts.java

@@ -19,7 +19,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2024-03-12
+ * @since 2024-06-12
  */
 @Data
 @EqualsAndHashCode(callSuper = false)

+ 2 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/ContactsService.java

@@ -22,7 +22,7 @@ public interface ContactsService extends IService<Contacts> {
 
     HttpRespMsg addContacts(Contacts contacts, HttpServletRequest request);
 
-    HttpRespMsg pageContacts(Integer pageIndex, Integer pageSize, String customName, String name,String email,String creatorName,  String phone, String ownerName, HttpServletRequest request);
+    HttpRespMsg pageContacts(Integer pageIndex, Integer pageSize, Integer customId, String name, String email, String creatorId, String phone, String ownerId, HttpServletRequest request);
 
     HttpRespMsg selectContactsByCustomId(Custom custom,HttpServletRequest request);
 
@@ -42,7 +42,7 @@ public interface ContactsService extends IService<Contacts> {
 
     HttpRespMsg exportData(String customName, String name, String email, String creatorName, String phone, String ownerName, HttpServletRequest request) throws Exception;
 
-    HttpRespMsg getAllContacts(Integer customerId, HttpServletRequest request);
+    HttpRespMsg getAllContacts(Integer businessId, Integer salesId, Integer customerId, HttpServletRequest request);
 
     int transferContacts(Contacts contactsGet, User user);
 

+ 2 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ContactsDocumentServiceImpl.java

@@ -113,7 +113,7 @@ public class ContactsDocumentServiceImpl extends ServiceImpl<ContactsDocumentMap
     public HttpRespMsg fileDown(HttpServletRequest request, HttpServletResponse response, Integer folderId, Integer contactsId, Integer fileId) {
         HttpRespMsg msg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("token"));
-        List<ContactsDocument> files = contactsDocumentMapper.selectList(new QueryWrapper<ContactsDocument>().eq("contacts_id", contactsId));
+        List<ContactsDocument> files = contactsDocumentMapper.selectList(new QueryWrapper<ContactsDocument>().eq("id", fileId));
         try {
             ServletOutputStream os = response.getOutputStream();
             for (ContactsDocument file : files) {
@@ -142,7 +142,7 @@ public class ContactsDocumentServiceImpl extends ServiceImpl<ContactsDocumentMap
         List<Integer> fileIds = contactsFileDto.getFileIds();
         List<ContactsDocument> contactsDocuments = contactsDocumentMapper.selectBatchIds(fileIds);
         for (ContactsDocument contactsDocument : contactsDocuments) {
-            contactsDocumentMapper.update(null,new UpdateWrapper<ContactsDocument>().eq("contacts_id", contactsDocument.getContactsId()).set("is_deleted", 1));
+            contactsDocumentMapper.update(null,new UpdateWrapper<ContactsDocument>().eq("id", contactsDocument.getId()).set("is_deleted", 1));
         }
         msg.setMsg("删除成功");
         return msg;

+ 36 - 23
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ContactsServiceImpl.java

@@ -3,7 +3,6 @@ package com.management.platform.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -17,10 +16,6 @@ import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.poi.hssf.usermodel.HSSFCell;
-import org.apache.poi.hssf.usermodel.HSSFRow;
-import org.apache.poi.hssf.usermodel.HSSFSheet;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.ss.usermodel.CellType;
 import org.apache.poi.xssf.usermodel.XSSFCell;
 import org.apache.poi.xssf.usermodel.XSSFRow;
@@ -64,6 +59,9 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
     @Resource
     private BusinessOpportunityMapper businessOpportunityMapper;
 
+    @Resource
+    private SalesOrderMapper salesOrderMapper;
+
     @Resource
     private CustomMapper customMapper;
 
@@ -112,13 +110,10 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
         }
 
         LambdaQueryWrapper<Contacts> lqw_contacts = new LambdaQueryWrapper<>();
-        lqw_contacts.eq(Contacts::getCustomId, contacts.getCustomId())
-                .eq(Contacts::getName, contacts.getName())
-                .eq(Contacts::getPhone,contacts.getPhone())
-                .eq(Contacts::getOwnerId,contacts.getOwnerId());
+        lqw_contacts.eq(Contacts::getPhone,contacts.getPhone());
         Contacts selectedOne = contactsMapper.selectOne(lqw_contacts);
         if (selectedOne != null) {
-            httpRespMsg.setError("已存在该联系人!");
+            httpRespMsg.setError("已存在该联系人,手机号重复!");
             return httpRespMsg;
         }
         contacts.setCompanyId(companyId)
@@ -141,19 +136,19 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
     }
 
     @Override
-    public HttpRespMsg pageContacts(Integer pageIndex, Integer pageSize, String customName, String name, String email, String creatorName, String phone, String ownerName, HttpServletRequest request) {
+    public HttpRespMsg pageContacts(Integer pageIndex, Integer pageSize, Integer customId, String name, String email, String creatorId, String phone, String ownerId, HttpServletRequest request) {
         Map<String, Object> map = new HashMap<>();
-        map.put("customName", customName);
+        map.put("customId", customId);
         map.put("name", name);
         map.put("phone", phone);
-        map.put("ownerName", ownerName);
+        map.put("ownerId", ownerId);
         map.put("email", email);
-        map.put("creatorName", creatorName);
+        map.put("creatorId", creatorId);
         String token = String.valueOf(request.getHeader("Token"));
         User user = userMapper.selectById(token);
         map.put("companyId", user.getCompanyId());
         map.put("isDelete", 0);
-        Page<ContactsVo> pageContacts = contactsMapper.pageContacts(new Page(pageIndex, pageSize), map);
+        Page<ContactsVo> pageContacts = contactsMapper.pageContacts(new Page((long) (pageIndex - 1) *pageSize, pageSize), map);
 
         List<ContactsVo> records = pageContacts.getRecords();
         long total = pageContacts.getTotal();
@@ -241,7 +236,7 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
         User user = userMapper.selectById(token);
         map.put("companyId", user.getCompanyId());
         map.put("isDelete", 1);
-        Page<ContactsVo> pageContacts = contactsMapper.pageContacts(new Page(pageIndex, pageSize), map);
+        Page<ContactsVo> pageContacts = contactsMapper.pageContacts(new Page((long) (pageIndex - 1) *pageSize, pageSize), map);
 
         List<ContactsVo> records = pageContacts.getRecords();
         long total = pageContacts.getTotal();
@@ -475,11 +470,6 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
                             userNameList.add(cell.getStringCellValue());
                         }
                     }
-                    if(modelName.equals("companySigner")){
-                        if(!org.springframework.util.StringUtils.isEmpty(cell.getStringCellValue())){
-                            userNameList.add(cell.getStringCellValue());
-                        }
-                    }
 
                 }
             }
@@ -508,6 +498,7 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
                 Contacts contacts=new Contacts();
                 contacts.setCompanyId(companyId);
                 contacts.setCreatorId(user.getId());
+                contacts.setIsDelete(0);
                 for (int i = 0; i < cellNum; i++) {
                     String modelName = modelNameList.get(i);
                     String className = modelName.substring(0, 1).toUpperCase() + modelName.substring(1);
@@ -684,10 +675,32 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
     }
 
     @Override
-    public HttpRespMsg getAllContacts(Integer customerId, HttpServletRequest request) {
+    public HttpRespMsg getAllContacts(Integer businessId, Integer salesId, Integer customerId, HttpServletRequest request) {
         User user = userMapper.selectById(request.getHeader("token"));
         HttpRespMsg mgs = new HttpRespMsg();
-        if (customerId!=null){
+        if (businessId!=null){
+            BusinessOpportunity businessOpportunity = businessOpportunityMapper.selectById(businessId);
+            if (businessOpportunity==null||businessOpportunity.getContactsId()==null){
+                mgs.setData(new ArrayList<Contacts>());
+            }else {
+                Integer contactsId = businessOpportunity.getContactsId();
+                mgs.setData(contactsMapper.selectList(new QueryWrapper<Contacts>()
+                        .eq("company_id",user.getCompanyId())
+                        .eq("id",contactsId)));
+            }
+        }else if(salesId!=null){
+            SalesOrder salesOrder = salesOrderMapper.selectById(salesId);
+            if (salesOrder==null||salesOrder.getContactsId()==null){
+                mgs.setData(new ArrayList<Contacts>());
+            }else {
+                Integer contactsId = salesOrder.getContactsId();
+                mgs.setData(contactsMapper.selectList(new QueryWrapper<Contacts>()
+                        .eq("company_id",user.getCompanyId())
+                        .eq("id",contactsId)));
+            }
+
+        }
+        else if (customerId!=null){
             mgs.setData(contactsMapper.selectList(new QueryWrapper<Contacts>()
                     .eq("company_id",user.getCompanyId())
                     .eq("custom_id",customerId)));

+ 3 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java

@@ -242,7 +242,8 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
                 User selectedUser = userMapper.selectById(executorId);
                 taskExecutor.setExecutorId(executorId)
                         .setTaskId(task.getId())
-                        .setExecutorName(selectedUser.getName());
+                        .setExecutorName(selectedUser.getName())
+                        .setCompanyId(user.getCompanyId());
                 taskExecutorMapper.insert(taskExecutor);
             }
         }
@@ -402,6 +403,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
                 task.setCreaterId(user.getId());
                 task.setCreateDate(LocalDateTime.now());
                 task.setStatus(0);
+                task.setIsDelete(0);
                 for (int i = 0; i < cellNum; i++) {
                     JSONObject item = configObJSONArray.getJSONObject(i);
                     String modelName = item.getString("model");

+ 1 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/resources/application-dev.yml

@@ -80,7 +80,7 @@ mybatis:
   mapper-locations: mappers/*Mapper.xml
 #####配置图片上传路径####
 upload:
-  path: /www/staticproject/timesheet/upload/
+  path: /www/staticproject/timesheet-crm/upload/
 
 
 

+ 12 - 1
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/ContactsMapper.xml

@@ -29,11 +29,13 @@
     <sql id="Base_Column_List">
         id, company_id, sex, name, custom_id, email, phone, owner_id, creator_id, address, remark, is_delete, create_time, position, plate1, plate2, plate3, plate4, plate5
     </sql>
+
     <select id="pageContacts" parameterType="java.util.Map"  resultType="com.management.platform.entity.vo.ContactsVo">
-        SELECT c.*, cust.custom_name as customName, own.name as ownerName
+        SELECT c.*, cust.custom_name as customName, own.name as ownerName,u.name as creatorName
         FROM contacts c
         LEFT JOIN custom cust ON c.custom_id = cust.id
         LEFT JOIN user own ON c.owner_id = own.id
+        LEFT JOIN user u ON c.creator_id = u.id
         <where>
             <if test="map.isDelete != null ">
                 AND c.is_delete =#{map.isDelete}
@@ -47,6 +49,15 @@
             <if test="map.creatorName != null and map.creatorName != ''">
                 AND own.name LIKE CONCAT('%', #{map.creatorName}, '%')
             </if>
+            <if test="map.customId != null and map.customId != ''">
+                AND cust.id =#{map.customId}
+            </if>
+            <if test="map.ownerId != null and map.ownerId != ''">
+                AND own.id =#{map.ownerId}
+            </if>
+            <if test="map.creatorId != null and map.creatorId != ''">
+                AND own.id =#{map.creatorId}
+            </if>
             <if test="map.phone != null and map.phone != ''">
                 AND c.phone LIKE CONCAT('%', #{map.phone}, '%')
             </if>

+ 21 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserWithBeisenController.java

@@ -254,7 +254,7 @@ public class UserWithBeisenController {
                                         //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                         workTime=workTime+o.getDouble("OverTimeDuration");
                                     }else{
-                                        workTime=workTime+divide.doubleValue();
+                                        workTime=workTime+round(divide.doubleValue(),0.5);
                                     }
                                 }else {
                                     //开始日期和结束日期是不相同的情况 说明是加班区间存在加班到第二天的情况
@@ -270,7 +270,7 @@ public class UserWithBeisenController {
                                         //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                         workTime=workTime+l;
                                     }else {
-                                        workTime=workTime+divide.doubleValue();
+                                        workTime=workTime+round(divide.doubleValue(),0.5);
                                     }
                                 }
                             }else if(LocalDateTime.parse(o.getString("StopDate"),df1).toLocalDate().isEqual(localDate)){
@@ -283,7 +283,7 @@ public class UserWithBeisenController {
                                         //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                         workTime=workTime+o.getDouble("OverTimeDuration");
                                     }else {
-                                        workTime=workTime+divide.doubleValue();
+                                        workTime=workTime+round(divide.doubleValue(),0.5);
                                     }
                                 }else {
                                     //开始日期和结束日期是不相同的情况 说明是加班区间存在加班到第二天的情况
@@ -299,7 +299,7 @@ public class UserWithBeisenController {
                                         //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                         workTime=workTime+l;
                                     }else {
-                                        workTime=workTime+divide.doubleValue();
+                                        workTime=workTime+round(divide.doubleValue(),0.5);
                                     }
                                 }
                             }
@@ -408,14 +408,17 @@ public class UserWithBeisenController {
 
 
     @RequestMapping("/getAttendanceStatisticWithUser")
-    public HttpRespMsg getAttendanceStatisticWithUser(String createDate){
+    public HttpRespMsg getAttendanceStatisticWithUser(String userId,String createDate){
         HttpRespMsg msg=new HttpRespMsg();
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         DateTimeFormatter df1=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
         DateTimeFormatter df2=DateTimeFormatter.ofPattern("HH:mm");
         DateTimeFormatter df3=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
         DateTimeFormatter df4=DateTimeFormatter.ofPattern("HH:mm:ss");
-        User user = userMapper.selectById(request.getHeader("token"));
+        if(StringUtils.isEmpty(userId)){
+            userId=request.getHeader("token");
+        }
+        User user = userMapper.selectById(userId);
         Integer companyId = user.getCompanyId();
         TimeType timeType = timeTypeMapper.selectById(companyId);
         List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
@@ -500,7 +503,8 @@ public class UserWithBeisenController {
                                 //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                 workTime=workTime+o.getDouble("OverTimeDuration");
                             }else{
-                                workTime=workTime+divide.doubleValue();
+                                //作为打卡获取到的加班时长 必须是0.5的倍数
+                                workTime=workTime+round(divide.doubleValue(),0.5);
                             }
                         }else {
                             //开始日期和结束日期是不相同的情况 说明是加班区间存在加班到第二天的情况
@@ -516,7 +520,7 @@ public class UserWithBeisenController {
                                 //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                 workTime=workTime+l;
                             }else {
-                                workTime=workTime+divide.doubleValue();
+                                workTime=workTime+round(divide.doubleValue(),0.5);
                             }
                         }
                     }else if(LocalDateTime.parse(o.getString("StopDate"),df1).toLocalDate().isEqual(localDate)){
@@ -529,7 +533,7 @@ public class UserWithBeisenController {
                                 //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                 workTime=workTime+o.getDouble("OverTimeDuration");
                             }else {
-                                workTime=workTime+divide.doubleValue();
+                                workTime=workTime+round(divide.doubleValue(),0.5);
                             }
                         }else {
                             //开始日期和结束日期是不相同的情况 说明是加班区间存在加班到第二天的情况
@@ -545,7 +549,7 @@ public class UserWithBeisenController {
                                 //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                 workTime=workTime+l;
                             }else {
-                                workTime=workTime+divide.doubleValue();
+                                workTime=workTime+round(divide.doubleValue(),0.5);
                             }
                         }
                     }
@@ -597,5 +601,12 @@ public class UserWithBeisenController {
         return msg;
     }
 
+    public static double round( double num, double multipleOf) {
+        if (num%multipleOf == 0){
+            return num;
+        }
+        return Math.floor(num / multipleOf) * multipleOf;
+    }
+
 }
 

+ 11 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -2329,7 +2329,7 @@ public class TimingTask {
                                         //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                         workTime=workTime+o.getDouble("OverTimeDuration");
                                     }else{
-                                        workTime=workTime+divide.doubleValue();
+                                        workTime=workTime+round(divide.doubleValue(),0.5);
                                     }
                                 }else {
                                     //开始日期和结束日期是不相同的情况 说明是加班区间存在加班到第二天的情况
@@ -2345,7 +2345,7 @@ public class TimingTask {
                                         //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                         workTime=workTime+l;
                                     }else {
-                                        workTime=workTime+divide.doubleValue();
+                                        workTime=workTime+round(divide.doubleValue(),0.5);
                                     }
                                 }
                             }else if(LocalDateTime.parse(o.getString("StopDate"),df1).toLocalDate().isEqual(localDate)){
@@ -2358,7 +2358,7 @@ public class TimingTask {
                                         //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                         workTime=workTime+o.getDouble("OverTimeDuration");
                                     }else {
-                                        workTime=workTime+divide.doubleValue();
+                                        workTime=workTime+round(divide.doubleValue(),0.5);
                                     }
                                 }else {
                                     //开始日期和结束日期是不相同的情况 说明是加班区间存在加班到第二天的情况
@@ -2374,7 +2374,7 @@ public class TimingTask {
                                         //打卡获取到的加班时长大于加班单时长 需要在打卡体现的时长-打卡体现的加班时长+加班单时长
                                         workTime=workTime+l;
                                     }else {
-                                        workTime=workTime+divide.doubleValue();
+                                        workTime=workTime+round(divide.doubleValue(),0.5);
                                     }
                                 }
                             }
@@ -2477,6 +2477,13 @@ public class TimingTask {
         }
     }
 
+    public static double round( double num, double multipleOf) {
+        if (num%multipleOf == 0){
+            return num;
+        }
+        return Math.floor(num / multipleOf) * multipleOf;
+    }
+
 
 
     @Scheduled(cron = "1 1 1 1 1 ?")

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/WxCorpInfoController.java

@@ -91,7 +91,7 @@ public class WxCorpInfoController {
         filter1.put("value",1);
         jsonArrayFilter.add(filter1);
         JSONObject filter2 = new JSONObject();
-        filter2.put("key","sp_status ");
+        filter2.put("key","sp_status");
         filter2.put("value",2);
         jsonArrayFilter.add(filter2);
         JSONArray approvalInfo = wxCorpInfoService.getApprovalInfo(7, startDate, endDate, "", jsonArrayFilter);

+ 11 - 7
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -4145,7 +4145,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             double totalWorkingHours = targetPlanTotal.getTotalWorkingHours();
                             double totalWages = targetPlanTotal.getTotalWages();
                             //获当前分配日期下的所填报人员工时成本总和
-                            double workTimeSum = targetPlanTotal.getTotalFillTime();
+                            double workTimeSum = targetPlanTotal.getTotalFillTime()==null?0.0:targetPlanTotal.getTotalFillTime();
                             BigDecimal decimal = new BigDecimal(targetPlanTotal.getTotalProgress());
                             decimal = decimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
                             BigDecimal costSum = new BigDecimal(targetPlanTotal.getTotalWages());
@@ -4191,7 +4191,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             double totalWorkingHours = targetPlanTotal.getTotalWorkingHours();
                             double totalWages = targetPlanTotal.getTotalWages();
                             //获当前分配日期下的所填报人员工时成本总和
-                            double workTimeSum = targetPlanTotal.getTotalFillTime();
+                            double workTimeSum = targetPlanTotal.getTotalFillTime()==null?0.0:targetPlanTotal.getTotalFillTime();
                             BigDecimal decimal = new BigDecimal(targetPlanTotal.getTotalProgress());
                             decimal = decimal.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
                             BigDecimal costSum = new BigDecimal(targetPlanTotal.getTotalWages());
@@ -4863,10 +4863,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
         List<Map<String,Object>> reportList=reportMapper.getReportList(startDate,endDate,planId,stateKey,departmentId,companyId);
         List<List<String>> dataList=new ArrayList<>();
-//        String[] title={"员工","工号","所属部门","排工单号/任务变更通知号","钢印号","工作时长","产品名称","工序名称","进度","质检类型","质检人","工作日期","填报日期"};
-//        String[] title={"所属部门","工号","员工","排工单号/任务变更通知号","钢印号","产品名称","工序名称","进度","工作件数", "工作时长","单价","工价","汇总",
+//        String[] title={"员工","工号","所属部门","排工单号/任务变更通知号","钢印号","工作时长","产品名称","工序名称","进度","质检类型","质检人","工作日期","填报日期"};
+//        String[] title={"所属部门","工号","员工","排工单号/任务变更通知号","钢印号","产品名称","工序名称","进度","工作件数", "工作时长","单价","工价","汇总",
 //                "工作日期","填报日期","质检类型","质检人"};
-        String[] title={"工位名称","项目名称","包名称","生产订单号","工序名称","零件编码","零件名称","零件图号","生产数量", "工时","单价","合计",
+        String[] title={"工位名称","项目名称","排产工单号","生产订单号","工序名称","零件编码","零件名称","零件图号","生产数量", "工时","单价","合计",
                 "作业人员","日期"};
         List<String> titleList=Arrays.asList(title);
         dataList.add(titleList);
@@ -4881,7 +4881,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             String curJobBNum = String.valueOf(map.get("jobNumber"));
 //            item.add(curJobBNum);
 //            item.add(String.valueOf(map.get("userName")));
-//            Integer planType = Integer.valueOf(String.valueOf(map.get("planType")));
+            Integer planType = Integer.valueOf(String.valueOf(map.get("planType")));
 //            if(planType==0){
 //                item.add(map.get("productSchedulingNum")==null?"":String.valueOf(map.get("productSchedulingNum")));
 //            }else {
@@ -4890,7 +4890,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 //            item.add(map.get("steelNumArray")==null?"":String.valueOf(map.get("steelNumArray")));
             item.add(map.get("projectName")==null?"":String.valueOf(map.get("projectName")));
 //            item.add(String.valueOf(map.get("productName")));
-            item.add("");
+            if(planType==0){
+                item.add(map.get("productSchedulingNum")==null?"":String.valueOf(map.get("productSchedulingNum")));
+            }else {
+                item.add(map.get("taskChangeNoticeNum")==null?"":String.valueOf(map.get("taskChangeNoticeNum")));
+            }
             item.add(map.get("productOrderNum")==null?"":String.valueOf(map.get("productOrderNum")));
             item.add(String.valueOf(map.get("procedureName")));
             item.add("");

+ 24 - 14
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -1987,7 +1987,15 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         return msg;
     }
 
-
+    public static long toUNix(LocalDateTime localDateTime) {
+        // 转换为ZonedDateTime
+        ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
+        // 转换为Instant
+        Instant instant = zonedDateTime.toInstant();
+        // 获取UNIX时间戳
+        long unixTimestamp = instant.getEpochSecond();
+        return unixTimestamp;
+    }
 
     /**
      * 批量获取审批单号
@@ -1999,12 +2007,10 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         LocalDateTime startDateTime = LocalDate.parse(startDate, df).atTime(LocalTime.MIN);
         LocalDateTime endDateTime = LocalDate.parse(endDate, df).atTime(LocalTime.MAX);
-        long startTime = startDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli() -
-                LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
-        long endTime = endDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli() -
-                LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
+        long startTime = toUNix(startDateTime);
+        long endTime = toUNix(endDateTime);
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",companyId));
-        String url=BATCH_GET_APPROVAL_INFO.replace("ACCESS_TOKEN",getCorpAccessToken(wxCorpInfo));
+        String url=BATCH_GET_APPROVAL_INFO.replace("ACCESS_TOKEN",getCorpAgentAccessToken(wxCorpInfo));
         HttpHeaders headers = new HttpHeaders();
         RestTemplate restTemplate = new RestTemplate();
         MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
@@ -2022,14 +2028,18 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
             JSONArray jsonArray=new JSONArray();
             String resp = ResponseEntity.getBody();
             JSONObject jsonObject = JSONObject.parseObject(resp);
-            JSONArray sp_no_list = jsonObject.getJSONArray("sp_no_list");
-            jsonArray.addAll(sp_no_list);
-            if(jsonObject.containsKey("new_next_cursor")){
-                String new_next_cursor = jsonObject.getString("new_next_cursor");
-                JSONArray approvalInfo = getApprovalInfo(companyId, startDate, endDate, new_next_cursor, filterArray);
-                jsonArray.addAll(approvalInfo);
+            if(jsonObject.getString("errmsg").equals("ok")){
+                JSONArray sp_no_list = jsonObject.getJSONArray("sp_no_list");
+                jsonArray.addAll(sp_no_list);
+                if(jsonObject.containsKey("new_next_cursor")){
+                    String new_next_cursor = jsonObject.getString("new_next_cursor");
+                    JSONArray approvalInfo = getApprovalInfo(companyId, startDate, endDate, new_next_cursor, filterArray);
+                    jsonArray.addAll(approvalInfo);
+                }
+                System.out.println(jsonArray);
+                return jsonArray;
             }
-            return jsonArray;
+            System.out.println(jsonObject.getString("errmsg"));
         }
         return null;
     }
@@ -2038,7 +2048,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
     @Override
     public String getApprovalInfoDetail(Integer companyId,String spNo) throws Exception {
         WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id",companyId));
-        String url=GET_APPROVAL_DETAIL.replace("ACCESS_TOKEN",getCorpAccessToken(wxCorpInfo));
+        String url=GET_APPROVAL_DETAIL.replace("ACCESS_TOKEN",getCorpAgentAccessToken(wxCorpInfo));
         HttpHeaders headers = new HttpHeaders();
         RestTemplate restTemplate = new RestTemplate();
         MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");

+ 29 - 17
fhKeeper/formulahousekeeper/timesheet/src/components/select.vue

@@ -3,30 +3,35 @@
   <div tabindex="0" @blur="selectClihide()" style="display: inline-block;" v-if="!wxCope">
     <!-- <div :style="'width:' + selectWidth + 'px;height:' + selectHeight + 'px'" :class="classDiv ? 'select selectDiv' : 'select'" @click="selectCli" :ref="disabled ? '' : 'selectDiv'"> -->
     <div :class="disabled ? 'disabledTrue' : 'disabledFalse'" @mouseenter="moveIonDiv" @mouseleave="outIonDiv">
-        <div :style="`width:${selectWidth}px;height:${selectHeight}px`" :class="classDiv ? 'select selectDiv' : 'select'" @click="selectCli" :ref="disabled ? '' : 'selectDiv'">
+        <div :style="`width:${selectWidth}px;min-height:${selectHeight}px`" :class="classDiv ? 'select selectDiv' : 'select'" @click="selectCli" :ref="disabled ? '' : 'selectDiv'">
             <div v-if="!multiSelect" :style="'line-height: '+selectHeight+'px;font-size: '+selectFontSize+'px;'" :class="selectName == $t('defaultText.pleaseChoose') ? 'selecttex selecttexXuan' : 'selecttex'">
                 <TranslationOpenDataText type='userName' :openid='selectName'></TranslationOpenDataText>
-                <!-- {{selectName}} -->
             </div>
             <div v-if="multiSelect" :style="'line-height: '+selectHeight+'px;margin-left: -10px'" :class="selectName == $t('defaultText.pleaseChoose') ? 'selecttex selecttexXuan' : 'selecttex'">
-                <span v-if="multiSelectList.length > 0">
-                    <span v-if="!tile" style="width: 100%">
-                        <span class="all">
-                            <TranslationOpenDataText type='userName' :openid='multiSelectList[0].name'></TranslationOpenDataText>
-                            <!-- {{multiSelectList[0].name}} -->
-                            <i class="el-icon-error" v-if="!disabled" @click.stop="deleteMultiSelectList('-1')"></i>
-                        </span>
-                        <span class="all" v-if="multiSelectList.length > 1"> + {{multiSelectList.length - 1}}</span>
-                    </span>
+                <template v-if="multiSelectList.length > 0">
+                    <div v-if="!tile" style="width: 100%">
+                        <template v-if="!expandPersonnel">
+                            <span class="all">
+                                <TranslationOpenDataText type='userName' :openid='multiSelectList[0].name'></TranslationOpenDataText>
+                                <i class="el-icon-error" v-if="!disabled" @click.stop="deleteMultiSelectList('-1')"></i>
+                            </span>
+                            <span class="all" v-if="multiSelectList.length > 1"> + {{multiSelectList.length - 1}}</span>
+                        </template>
+                        <template v-else>
+                            <span class="all" v-for="(ueseItem, userIndex) in multiSelectList" :key="userIndex">
+                                <TranslationOpenDataText type='userName' :openid='ueseItem.name'></TranslationOpenDataText>
+                                <i class="el-icon-error" v-if="!disabled" @click.stop="deleteMultiSelectList('-2', userIndex)"></i>
+                            </span>
+                        </template>
+                    </div>
                     <span v-if="tile" style="width: 100%">
                         <span class="all" style="margin-right: 6px" v-for="(items, indexs) in multiSelectList" :key="indexs">
                             <TranslationOpenDataText type='userName' :openid='items.name'></TranslationOpenDataText>
-                            <!-- {{items.name}} -->
                             <span v-if="items.jobNumber" class="spanFllat">{{items.jobNumber}}</span>
                             <i class="el-icon-error" @click.stop="deleteMultiSelectList(indexs)" v-if="!disabled"></i>
                         </span>
                     </span>
-                </span>
+                </template>
                 <span v-else class="allTwo">{{$t('defaultText.pleaseChoose')}}</span>
             </div>
             <i :class=" move ? 'el-icon-arrow-down iostu iostuHover' : 'el-icon-arrow-down iostu'" v-if="!moveIon"></i>
@@ -158,6 +163,10 @@ export default {
         searchBoxTop: {
             type: String,
             default: '-9'
+        },
+        expandPersonnel: { // 多选是否展开
+            type: Boolean,
+            default: true
         }
     },
     components: {
@@ -479,11 +488,13 @@ export default {
                 this.options = this.fistArrListOne
             }
         },
-        deleteMultiSelectList(str) {
+        deleteMultiSelectList(str, userIndex) {
             let userId
             if(str == '-1') {
                 userId = this.multiSelectList[0].id
                 this.multiSelectList.splice(0, 1)
+            } else if(str == '-2') {
+                this.multiSelectList.splice(userIndex, 1)
             } else {
                 userId = this.multiSelectList[str].id
                 this.multiSelectList.splice(str, 1)
@@ -495,7 +506,7 @@ export default {
                     }
                 }
             }
-            
+
             let obj = {
                 distinction: this.distinction,
                 index: this.index, // 选中的索引
@@ -607,7 +618,7 @@ export default {
         color: #606266;
         display: inline-block;
         font-size: inherit;
-        height: 40px;
+        min-height: 40px;
         line-height: 40px;
         outline: 0;
         padding: 0 15px;
@@ -618,7 +629,7 @@ export default {
         cursor: pointer;
     }
     .selecttex {
-        height: 28px;
+        // height: 28px;
         line-height: 28px;
         text-overflow: ellipsis;
         font-size: 12px;
@@ -690,6 +701,7 @@ export default {
         line-height: 24px;
         padding: 0px 8px;
         color: #909399;
+        margin-right: 4px;
     }
     .allTwo {
         display: inline-block;

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/contract/index.vue

@@ -6,7 +6,7 @@
         <!-- 合同编号/名称 -->
         <el-form-item>
           <div style="display: flex;align-items: center;height: 40px;">
-            <el-input v-model="keyword" class="input-with-select" :placeholder="keyword == 1 ? $t('qing-shu-ru-he-tong-bian-hao') : $t('qing-shu-ru-he-tong-ming-cheng')" clearable size="small">
+            <el-input v-model="keyword" class="input-with-select" @keyup.enter.native="searchFilter" :placeholder="keyword == 1 ? $t('qing-shu-ru-he-tong-bian-hao') : $t('qing-shu-ru-he-tong-ming-cheng')" clearable size="small">
               <el-select slot="prepend" v-model="searchField" :placeholder="$t('defaultText.pleaseChoose')" style="width:120px">
                 <el-option :label="$t('he-tong-ming-cheng')" :value="0"></el-option>
                 <el-option :label="$t('contractno')" :value="1"></el-option>

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

@@ -9,7 +9,7 @@
                 <el-form-item >
                     <!-- <div style="display: flex;align-items: center;height: 40px;"> -->
                     <div v-if="true" style="display: flex;align-items: center;height: 40px;">
-                    <el-input v-model="keyword" class="input-with-select" :placeholder="searchField == '1' ? $t('peaseenterthe') : $t('peaseenterthe')" clearable="true" size="small">
+                    <el-input v-model="keyword" class="input-with-select" @keyup.enter.native="searchList()" :placeholder="searchField == '1' ? $t('peaseenterthe') : $t('peaseenterthe')" clearable="true" size="small">
                         <el-select v-model="searchField" style="width:120px;"  slot="prepend" :placeholder="$t('defaultText.pleaseChoose')">
                             <el-option :label="$t('headerTop.projectName')" value=1 ></el-option>
                             <el-option :label="$t('Itemno')" value=2 ></el-option>

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

@@ -6,7 +6,7 @@
                 <el-form-item >
                     <!-- <div style="display: flex;align-items: center;height: 40px;"> -->
                     <div v-if="true" style="display: flex;align-items: center;height: 40px;">
-                    <el-input v-model="keyword" class="input-with-select" :placeholder="searchField == '1' ? $t('peaseenterthe') : $t('peaseenterthe')" clearable="true" size="small">
+                    <el-input v-model="keyword" class="input-with-select" @keyup.enter.native="searchList" :placeholder="searchField == '1' ? $t('peaseenterthe') : $t('peaseenterthe')" clearable="true" size="small">
                         <el-select v-model="searchField" style="width:120px;"  slot="prepend" :placeholder="$t('defaultText.pleaseChoose')">
                             <el-option :label="$t('headerTop.projectName')" value=1 ></el-option>
                             <el-option :label="$t('Itemno')" value=2 ></el-option>

+ 1 - 1
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -169,7 +169,7 @@
                     </el-form-item>
                     <el-form-item style="float:right;">
                         <div style="width: 300px;display: inline-block;margin-top: 4px">
-                            <el-input v-model="keyword" class="input-with-select" placeholder="请输入" clearable="true" size="small">
+                            <el-input v-model="keyword" class="input-with-select" placeholder="请输入" clearable="true" size="small" @keyup.enter.native="searchList()">
                               <el-select v-model="integer" slot="prepend" style="width: 80px">
                                 <el-option label="姓名" value="0"></el-option>
                                 <el-option label="电话" value="1"></el-option>

+ 23 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -1787,6 +1787,7 @@
             <el-table-column width="160" type="index" fixed="left" :label="'考勤工时'">
               <template slot-scope="scope">
                 {{ scope.row.cardTime}}
+                <i class="el-icon-refresh" @click="restUserCardTime(scope.row)"></i>
               </template>
             </el-table-column>
 
@@ -5892,6 +5893,28 @@
                     });
                 });
             },
+            restUserCardTime(item){
+                let param={}
+                param.userId=item.userId
+                param.createDate=item.createDate
+                this.http.post('/user-with-beisen/getAttendanceStatisticWithUser', param,
+                res => {
+                    if (res.code == "ok") {
+                        this.showMonthWorkTimeReminder()
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },
+                error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                });
+            },
             importReportLog(item){
                 //首先判断文件类型
                 let str = item.file.name.split(".");