Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

yusm 1 anno fa
parent
commit
31b96169e4

+ 6 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/system/dictionary/api.ts

@@ -0,0 +1,6 @@
+export const MOD = '/dictionary'
+export const GETLISTBYCODE = '/sys-dict/getListByCode'
+export const GETTYPE = '/sys-dict/data_type'
+export const GETLIS = '/sys-dict/list'
+export const UNDATELIST = '/sys-dict/addOrUpdate'
+export const DELETELIST = '/sys-dict/delete'

+ 221 - 3
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/system/dictionary/index.vue

@@ -1,10 +1,228 @@
 <template>
-<div>
-  系统字典
-</div>
+  <div class="h-full flex">
+    <div class="p-5 w-60 pr-0">
+      <div class="bg-white w-full h-full shadow-md rounded-md flex flex-col const-left">
+        <el-table ref="dictionaryTableRef" :data="dictionaryTableData" border highlight-current-row
+          @current-change="dictionaryHandleCurrentChange" style="width: 100%;height: 100%;">
+          <el-table-column prop="name" label="字典编码" align="center" />
+        </el-table>
+      </div>
+    </div>
+    <div class="flex-1 p-5 overflow-auto">
+      <div class="bg-white w-full h-full shadow-md rounded-md flex flex-col">
+        <div class="tableHeader">
+          <div>字典编码-{{ currentRow?.name }}</div>
+          <el-button type="primary" @click="showDialogFormVisible()" :disabled="!currentRow.id">新增参数</el-button>
+        </div>
+        <div class="flex-1 p-3">
+          <el-table ref="dictionaryTableRef" :data="tableData" v-loading="AllLoading.tableDataLoading" border
+            style="width: 100%;height: 100%;">
+            <el-table-column type="selection" width="55" />
+            <el-table-column prop="name" label="字典名称" align="center" />
+            <el-table-column prop="seq" label="排序" align="center" />
+            <el-table-column label="操作" width="100px">
+              <template #default="{ row, $index }">
+                <dv class="operation">
+                  <el-icon @click="deteleItem(row)">
+                    <Delete color="red" />
+                  </el-icon>
+                </dv>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+      </div>
+    </div>
+
+    <!-- 弹窗 -->
+    <el-dialog title="新增参数" v-model="AllVisible.dialogFormVisible" width="500" align-center
+      :before-close="handleClose">
+      <div>
+        <el-form ref="formRef" :model="form" :rules="rules" label-width="100px">
+          <el-form-item label="字典名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入字典名称"></el-input>
+          </el-form-item>
+          <el-form-item label="排序" prop="seq">
+            <el-input-number v-model="form.seq" :step="2" placeholder="请输入排序" controls-position="right" style="width: 100%;" />
+          </el-form-item>
+        </el-form>
+      </div>
+      <template #footer>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="submitForm(formRef, false)" v-loading="AllLoading.dialogFormLoading">保
+            存</el-button>
+          <el-button type="primary" @click="submitForm(formRef, true)"
+            v-loading="AllLoading.dialogFormLoading">保存并新增</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
 </template>
+
 <script lang="ts" setup>
