Selaa lähdekoodia

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

Lijy 1 vuosi sitten
vanhempi
commit
830ee9bf6f
17 muutettua tiedostoa jossa 333 lisäystä ja 285 poistoa
  1. 34 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/BusinessOpportunityController.java
  2. 18 10
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ProductController.java
  3. 7 3
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/BusinessOpportunity.java
  4. 3 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Product.java
  5. 4 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/BusinessOpportunityMapper.java
  6. 4 0
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/BusinessOpportunityService.java
  7. 21 2
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/BusinessOpportunityServiceImpl.java
  8. 5 1
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ProductServiceImpl.java
  9. 2 2
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/BusinessItemProductMapper.xml
  10. 12 2
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/BusinessOpportunityMapper.xml
  11. 50 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/HolidaySettingController.java
  12. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/HolidaySetting.java
  13. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java
  14. 95 232
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  15. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
  16. 63 27
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  17. 6 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

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

@@ -52,6 +52,40 @@ public class BusinessOpportunityController {
         return bOservice.exportData(bo,request);
     }
 
+    // 批量放入回收站
+    @RequestMapping("delete")
+    public Object delete(BusinessOpportunity bo) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String ids1 = bo.getIds();
+        List<Integer> ids = new ArrayList<>();
+        if (!ids1.isEmpty()) {
+            for (String id : ids1.split(",")) {
+                ids.add(Integer.parseInt(id));
+            }
+            bOservice.isDelete(ids);
+            msg.setMsg("操作成功");
+        } else {
+            msg.setError("请选择线索");
+
+        }
+        return msg;
+    } @RequestMapping("rollBack")
+    public Object rollBack(BusinessOpportunity bo) {
+        HttpRespMsg msg = new HttpRespMsg();
+        String ids1 = bo.getIds();
+        List<Integer> ids = new ArrayList<>();
+        if (!ids1.isEmpty()) {
+            for (String id : ids1.split(",")) {
+                ids.add(Integer.parseInt(id));
+            }
+            bOservice.isRollBack(ids);
+            msg.setMsg("操作成功");
+        } else {
+            msg.setError("请选择线索");
+
+        }
+        return msg;
+    }
     @RequestMapping("insertAndUpdate")
     public HttpRespMsg insertAndUpdate( BusinessOpportunity bo, HttpServletRequest request) {
         User user = userMapper.selectById(request.getHeader("Token"));

+ 18 - 10
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/ProductController.java

@@ -12,6 +12,7 @@ import com.management.platform.util.MessageUtils;
 import org.apache.poi.hssf.usermodel.*;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddressList;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RestController;
@@ -22,6 +23,7 @@ import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -54,8 +56,10 @@ public class ProductController {
     @RequestMapping("/addOrUpdate")
     public HttpRespMsg addOrUpdate(Product product){
         HttpRespMsg msg=new HttpRespMsg();
-        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        User user = userMapper.selectById(request.getHeader("token"));
+        Integer companyId = user.getCompanyId();
         product.setCompanyId(companyId);
+        product.setCreatorId(user.getId());
         int count;
         if(product.getId()==null){
             count = productService.count(new LambdaQueryWrapper<Product>().eq(Product::getCompanyId, companyId).eq(Product::getProductCode, product.getProductCode()));
@@ -75,16 +79,20 @@ public class ProductController {
 
 
     @RequestMapping("/delete")
-    public HttpRespMsg delete(Integer id){
+    public HttpRespMsg delete(String ids){
         HttpRespMsg msg=new HttpRespMsg();
-        int count = taskService.count(new LambdaQueryWrapper<Task>().eq(Task::getProductId, id));
-        if(count>0){
-            msg.setError("当前产品已绑定到相关任务,删除失败");
-            return msg;
-        }
-        if(!productService.removeById(id)){
-            msg.setError("验证失败");
-            return msg;
+        if(!StringUtils.isEmpty(ids)){
+            String[] split = ids.split(",");
+            List<String> idList = Arrays.asList(split);
+            int count = taskService.count(new LambdaQueryWrapper<Task>().in(Task::getProductId, idList));
+            if(count>0){
+                msg.setError("当前产品已绑定到相关任务,删除失败");
+                return msg;
+            }
+            if(!productService.removeByIds(idList)){
+                msg.setError("验证失败");
+                return msg;
+            }
         }
         return msg;
     }

+ 7 - 3
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/BusinessOpportunity.java

@@ -11,9 +11,11 @@ import java.io.Serializable;
 import java.util.Date;
 import java.util.List;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
 
 /**
  * <p>
@@ -51,7 +53,7 @@ public class BusinessOpportunity extends Model<BusinessOpportunity> {
     @TableField("contacts_id")
     private Integer contactsId;
     @TableField(exist = false)
-    private Integer contactsName;
+    private String contactsName;
 
     /**
      * 客户id
@@ -76,10 +78,12 @@ public class BusinessOpportunity extends Model<BusinessOpportunity> {
      * 预计成交日期
      */
     @TableField("expected_transaction_date")
-    private LocalDateTime expectedTransactionDate;
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date expectedTransactionDate;
 
     /**
-     * 商机阶段 0-验证客户 1-需求分析 2-方案报价 3-赢单
+     * 商机阶段
      */
     @TableField("stage_id")
     private Integer stageId;

+ 3 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/Product.java

@@ -136,6 +136,9 @@ public class Product extends Model<Product> {
     @TableField(exist = false)
     private String inchargerName;
 
+    @TableField(exist = false)
+    private String creatorName;
+
     @TableField(exist = false)
     private String typeName;
 

+ 4 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/mapper/BusinessOpportunityMapper.java

@@ -25,4 +25,8 @@ public interface BusinessOpportunityMapper extends BaseMapper<BusinessOpportunit
     int getTotal(BusinessOpportunity bo);
     int getTotal1(@Param("bo") BusinessOpportunity bo,@Param("userId") String userId);
     int getTotal2(@Param("bo") BusinessOpportunity bo,@Param("userId") String userId);
+
+    BusinessOpportunity selectByIdToInfo(Integer id);
+
+    void updateBatchById(List<Integer> ids);
 }

+ 4 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/BusinessOpportunityService.java

@@ -48,4 +48,8 @@ public interface BusinessOpportunityService extends IService<BusinessOpportunity
     Object deleteFile(UploadFile file, HttpServletRequest request);
 
     Object reFileName(UploadFile uploadFile, HttpServletRequest request);
+
+    void isDelete(List<Integer> ids);
+
+    void isRollBack(List<Integer> ids);
 }

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

@@ -75,7 +75,7 @@ public class BusinessOpportunityServiceImpl extends ServiceImpl<BusinessOpportun
 
     @Override
     public BusinessOpportunity getInfo(BusinessOpportunity bo, User user) {
-        BusinessOpportunity businessOpportunity = bOMapper.selectById(bo.getId());
+        BusinessOpportunity businessOpportunity = bOMapper.selectByIdToInfo(bo.getId());
         businessOpportunity.setActionLogList(actionLogMapper.selectList(new QueryWrapper<ActionLog>().eq("item_id", bo.getId()).eq("code", "business")));
         businessOpportunity.setUploadFilePList(uploadFileMapper.selectByInfoList("business",bo.getId()));
         businessOpportunity.setTaskList(taskMapper.selectList(new QueryWrapper<Task>().eq("business_opportunity_id",bo.getId())));
@@ -93,7 +93,7 @@ public class BusinessOpportunityServiceImpl extends ServiceImpl<BusinessOpportun
                 // 折后价格
                 discountedPrice = discountedPrice.add(price.multiply(divide));
             }
-            BigDecimal divide = discountedPrice.divide(finalPrice);
+            BigDecimal divide = discountedPrice.divide(finalPrice,2,BigDecimal.ROUND_UP);
             // 整单折扣率
             businessOpportunity.setFinalPrice(divide.multiply(new BigDecimal(100)));
         }
@@ -340,6 +340,25 @@ public class BusinessOpportunityServiceImpl extends ServiceImpl<BusinessOpportun
         return uploadFileMapper.update(null, new UpdateWrapper<UploadFile>().eq("id", uploadFile.getId()).set("name", uploadFile.getName()));
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void isDelete(List<Integer> ids) {
+        UpdateWrapper<BusinessOpportunity> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.in("id", ids);
+        BusinessOpportunity bo = new BusinessOpportunity();
+        bo.setIsDelete(1);
+        bOMapper.update(bo, updateWrapper);
+    }
+
+    @Override
+    public void isRollBack(List<Integer> ids) {
+        UpdateWrapper<BusinessOpportunity> updateWrapper = new UpdateWrapper<>();
+        updateWrapper.in("id", ids);
+        BusinessOpportunity bo = new BusinessOpportunity();
+        bo.setIsDelete(0);
+        bOMapper.update(bo, updateWrapper);
+    }
+
     private BusinessOpportunity setNull(BusinessOpportunity bo) {
         if (bo.getPlate1() == "") {
             bo.setPlate1(null);

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

@@ -131,10 +131,14 @@ public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> impl
         IPage<Product> productIPage = productMapper.selectPage(new Page<>(pageIndex, pageSize), queryWrapper);
         List<Product> records = productIPage.getRecords();
         records.forEach(r->{
-            Optional<User> user = userList.stream().filter(u -> u.getId().equals(r.getCreatorId())).findFirst();
+            Optional<User> user = userList.stream().filter(u -> u.getId().equals(r.getInchargerId())).findFirst();
             if(user.isPresent()){
                 r.setInchargerName(user.get().getName());
             }
+            Optional<User> creator = userList.stream().filter(u -> u.getId().equals(r.getCreatorId())).findFirst();
+            if(creator.isPresent()){
+                r.setCreatorName(creator.get().getName());
+            }
             Optional<SysDict> unit = sysDictOfProductUnit.stream().filter(u -> u.getId().equals(r.getUnit())).findFirst();
             if(unit.isPresent()){
                 r.setUnitName(unit.get().getName());

+ 2 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/BusinessItemProductMapper.xml

@@ -25,11 +25,11 @@
                p.price price,
                (select `name` from sys_dict where id = p.unit and code = 'ProductUnit') unit,
                (select `name` from sys_dict where id = p.type and code = 'ProductType') productType,
-               p.inventory inventory,
+               p.inventory inventory
         from business_item_product i
                  left join product p on i.product_id = p.id
 --         left join sys_dict d on
-        where business_id = #{id}
+        where i.business_id = #{id}
     </select>
 
 </mapper>

+ 12 - 2
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/BusinessOpportunityMapper.xml

@@ -28,7 +28,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, name, contacts_id, customer_id, product_id, amount_of_money, expected_transaction_date, stage, create_time, edit_time, creator_id, incharger_id, remark, is_delete, plate1, plate2, plate3, plate4, plate5
+        id, company_id, name, contacts_id, customer_id, product_id, amount_of_money, expected_transaction_date, stage_id, create_time, edit_time, creator_id, incharger_id, remark, is_delete, plate1, plate2, plate3, plate4, plate5
     </sql>
     <select id="selectAllList" resultType="com.management.platform.entity.BusinessOpportunity">
         select
@@ -230,7 +230,17 @@
             and id in (select business_id from business_product where product_id = #{productId})
         </if>
     </select>
-
+    <select id="selectByIdToInfo" resultType="com.management.platform.entity.BusinessOpportunity">
+        SELECT *,
+               (select `name` from stage where id = stage_id)          stageValue,
+               (select custom_name from custom where id = customer_id) customerName,
+               (select `name` from contacts where id = contacts_id)    contactsName,
+               (select `name` from `user` where id = contacts_id)      inchargerName,
+               (select `name` from `user` where id = creator_id)       creatorName,
+               (SELECT sum(total) from business_product WHERE business_id = id)
+        from business_opportunity
+        where id = #{id}
+    </select>
 
 
 </mapper>

+ 50 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/HolidaySettingController.java

@@ -2,7 +2,10 @@ package com.management.platform.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.management.platform.entity.Department;
 import com.management.platform.entity.HolidaySetting;
+import com.management.platform.entity.User;
+import com.management.platform.mapper.DepartmentMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.HolidaySettingService;
 import com.management.platform.util.HttpRespMsg;
@@ -16,8 +19,11 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -37,11 +43,23 @@ public class HolidaySettingController {
     private UserMapper userMapper;
     @Resource
     private HttpServletRequest request;
+    @Resource
+    private DepartmentMapper departmentMapper;
 
     @RequestMapping("/holidaySetting")
     public HttpRespMsg holidaySetting(HolidaySetting holidaySetting){
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        int count ;
+        if(holidaySetting.getId()==null){
+            count = holidaySettingService.count(new LambdaQueryWrapper<HolidaySetting>().eq(HolidaySetting::getCompanyId, companyId).eq(HolidaySetting::getHolidayDate, holidaySetting.getHolidayDate()));
+        }else {
+            count = holidaySettingService.count(new LambdaQueryWrapper<HolidaySetting>().eq(HolidaySetting::getCompanyId, companyId).ne(HolidaySetting::getId,holidaySetting.getId()).eq(HolidaySetting::getHolidayDate, holidaySetting.getHolidayDate()));
+        }
+        if(count>0){
+            msg.setError("当前日期已设置为特殊日期,请重新选择");
+            return msg;
+        }
         holidaySetting.setCompanyId(companyId);
         if(!holidaySettingService.saveOrUpdate(holidaySetting)){
             msg.setError("验证失败");
@@ -53,7 +71,39 @@ public class HolidaySettingController {
     public HttpRespMsg list(){
         HttpRespMsg msg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<Department> departmentList = departmentMapper.selectList(new LambdaQueryWrapper<Department>().eq(Department::getCompanyId, companyId));
+        List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, companyId));
         List<HolidaySetting> holidaySettings = holidaySettingService.list(new LambdaQueryWrapper<HolidaySetting>().eq(HolidaySetting::getCompanyId, companyId));
+        holidaySettings.forEach(h->{
+            if(!StringUtils.isEmpty(h.getTargetUsers())){
+                String[] userSplit = h.getTargetUsers().split(",");
+                List<String> userNames=new ArrayList<>();
+                for (String userId : userSplit) {
+                    Optional<User> first = userList.stream().filter(u -> u.getId().equals(userId)).findFirst();
+                    if(first.isPresent()){
+                        userNames.add(first.get().getName());
+                    }
+                }
+                if(userNames.size()>0){
+                    String collect = userNames.stream().collect(Collectors.joining(","));
+                    h.setTargetUsersNames(collect);
+                }
+            }
+            if(!StringUtils.isEmpty(h.getTargetDepts())){
+                String[] deptSplit = h.getTargetDepts().split(",");
+                List<String> deptNames=new ArrayList<>();
+                for (String deptId : deptSplit) {
+                    Optional<Department> first = departmentList.stream().filter(d -> d.getDepartmentId().equals(Integer.valueOf(deptId))).findFirst();
+                    if(first.isPresent()){
+                        deptNames.add(first.get().getDepartmentName());
+                    }
+                }
+                if(deptNames.size()>0){
+                    String collect = deptNames.stream().collect(Collectors.joining(","));
+                    h.setTargetDeptsNames(collect);
+                }
+            }
+        });
         msg.setData(holidaySettings);
         return msg;
     }

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/HolidaySetting.java

@@ -54,6 +54,12 @@ public class HolidaySetting extends Model<HolidaySetting> {
     @TableField("target_depts")
     private String targetDepts;
 
+    @TableField(exist = false)
+    private String targetUsersNames;
+
+    @TableField(exist = false)
+    private String targetDeptsNames;
+
 
     @Override
     protected Serializable pkVal() {

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -92,12 +92,12 @@ public interface ReportMapper extends BaseMapper<Report> {
     List<Map<String, Object>> getReportNameByDateAndDept(@Param("date") String date,
                                                          @Param("deptIds") List<Integer> deptIds,
                                                          @Param("userId") String userId,
-                                                         @Param("companyId") Integer companyId, Integer pageStart, Integer pageSize);
+                                                         @Param("companyId") Integer companyId, String viewUserId, Integer pageStart, Integer pageSize);
 
     Integer getReportNameByDateAndDeptCount(@Param("date") String date,
                                                          @Param("deptIds") List<Integer> deptIds,
                                                          @Param("userId") String userId,
-                                                         @Param("companyId") Integer companyId);
+                                                         @Param("companyId") Integer companyId, String viewUserId);
     List<Map<String, Object>> getDetailByStateInMyProfession(@Param("state") Integer state,
                                                @Param("companyId") Integer companyId,
                                                @Param("leaderId") String leaderId);

+ 95 - 232
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -237,206 +237,39 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             //首先根据日期获取当天所有提交过日志的人
             String userId = request.getHeader("Token");
             User user = userMapper.selectById(userId);
-            TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
+            String viewUserId = user.getId();
+            Integer companyId = user.getCompanyId();
+            TimeType timeType = timeTypeMapper.selectById(companyId);
             List<Map<String, Object>> nameList = new ArrayList<>();
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
             Integer totalMembCount = 0;
             if (functionList.size() == 0) {
-                String leaderId = user.getId();
-                //不是项目经理,只看自己的报告
                 List<Map<String, Object>> list = new ArrayList<>();
-                //没有指定员工或者指定的就是自己
-                if (targetUid == null || targetUid.equals(user.getId())) {
-                    //查看自己的日报
-                    if (pageIndex != null && pageIndex == 0) {
-                        //仅第一页显示自己的
-                        Map<String, Object> map = new HashMap<>();
-                        map.put("id", user.getId());
-                        map.put("name", user.getName());
-                        List<String> uids = new ArrayList<>();
-                        uids.add(user.getId());
-                        list = reportMapper.getUserReportByDateOrId(date, uids, null);
-                        if (list.size() > 0) {
-                            //个人日报
-                            nameList.add(map);
-                            map.put("data", list);
-                            double reportTime = 0;
-                            BigDecimal total = new BigDecimal(0);
-                            int state = (int)list.get(0).get("state");
-                            boolean hasDeny = false;
-                            boolean hasWaiting = false;
-                            for (Map<String, Object> m : list) {
-                                double t = (double) m.get("time");
-                                reportTime += t;
-                                total = total.add((BigDecimal)m.get("cost"));
-                                int curState = (int)m.get("state");
-                                if (curState == 2) {
-                                    hasDeny = true;
-                                }
-                                if (curState == 0) {
-                                    hasWaiting = true;
-                                }
-                            }
-                            if(hasDeny) {
-                                state = 2;
-                            } else if (hasWaiting) {
-                                state = 0;
-                            }
-                            DecimalFormat df = new DecimalFormat("0.00");
-                            map.put("reportTime", df.format(reportTime));
-                            map.put("cost", total);
-                            map.put("state", state);
-                        }
+                List<Integer> allVisibleDeptIdList = null;
+                if (deptId != null) {
+                    //指定了部门进行查看
+                    allVisibleDeptIdList = new ArrayList<>();
+                    allVisibleDeptIdList.add(deptId);
+                    //找到该部门的所有子部门
+                    List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
+                    Optional<Department> first = allDepts.stream().filter(d -> d.getDepartmentId().equals(deptId)).findFirst();
+                    if (first.isPresent()) {
+                        Department department = first.get();
+                        //递归获取全部子部门
+                        List<Department> deptList = getSubDepts(department, allDepts);
+                        deptList.add(department);
+                        List<Integer> ids = deptList.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+                        allVisibleDeptIdList.addAll(ids);
                     }
+                } else {
+                    allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
                 }
-
-                List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
                 //需要看可见部门(部门主要负责人和其他负责人以及查看本部门工时权限)所有人员的日报
-                if (allVisibleDeptIdList.size() > 0) {
-                    if (nameList.size() > 0) {
-                        //自己填写的日报
-                        List<Map<String, Object>> deptNameList = reportMapper.getReportNameByDateAndDept(date,
-                                allVisibleDeptIdList, targetUid, null, pageStart, pageSize);
-                        totalMembCount = reportMapper.getReportNameByDateAndDeptCount(date, allVisibleDeptIdList, targetUid, null);
-                        for (Map<String, Object> deptNameItem : deptNameList) {
-                            if (!deptNameItem.get("id").equals(user.getId())) {
-                                nameList.add(deptNameItem);
-                            }
-                        }
-                    } else {
-                        nameList = reportMapper.getReportNameByDateAndDept(date,
-                                allVisibleDeptIdList, targetUid, null, pageStart, pageSize);
-                        totalMembCount = reportMapper.getReportNameByDateAndDeptCount(date, allVisibleDeptIdList, targetUid, null);
-                    }
-                    if (nameList.size() > 0) {
-                        List<String> userIds = new ArrayList<>();
-                        nameList.forEach(n->{
-                            String id = (String) n.get("id");
-                            userIds.add(id);
-                        });
-                        List<Map<String, Object>> reportList = reportMapper.getUserReportByDateOrId(date, userIds, null);
-                        for (Map<String, Object> memb : nameList) {
-                            //再根据人分别获取当天的报告
-                            List<Map<String, Object>> rList = new ArrayList<Map<String, Object>>();
-                            BigDecimal total = new BigDecimal(0);
-                            for (Map<String, Object> report : reportList) {
-                                if (((String)report.get("creatorId")).equals((String)memb.get("id"))) {
-                                    rList.add(report);
-                                    total = total.add((BigDecimal) report.get("cost"));
-                                }
-                            }
-                            memb.put("data", rList);
-                            memb.put("cost", total);
-                            double reportTime = 0;
-                            if (rList.size() > 0) {
-                                int state = 1;
-                                for (Map<String, Object> m : rList) {
-                                    double t = (double) m.get("time");
-                                    reportTime += t;
-
-                                    //取最低的状态
-                                    if (state == 2) {
-                                        continue;
-                                    }
-                                    if (state == 0) {
-                                        if ((int)m.get("state") == 2) {
-                                            state = 2;
-                                        } else {
-                                            continue;
-                                        }
-                                    } else {
-                                        state = (int)m.get("state");
-                                    }
-                                }
-                                memb.put("state", state);
-                            }
-                            DecimalFormat df = new DecimalFormat("0.00");
-                            memb.put("reportTime", df.format(reportTime));
-                        }
-                    }
-                }
-                if(deptId==null&&targetUid==null){
-                    //担任项目经理或者日报审核人,查找相关的人员的日报
-                    List<Map<String, Object>> puserNames = reportMapper.getReportNameByDate(date, user.getCompanyId(), leaderId);
-                    List<Map<String, Object>> inchargeReportList= reportMapper.getInchargeReportByDate(date, leaderId, null);
-
-                    if ((timeType.getReportAuditType() == 5 || timeType.getReportAuditType() == 6)&& timeType.getReportCc() == 1) {
-                        //存在抄送人的设置,需要把抄送人的项目相关日报也加上
-                        List<Map<String, Object>> viewUserNames = reportMapper.getCcReportNameByDate(date, user.getCompanyId(),leaderId);
-                        for (Map<String, Object> viewItem : viewUserNames) {
-                            boolean exists = false;
-                            for (Map<String, Object> u : puserNames) {
-                                if (u.get("id").equals(viewItem.get("id"))) {
-                                    exists = true;
-                                    break;
-                                }
-                            }
-                            if (!exists) {
-                                puserNames.add(viewItem);
-                            }
-                        }
-
-                        List<Map<String, Object>> viewReportList = reportMapper.getCcReportByDate(date, leaderId, null);
-                        for (Map<String, Object> viewItem : viewReportList) {
-                            boolean exists = false;
-                            for (Map<String, Object> u : inchargeReportList) {
-                                if (u.get("id").equals(viewItem.get("id"))) {
-                                    exists = true;
-                                    break;
-                                }
-                            }
-                            if (!exists) {
-                                inchargeReportList.add(viewItem);
-                            }
-                        }
-                    }
-                    for (Map<String, Object> map2 : puserNames) {
-
-                        if (nameList.size() > 0) {
-                            String myUserId = (String)nameList.get(0).get("id");
-                            if (myUserId.equals(map2.get("id"))) {
-                                //自己的报告,之前已经添加过了,排重
-                                continue;
-                            }
-                        }
-                        List<Object> collect = nameList.stream().map(nl -> nl.get("")).collect(Collectors.toList());
-                        if(!collect.contains(map2.get("id"))){
-                            nameList.add(map2);
-                        }
-                        //再根据人分别获取当天的报告
-                        List<Map<String, Object>> list2 =
-                                inchargeReportList.stream().filter(i->i.get("creatorId").equals(map2.get("id"))).collect(Collectors.toList());
-                        map2.put("data", list2);
-
-                        double reportTime = 0;
-                        BigDecimal total = new BigDecimal(0);
-                        int state = 1;
-                        for (Map<String, Object> m : list2) {
-                            double t = (double) m.get("time");
-                            reportTime += t;
-                            total = total.add((BigDecimal)m.get("cost"));
-                            //取最低的状态
-                            if (state == 2) {
-                                continue;
-                            }
-                            if (state == 0) {
-                                if ((int)m.get("state") == 2) {
-                                    state = 2;
-                                } else {
-                                    continue;
-                                }
-                            } else {
-                                state = (int)m.get("state");
-                            }
-                        }
-                        DecimalFormat df = new DecimalFormat("0.00");
-                        map2.put("reportTime", df.format(reportTime));
-                        map2.put("cost", total);
-                        map2.put("state", state);
-                    }
-                }
+                nameList = reportMapper.getReportNameByDateAndDept(date,
+                        allVisibleDeptIdList.size() > 0?allVisibleDeptIdList:null, targetUid, companyId, (deptId == null?viewUserId:null), pageStart, pageSize);
+                totalMembCount = reportMapper.getReportNameByDateAndDeptCount(date, allVisibleDeptIdList.size() > 0?allVisibleDeptIdList:null, targetUid, companyId, (deptId == null?viewUserId:null));
             } else {
-                Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
+                //查看全公司的数据
                 List<Integer> ids = null;
                 if (deptId != null) {
                     if (deptId == 0) {
@@ -457,53 +290,53 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     }
                 }
                 nameList = reportMapper.getReportNameByDateAndDept(date,
-                        ids, targetUid, companyId, pageStart, pageSize);
-                totalMembCount = reportMapper.getReportNameByDateAndDeptCount(date, ids, targetUid, companyId);
-                if (nameList.size() > 0) {
-                    List<String> userIds = new ArrayList<>();
-                    nameList.forEach(n->{
-                        String id = (String) n.get("id");
-                        userIds.add(id);
-                    });
-                    List<Map<String, Object>> reportList = reportMapper.getUserReportByDateOrId(date, userIds, null);
-                    for (Map<String, Object> map : nameList) {
-                        //再根据人分别获取当天的报告
-                        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
-                        BigDecimal total = new BigDecimal(0);
-                        for (Map<String, Object> report : reportList) {
-                            if (((String)report.get("creatorId")).equals((String)map.get("id"))) {
-                                list.add(report);
-                                total = total.add((BigDecimal) report.get("cost"));
-                            }
-
+                        ids, targetUid, companyId, null, pageStart, pageSize);
+                totalMembCount = reportMapper.getReportNameByDateAndDeptCount(date, ids, targetUid, companyId, null);
+            }
+            if (nameList.size() > 0) {
+                List<String> userIds = new ArrayList<>();
+                nameList.forEach(n->{
+                    String id = (String) n.get("id");
+                    userIds.add(id);
+                });
+                List<Map<String, Object>> reportList = reportMapper.getUserReportByDateOrId(date, userIds, null);
+                for (Map<String, Object> memb : nameList) {
+                    //再根据人分别获取当天的报告
+                    List<Map<String, Object>> rList = new ArrayList<Map<String, Object>>();
+                    BigDecimal total = new BigDecimal(0);
+                    for (Map<String, Object> report : reportList) {
+                        if (((String)report.get("creatorId")).equals((String)memb.get("id"))) {
+                            rList.add(report);
+                            total = total.add((BigDecimal) report.get("cost"));
                         }
-                        map.put("data", list);
-                        map.put("cost", total);
-                        double reportTime = 0;
-                        if (list.size() > 0) {
-                            int state = 1;
-                            for (Map<String, Object> m : list) {
-                                double t = (double) m.get("time");
-                                reportTime += t;
-                                //取最低的状态
-                                if (state == 2) {
-                                    continue;
-                                }
-                                if (state == 0) {
-                                    if ((int)m.get("state") == 2) {
-                                        state = 2;
-                                    } else {
-                                        continue;
-                                    }
+                    }
+                    memb.put("data", rList);
+                    memb.put("cost", total);
+                    double reportTime = 0;
+                    if (rList.size() > 0) {
+                        int state = 1;
+                        for (Map<String, Object> m : rList) {
+                            double t = (double) m.get("time");
+                            reportTime += t;
+
+                            //取最低的状态
+                            if (state == 2) {
+                                continue;
+                            }
+                            if (state == 0) {
+                                if ((int)m.get("state") == 2) {
+                                    state = 2;
                                 } else {
-                                    state = (int)m.get("state");
+                                    continue;
                                 }
+                            } else {
+                                state = (int)m.get("state");
                             }
-                            map.put("state", state);
                         }
-                        DecimalFormat df = new DecimalFormat("0.00");
-                        map.put("reportTime", df.format(reportTime));
+                        memb.put("state", state);
                     }
+                    DecimalFormat df = new DecimalFormat("0.00");
+                    memb.put("reportTime", df.format(reportTime));
                 }
             }
 
@@ -7067,6 +6900,36 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         if (defaultDegree!=null && "-1".equals(defaultDegree.get("id").toString())){
             defaultDegree = null;
         }
+        //如果该项目已经没有绑定该维度,则取消
+        if (defaultDegree != null) {
+            Integer degreeId = (Integer) defaultDegree.get("id");
+            Integer companyId = user.getCompanyId();
+            TimeType timeType = timeTypeMapper.selectById(companyId);
+            List<ReportExtraDegree> extraDegreeList = reportExtraDegreeMapper.selectList(new QueryWrapper<ReportExtraDegree>().eq("company_id", companyId));
+            String associateDegrees = "";
+            List<String> associateDegreeList = new ArrayList<>();
+            if(timeType.getCustomDegreeWithPro()==0){
+                associateDegrees=extraDegreeList.stream().map(a->String.valueOf(a.getId())).collect(Collectors.joining(","));
+            }else {
+                Project project = projectMapper.selectById(projectId);
+                associateDegrees = project.getAssociateDegrees();
+            }
+            boolean find = false;
+            if (!StringUtils.isEmpty(associateDegrees)) {
+                String[] id = associateDegrees.split("\\,");
+                for (int i=0;i<id.length; i++) {
+                    if (id[i].equals(degreeId.toString())) {
+                        find = true;
+                        break;
+                    }
+                }
+            }
+            if (!find) {
+                //该维度已不存在,或者从项目上解绑了
+                defaultDegree = null;
+            }
+        }
+
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         httpRespMsg.data = defaultDegree;
         return httpRespMsg;

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

@@ -15,7 +15,7 @@ spring:
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.101.180.183:17089/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    url: jdbc:mysql://47.101.180.183:17089/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
     username: root
     password: P011430@Huoshi*
 

+ 63 - 27
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -670,22 +670,40 @@
         SELECT DISTINCT b.id, b.name ,a.evaluate as evaluate
         FROM report AS a
         JOIN user AS b ON a.creator_id=b.id
+        left join project on project.id = a.project_id
+        LEFT JOIN project_ccuser ON a.project_id = project_ccuser.project_id
         WHERE 1=1
         <if test="date != null and date != ''">
             AND a.create_date=#{date}
         </if>
-        <if test="deptIds != null">
-            AND b.department_id in
-            <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">
-                #{item, jdbcType=INTEGER}
-            </foreach>
-        </if>
-        <if test="companyId != null">
-            AND b.company_id = #{companyId}
-        </if>
-        <if test="userId != null">
-            AND b.id=#{userId}
-        </if>
+        <choose>
+            <when test="userId != null">
+                AND b.id=#{userId}
+            </when>
+            <otherwise>
+                <!--自己,担任项目经理,日报审核人,抄送人,或者自己部门的人填的日报 -->
+                <if test="viewUserId != null">
+                    and (a.creator_id = #{viewUserId} or a.project_auditor_id = #{viewUserId} or project.incharger_id = #{viewUserId}
+                    or project_ccuser.`user_id` = #{viewUserId}
+                    <if test="deptIds != null">
+                        or b.department_id in
+                        <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">
+                            #{item, jdbcType=INTEGER}
+                        </foreach>
+                    </if>
+                    )
+                </if>
+                <if test="viewUserId == null">
+                    <if test="deptIds != null">
+                        and b.department_id in
+                        <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">
+                            #{item, jdbcType=INTEGER}
+                        </foreach>
+                    </if>
+                </if>
+            </otherwise>
+        </choose>
+        AND b.company_id = #{companyId}
         <if test="pageStart != null">
             limit #{pageStart}, #{pageSize}
         </if>
@@ -695,22 +713,40 @@
         SELECT count(DISTINCT b.id) as count
         FROM report AS a
         JOIN user AS b ON a.creator_id=b.id
+        left join project on project.id = a.project_id
+        LEFT JOIN project_ccuser ON a.project_id = project_ccuser.project_id
         WHERE 1=1
         <if test="date != null and date != ''">
             AND a.create_date=#{date}
         </if>
-        <if test="deptIds != null">
-            AND b.department_id in
-            <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">
-                #{item, jdbcType=INTEGER}
-            </foreach>
-        </if>
-        <if test="companyId != null">
-            AND b.company_id = #{companyId}
-        </if>
-        <if test="userId != null">
-            AND b.id=#{userId}
-        </if>
+        <choose>
+            <when test="userId != null">
+                AND b.id=#{userId}
+            </when>
+            <otherwise>
+                <!--自己,担任项目经理,日报审核人,抄送人,或者自己部门的人填的日报 -->
+                <if test="viewUserId != null">
+                    and (a.creator_id = #{viewUserId} or a.project_auditor_id = #{viewUserId} or project.incharger_id = #{viewUserId}
+                    or project_ccuser.`user_id` = #{viewUserId}
+                    <if test="deptIds != null">
+                        or b.department_id in
+                        <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">
+                            #{item, jdbcType=INTEGER}
+                        </foreach>
+                    </if>
+                    )
+                </if>
+                <if test="viewUserId == null">
+                    <if test="deptIds != null">
+                        and b.department_id in
+                        <foreach item="item" collection="deptIds" separator="," open="(" close=")" index="">
+                            #{item, jdbcType=INTEGER}
+                        </foreach>
+                    </if>
+                </if>
+            </otherwise>
+        </choose>
+        AND b.company_id = #{companyId}
     </select>
 
     <!--专业待审核的报告列表-->
@@ -1190,7 +1226,7 @@
         WHERE b.state = 1
         AND b.company_id =#{companyId}
         <if test="startDate!=null and endDate!=null">
-        AND b.create_date BETWEEN #{startDate} AND #{endDate}
+            AND b.create_date BETWEEN #{startDate} AND #{endDate}
         </if>
         GROUP BY b.project_id,b.`create_date`
         HAVING IFNULL(SUM(b.custom_data),0) > 0
@@ -1200,8 +1236,8 @@
         SELECT p.id as projectId, SUM(IFNULL(r.working_time, 0)) AS total_working_time
         FROM report r LEFT JOIN project p ON r.project_id = p.id
         WHERE p.company_id = #{companyId}
-              AND p.status in(1,2)
-              AND (p.finish_date IS NULL OR p.finish_date >= '2023-11-08')
+        AND p.status in(1,2)
+        AND (p.finish_date IS NULL OR p.finish_date >= '2023-11-08')
         <if test="projectId!=null">
             and p.id=#{projectId}
         </if>

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

@@ -248,7 +248,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             workingTime = 0.0;
         }
         planProcedureTotal.setTotalFillTime(workingTime);
-        planProcedureTotal.setTotalProgress((int)(workingTime / planProcedureTotal.getTotalWorkingHours()) * 100);
+        planProcedureTotal.setTotalProgress((int)((workingTime / planProcedureTotal.getTotalWorkingHours()) * 100));
+        System.out.println("planProcedureTotal.getId()=="+planProcedureTotal.getId()+"--进度 1 workingTime:"+workingTime+" totalWorkingHours:"+planProcedureTotal.getTotalWorkingHours()+" totalProgress:"+planProcedureTotal.getTotalProgress());
         planProcedureTotalMapper.updateById(planProcedureTotal);
         //检查该计划下的所有工序是否都已经完成
         List<PlanProcedureTotal> planProcedureTotalList = planProcedureTotalMapper.selectList(new QueryWrapper<PlanProcedureTotal>().eq("plan_id", planProcedureTotal.getPlanId()));
@@ -4771,7 +4772,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 workingTime = curReportSumItem.getWorkingTime();
             }
             planProcedureTotal.setTotalFillTime(workingTime);
-            planProcedureTotal.setTotalProgress((int)(workingTime / planProcedureTotal.getTotalWorkingHours()) * 100);
+            planProcedureTotal.setTotalProgress((int)((workingTime / planProcedureTotal.getTotalWorkingHours()) * 100));
+            System.out.println("planProcedureTotal.getId()=="+planProcedureTotal.getId()+"--进度 2 workingTime:"+workingTime+" totalWorkingHours:"+planProcedureTotal.getTotalWorkingHours()+" totalProgress:"+planProcedureTotal.getTotalProgress());
             planProcedureTotalMapper.updateById(planProcedureTotal);
             return new HttpRespMsg();
         }
@@ -4817,7 +4819,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     workingTime = curReportSumItem.getWorkingTime();
                 }
                 planProcedureTotal.setTotalFillTime(workingTime);
-                planProcedureTotal.setTotalProgress((int)(workingTime / planProcedureTotal.getTotalWorkingHours()) * 100);
+                planProcedureTotal.setTotalProgress((int)((workingTime / planProcedureTotal.getTotalWorkingHours()) * 100));
+                System.out.println("planProcedureTotal.getId()=="+planProcedureTotal.getId()+"--进度 3 workingTime:"+workingTime+" totalWorkingHours:"+planProcedureTotal.getTotalWorkingHours()+" totalProgress:"+planProcedureTotal.getTotalProgress());
                 planProcedureTotalMapper.updateById(planProcedureTotal);
             }
         }