+import { ref, reactive, onMounted, inject } from 'vue';
+import { Delete } from '@element-plus/icons-vue'
+import { FormInstance, FormRules, ElMessageBox, ElTable } from 'element-plus'
+import { GETLISTBYCODE, GETTYPE, UNDATELIST, DELETELIST } from './api'
+import { post } from "@/utils/request";
+import { getFromValue, resetFromValue } from '@/utils/tools'
+
+type dictionaryTab = {
+  id: string | number
+  name: string
+}
+
+interface RuleForm {
+  name: string,
+  seq: string | number,
+  id: string | number,
+  code: string
+}
+
+const globalPopup = inject<GlobalPopup>('globalPopup')
+const dictionaryTableRef = ref<InstanceType<typeof ElTable>>()
+const currentRow: any = ref({})
+const dictionaryTableData = ref<dictionaryTab[]>([])
+const tableData = ref<any[]>([])
+const formRef = ref<FormInstance>()
+const form = reactive<RuleForm>({
+  id: '',
+  code: '',
+  name: '',
+  seq: ''
+})
+const rules = reactive<FormRules<RuleForm>>({
+  name: [{ required: true, message: '请输入字典名称', trigger: 'change' }],
+  seq: [{ required: true, message: '请输入排序', trigger: 'change' }]
+})
+const AllLoading = reactive({
+  tableDataLoading: false,
+  dialogFormLoading: false
+})
+const AllVisible = reactive({
+  dialogFormVisible: false
+})
+
+function deteleItem(data: any) {
+  ElMessageBox.confirm(
+    `确定删除【${data.name}】字典吗?`, '',
+    {
+      confirmButtonText: '确定',
+      cancelButtonText: '取消',
+      type: 'warning',
+    }
+  )
+    .then(() => {
+      post(DELETELIST, { id: data.id, code: data.code }).then(res => {
+        if (res.code != 'ok') {
+          globalPopup?.showError(res.msg)
+          return
+        }
+        globalPopup?.showSuccess('删除成功')
+        getTableList()
+      })
+    })
+}
+
+function showDialogFormVisible() {
+  let newForm = resetFromValue(form)
+  newForm.code = currentRow.value.id
+  Object.assign(form, newForm)
+  AllVisible.dialogFormVisible = true
+  console.log(form)
+}
+
+async function submitForm(formEl: FormInstance | undefined, flag: boolean) {
+  if (!formEl) return
+  await formEl.validate((valid) => {
+    if (valid) {
+      updateList(getFromValue(form), flag)
+    }
+  })
+}
+
+function updateList(data: any, flag: boolean) {
+  AllLoading.dialogFormLoading = true
+  post(UNDATELIST, { ...data }).then((_res) => {
+    let newForm = resetFromValue(form)
+    newForm.code = currentRow.value.id
+    Object.assign(form, newForm)
+    globalPopup?.showSuccess ('保存成功')
+    getTableList()
+    AllLoading.dialogFormLoading = false
+    AllVisible.dialogFormVisible = flag
+  }).catch((_err) => {
+    AllLoading.dialogFormLoading = false
+  })
+}
+
+function getDataType() {
+  post(GETTYPE, {}).then((res) => {
+    dictionaryTableData.value = res.data
+    dictionarySetCurrent(dictionaryTableData.value[0])
+  })
+}
 
+function getTableList() {
+  const { id } = currentRow.value
+  post(GETLISTBYCODE, { code: id }).then((res) => {
+    tableData.value = res.data
+  })
+}
+
+function handleClose(done: any) {
+  done()
+}
+
+function dictionaryHandleCurrentChange(val: any) {
+  currentRow.value = val;
+  getTableList()
+}
+
+function dictionarySetCurrent(row?: dictionaryTab) {
+  dictionaryTableRef.value!.setCurrentRow(row)
+}
+
+onMounted(() => {
+  getDataType()
+});
 </script>
+
 <style lang="scss" scoped>
+$borderColor : #F4F4F4;
+$titleBack : #FBFBFB;
+$themeColor : #075985;
+
+.const-left {
+  .const-leftTile {
+    text-align: center;
+    background: $titleBack;
+    padding: 0.85rem 0;
+  }
+
+  .const-leftItem {
+    width: 100%;
+    text-align: center;
+    padding: 0.85rem 0;
+    cursor: pointer;
+  }
+
+  .ons {
+    background: $themeColor;
+    color: #fff;
+  }
+
+  .border-bottom {
+    border-bottom: 1px solid $borderColor;
+  }
+}
+
+.tableHeader {
+  display: flex;
+  width: 100%;
+  justify-content: space-between;
+  align-items: center;
+  padding: 10px;
+  background-color: #F5F7FA;
+}
 </style>

+ 4 - 5
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/system/role/index.vue

@@ -88,12 +88,11 @@
 
 <script lang="ts" setup>
 import { ref, onMounted, reactive, inject, computed } from 'vue';
-import { Search, CirclePlusFilled, Edit, CirclePlus, Delete } from '@element-plus/icons-vue'
 import { post } from "@/utils/request";
-import { GETROLELIST, MOD, DETELEROLE, EDITROLE, GETAUTORITY, SAVEPERM } from "./api.ts";
-import { FormInstance, FormRules, ElMessageBox } from 'element-plus'
+import { GETROLELIST, DETELEROLE, EDITROLE, GETAUTORITY, SAVEPERM } from "./api.ts";
+import { FormInstance, ElMessageBox } from 'element-plus'
 import { useStore } from '@/store/index'
-import { getFromValue, updateDepTreeData, resetFromValue } from '@/utils/tools'
+import { getFromValue, resetFromValue } from '@/utils/tools'
 
 interface roleRuleForm {
   id: string
@@ -101,7 +100,7 @@ interface roleRuleForm {
   description: string
 }
 
-const { getFunctionList, getUserInfoVal } = useStore()
+const { getUserInfoVal } = useStore()
 const globalPopup = inject<GlobalPopup>('globalPopup')
 
 const companyId = reactive(getUserInfoVal('companyId') || '')

+ 3 - 0
fhKeeper/formulahousekeeper/customerBuler-crm/src/pages/team/index.vue

@@ -449,4 +449,7 @@ onMounted(() => {
     }
   }
 }
+.operation {
+  cursor: pointer;
+}
 </style>

+ 35 - 9
fhKeeper/formulahousekeeper/customerBuler-crm/src/styles/global.scss

@@ -1,17 +1,43 @@
-$darkBlue: #3475C5;
-$ashen: #FEFEFE;
-$backColor: #EEF3F6;
+$darkBlue: #3475c5;
+$ashen: #fefefe;
+$backColor: #eef3f6;
 $black: #000;
 $fontBlack: #333;
 $fontGray: #999;
-$modena: #6F4AFE;
+$modena: #6f4afe;
 
-.text-gray{
-    color : $fontGray
+.text-gray {
+  color: $fontGray;
 }
 .text-black {
-    color : $fontBlack
+  color: $fontBlack;
 }
 .back-dark {
-    background-color : $darkBlue
-}
+  background-color: $darkBlue;
+}
+
+// 设置滚动条样式
+.scroll-bar::-webkit-scrollbar {
+  width: 4px;
+  height: 10px;
+}
+
+.scroll-bar::-webkit-scrollbar-thumb {
+  background: linear-gradient(to bottom right, #075985 0%, #075985 100%);
+  border-radius: 5px;
+}
+
+.scroll-bar::-webkit-scrollbar-track {
+  background-color: none;
+  border: 1px solid none;
+}
+
+.scroll-bar::-webkit-scrollbar-button {
+  background-color: #075985;
+  border-radius: 2px;
+  height: 4px;
+}
+
+.scroll-bar::-webkit-scrollbar-button:hover {
+  background-color: #999999;
+}

+ 6 - 9
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/SysDictController.java

@@ -2,10 +2,7 @@ package com.management.platform.controller;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.management.platform.entity.Clue;
-import com.management.platform.entity.Custom;
-import com.management.platform.entity.SysDict;
-import com.management.platform.entity.SysForm;
+import com.management.platform.entity.*;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.ClueService;
 import com.management.platform.service.CustomService;
@@ -20,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -44,12 +42,11 @@ public class SysDictController {
     private CustomService customService;
 
 
-    @RequestMapping("/list")
-    public HttpRespMsg list(){
+    @RequestMapping("/data_type")
+    public HttpRespMsg data_type(){
         HttpRespMsg msg=new HttpRespMsg();
-        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
-        List<SysDict> list = sysDictService.list(new LambdaQueryWrapper<SysDict>().eq(SysDict::getCompanyId, companyId));
-        msg.setData(list);
+        List<Map<String, Object>> sysDictList = SysDict.getSysDictList();
+        msg.setData(sysDictList);
         return msg;
     }
 

+ 35 - 0
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/SysDict.java

@@ -5,6 +5,11 @@ import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -54,4 +59,34 @@ public class SysDict extends Model<SysDict> {
         return this.id;
     }
 
+    public static final String[] TYPE_LIST=new String[]{"ClueSources","CustomLevel","CustomIndustry","CustomSources","BusinessStage","ProductType","ProductUnit","OrderType"};
+
+    public static List<Map<String,Object>> getSysDictList(){
+        List<Map<String,Object>> itemList=new ArrayList<>();
+        for (String type : TYPE_LIST) {
+            Map<String,Object> map=new HashMap<>();
+            map.put("id",type);
+            switch (type){
+                case "ClueSources":map.put("name","线索来源");
+                break;
+                case "CustomLevel":map.put("name","客户级别");
+                    break;
+                case "CustomIndustry":map.put("name","客户行业");
+                    break;
+                case "CustomSources":map.put("name","客户来源");
+                    break;
+                case "BusinessStage":map.put("name","商机阶段");
+                    break;
+                case "ProductType":map.put("name","产品类型");
+                    break;
+                case "ProductUnit":map.put("name","产品单位");
+                    break;
+                case "OrderType":map.put("name","订单类型");
+                    break;
+            }
+            itemList.add(map);
+        }
+        return itemList;
+    }
+
 }

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

@@ -12823,6 +12823,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             item.put("corpwxDeptId",corpwxDeptid);
                             item.put("department_name",departmentName);
                             if(!taskGroup.isPresent()){
+
                                 item.put("planHour",0);
                                 item.put("realHour",0);
                                 item.put("realCost",0);

+ 12 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -12815,12 +12815,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             item.put("corpwxDeptId",corpwxDeptid);
                             item.put("department_name",departmentName);
                             if(taskGroup.isPresent()){
+//                                List<Map<String, Object>> mapList = resultList.stream().filter(r -> Integer.valueOf(String.valueOf(r.get("projectId"))).equals(project.getId())
+//                                        && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId()) && (Integer.valueOf(String.valueOf(r.get("deptId"))).equals(7459) || subDeptIds.contains(Integer.valueOf(String.valueOf(r.get("deptId")))))).collect(Collectors.toList());
                                 List<Map<String, Object>> mapList = resultList.stream().filter(r -> Integer.valueOf(String.valueOf(r.get("projectId"))).equals(project.getId())
-                                        && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId()) && (Integer.valueOf(String.valueOf(r.get("deptId"))).equals(7459) || subDeptIds.contains(Integer.valueOf(String.valueOf(r.get("deptId")))))).collect(Collectors.toList());
+                                        && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId())).collect(Collectors.toList());
                                 if(mapList!=null&&mapList.size()>0){
                                     item.put("planHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("planHour")))).sum());
                                     item.put("realHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realHour")))).sum());
-                                    item.put("realCost",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum());
+                                    item.put("realCost",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realCost")))).sum());
                                     item.put("overHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum());
                                     item.put("normalHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("normalHour")))).sum());
                                     double realHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("realHour")))).sum();
@@ -12860,12 +12862,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             item.put("corpwxDeptId",corpwxDeptid);
                             item.put("department_name",departmentName);
                             if(taskGroup.isPresent()){
+//                                List<Map<String, Object>> mapList = resultList.stream().filter(r -> Integer.valueOf(String.valueOf(r.get("projectId"))).equals(project.getId())
+//                                        && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId()) && (Integer.valueOf(String.valueOf(r.get("deptId"))).equals(7460) || subDeptIds.contains(Integer.valueOf(String.valueOf(r.get("deptId")))))).collect(Collectors.toList());
                                 List<Map<String, Object>> mapList = resultList.stream().filter(r -> Integer.valueOf(String.valueOf(r.get("projectId"))).equals(project.getId())
-                                        && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId()) && (Integer.valueOf(String.valueOf(r.get("deptId"))).equals(7460) || subDeptIds.contains(Integer.valueOf(String.valueOf(r.get("deptId")))))).collect(Collectors.toList());
+                                        && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId())).collect(Collectors.toList());
                                 if(mapList!=null&&mapList.size()>0){
                                     item.put("planHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("planHour")))).sum());
                                     item.put("realHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realHour")))).sum());
-                                    item.put("realCost",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum());
+                                    item.put("realCost",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realCost")))).sum());
                                     item.put("overHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum());
                                     item.put("normalHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("normalHour")))).sum());
                                     double realHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("realHour")))).sum();
@@ -12909,12 +12913,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             item.put("corpwxDeptId",corpwxDeptid);
                             item.put("department_name",departmentName);
                             if(taskGroup.isPresent()){
+//                                List<Map<String, Object>> mapList = resultList.stream().filter(r -> Integer.valueOf(String.valueOf(r.get("projectId"))).equals(project.getId())
+//                                        && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId()) && (Integer.valueOf(String.valueOf(r.get("deptId"))).equals(7458) || subDeptIds.contains(Integer.valueOf(String.valueOf(r.get("deptId")))))).collect(Collectors.toList());
                                 List<Map<String, Object>> mapList = resultList.stream().filter(r -> Integer.valueOf(String.valueOf(r.get("projectId"))).equals(project.getId())
-                                        && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId()) && (Integer.valueOf(String.valueOf(r.get("deptId"))).equals(7458) || subDeptIds.contains(Integer.valueOf(String.valueOf(r.get("deptId")))))).collect(Collectors.toList());
+                                        && Integer.valueOf(String.valueOf(r.get("groupId"))).equals(taskGroup.get().getId())).collect(Collectors.toList());
                                 if(mapList!=null&&mapList.size()>0){
                                     item.put("planHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("planHour")))).sum());
                                     item.put("realHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realHour")))).sum());
-                                    item.put("realCost",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum());
+                                    item.put("realCost",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("realCost")))).sum());
                                     item.put("overHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("overHour")))).sum());
                                     item.put("normalHour",mapList.stream().mapToDouble(m-> Double.valueOf(String.valueOf(m.get("normalHour")))).sum());
                                     double realHour = mapList.stream().mapToDouble(m -> Double.valueOf(String.valueOf(m.get("realHour")))).sum();

+ 17 - 19
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -1894,36 +1894,34 @@
 
     <select id="groupExpendProcessList" resultType="java.util.Map">
         SELECT p.project_name AS projectName,p.id AS projectId,tg.id AS groupId,d.department_name,d.department_id AS deptId,d.corpwx_deptid AS corpwxDeptId,tg.name AS groupName,
-        IFNULL((SELECT SUM(working_time) FROM report  WHERE task_id=t.id AND dept_id=d.department_id AND create_date BETWEEN #{startDate} AND #{endDate} AND state=1 AND project_id IS NOT NULL),0) AS realHour,
-        IFNULL((SELECT SUM(cost) FROM report  WHERE task_id=t.id AND dept_id=d.department_id AND create_date BETWEEN #{startDate} AND #{endDate} AND state=1 AND project_id IS NOT NULL) ,0) AS realCost,
-        IFNULL((SELECT SUM(overtime_hours) FROM report  WHERE task_id=t.id AND dept_id=d.department_id AND create_date BETWEEN #{startDate} AND #{endDate} AND state=1 AND project_id IS NOT NULL ),0) AS overHour,
-        (IFNULL((SELECT SUM(working_time) FROM report  WHERE task_id=t.id AND dept_id=d.department_id AND create_date BETWEEN #{startDate} AND #{endDate} AND state=1 AND project_id IS NOT NULL),0)
-        -IFNULL((SELECT SUM(overtime_hours) FROM report  WHERE task_id=t.id AND dept_id=d.department_id AND create_date BETWEEN #{startDate} AND #{endDate} AND state=1 AND project_id IS NOT NULL ),0)) as normalHour,
+        IFNULL(r.realHour,0) AS realHour,IFNULL(r.realCost,0) AS realCost,IFNULL(r.normalHour,0) as normalHour,IFNULL(r.overHour,0) as overHour,
         IFNULL(SUM(te.plan_hours),0) AS planHour
         FROM task_executor te
         LEFT JOIN task t ON t.id=te.task_id
-        LEFT JOIN user u ON te.executor_id=u.id
+        LEFT JOIN USER u ON te.executor_id=u.id
         LEFT JOIN task_group tg ON tg.id=t.group_id
         LEFT JOIN project p ON p.id=tg.project_id
         LEFT JOIN department d ON d.department_id=u.department_id
+        LEFT JOIN (
+        SELECT SUM(working_time) AS realHour,SUM(cost) AS realCost,(SUM(working_time)-SUM(overtime_hours)) AS normalHour,SUM(overtime_hours) AS overHour,group_id
+        FROM report  WHERE create_date BETWEEN #{startDate} AND #{endDate} AND state=1 AND project_id IS NOT NULL AND company_id=#{companyId} GROUP BY group_id) r ON r.group_id=tg.`id`
         WHERE u.company_id=#{companyId}
         AND tg.name IN ('生产部电气','生产部车间','工程部现场安装施工','工程部配合调试','研发部工艺设计','研发部结构设计','研发部BIM设计','研发部电气设计','研发部工艺调试验收','研发部电气调试验收')
-        AND d.department_id IN ( 7458, 7459, 7902, 7903, 7460, 7813, 7814, 7815, 7816)
         <if test="userId!=null and userId!=''">
             and t.executor_id=#{userId}
         </if>
-        <if test="list!=null and list.size()>0">
-            and d.department_id in
-            <foreach collection="list" open="(" close=")" item="item" separator=",">
-                #{item}
-            </foreach>
-        </if>
-        <if test="listSecond!=null and listSecond.size()>0">
-            and d.department_id in
-            <foreach collection="listSecond" open="(" close=")" item="item" separator=",">
-                #{item}
-            </foreach>
-        </if>
+<!--        <if test="list!=null and list.size()>0">-->
+<!--            and d.department_id in-->
+<!--            <foreach collection="list" open="(" close=")" item="item" separator=",">-->
+<!--                #{item}-->
+<!--            </foreach>-->
+<!--        </if>-->
+<!--        <if test="listSecond!=null and listSecond.size()>0">-->
+<!--            and d.department_id in-->
+<!--            <foreach collection="listSecond" open="(" close=")" item="item" separator=",">-->
+<!--                #{item}-->
+<!--            </foreach>-->
+<!--        </if>-->
         GROUP BY p.id,tg.id,d.department_id ORDER BY p.id,d.department_id
     </select>
 

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

@@ -4678,15 +4678,22 @@ 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={"所属部门","工号","员工","排除工单号/任务变更通知号","钢印号","产品名称","工序名称","进度","工作件数", "工作时长","单价","工价","汇总",
+                "工作日期","填报日期","质检类型","质检人"};
         List<String> titleList=Arrays.asList(title);
         dataList.add(titleList);
+
+        int sumCostIndex = 12;
+        List<String> sumLine = null;
+        String lastJobNum = null;
         for (Map<String, Object> map : reportList) {
             List<String> item=new ArrayList<>();
-            item.add(String.valueOf(map.get("userName")));
-            item.add(String.valueOf(map.get("jobNumber")));
             String departmentName = convertDepartmentIdToCascade(Integer.valueOf(String.valueOf(map.get("departmentId"))), departmentList);
             item.add(departmentName);
+            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")));
             if(planType==0){
                 item.add(map.get("productSchedulingNum")==null?"":String.valueOf(map.get("productSchedulingNum")));
@@ -4694,15 +4701,33 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 item.add(map.get("taskChangeNoticeNum")==null?"":String.valueOf(map.get("taskChangeNoticeNum")));
             }
             item.add(map.get("steelNumArray")==null?"":String.valueOf(map.get("steelNumArray")));
-            item.add(String.valueOf(map.get("workingTime")));
             item.add(String.valueOf(map.get("productName")));
             item.add(String.valueOf(map.get("procedureName")));
             item.add(String.valueOf(map.get("progress"))+"%");
-            item.add(String.valueOf(map.get("checkType")));
-            item.add(map.get("checkerName")==null?"":String.valueOf(map.get("checkerName")));
+            item.add(String.valueOf(map.get("finishNum")));
+            item.add(String.valueOf(map.get("workingTime")));
+            item.add(String.valueOf(map.get("unitPrice")));
+            String cost = String.valueOf(map.get("cost"));
+            item.add(cost);
             item.add(String.valueOf(map.get("createDate")));
             item.add(String.valueOf(map.get("reportTime")));
+            item.add(String.valueOf(map.get("checkType")));
+            item.add(map.get("checkerName")==null?"":String.valueOf(map.get("checkerName")));
             dataList.add(item);
+            if (lastJobNum == null || !lastJobNum.equals(curJobBNum)) {
+                //换新的人了
+                sumLine = item;
+                sumLine.add(sumCostIndex, cost);
+                lastJobNum = curJobBNum;
+            } else {
+                //当前这行的该列设置为空
+                item.add(sumCostIndex, "");
+                //更新第一行的数据
+                BigDecimal sumCost = new BigDecimal(sumLine.get(sumCostIndex));
+                sumCost = sumCost.add(new BigDecimal(cost));
+                sumLine.remove(sumCostIndex);
+                sumLine.add(sumCostIndex, sumCost.toString());
+            }
         }
         Company company = companyMapper.selectById(companyId);
         String fileName=("日报统计导出_")+company.getCompanyName()+System.currentTimeMillis();

+ 2 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ReportMapper.xml

@@ -425,9 +425,9 @@
     </select>
     <select id="getReportList" resultType="java.util.Map">
         select p.plan_type as planType,u.name as userName,u.job_number as jobNumber,d.department_id as departmentId,p.product_scheduling_num as productSchedulingNum,
-        p.task_change_notice_num as taskChangeNoticeNum,r.steel_num_array as steelNumArray,r.working_time as workingTime,p.product_name as productName,
+        p.task_change_notice_num as taskChangeNoticeNum,r.steel_num_array as steelNumArray,r.working_time as workingTime,p.product_name as productName,r.finish_num as finishNum,
         pp.name as procedureName,r.progress as progress,(CASE r.check_type WHEN 0 THEN '自检' WHEN 1 THEN '互检' ELSE '专检' END ) as checkType ,uu.name as checkerName,
-        date_format(r.create_date,'%Y-%m-%d') as createDate,date_format(r.create_time,'%Y-%m-%d %T') as reportTime  from report r
+        date_format(r.create_date,'%Y-%m-%d') as createDate,date_format(r.create_time,'%Y-%m-%d %T') as reportTime, pp.unit_price as unitPrice,r.cost  from report r
         left join plan p on p.id=r.plan_id
         left join department d on d.department_id=p.station_id
         left join user u on r.creator_id=u.id