Browse Source

feat: 企业信用记录

zhangying 7 months ago
parent
commit
3c42640a7f
29 changed files with 3236 additions and 20 deletions
  1. 27 0
      doc/待更新脚本.txt
  2. 1 1
      h5app/src/api/company/index.ts
  3. 52 0
      h5app/src/api/creditRecord/creditRecord.ts
  4. 8 0
      h5app/src/router/index.ts
  5. 452 0
      h5app/src/views/pages/company/creditRecordList.vue
  6. 6 4
      h5app/src/views/pages/company/edit.vue
  7. 356 0
      h5app/src/views/pages/company/editCreditRecord.vue
  8. 16 2
      h5app/src/views/pages/company/postList.vue
  9. 5 2
      src/main/java/com/hz/employmentsite/controller/companyService/CompanyController.java
  10. 56 0
      src/main/java/com/hz/employmentsite/controller/companyService/CreditRecordController.java
  11. 1 1
      src/main/java/com/hz/employmentsite/controller/jobUserManager/HonorController.java
  12. 36 0
      src/main/java/com/hz/employmentsite/mapper/PcCreditRecordMapper.java
  13. 14 0
      src/main/java/com/hz/employmentsite/mapper/cquery/CreditRecordCQuery.java
  14. 155 0
      src/main/java/com/hz/employmentsite/model/PcCreditRecord.java
  15. 1110 0
      src/main/java/com/hz/employmentsite/model/PcCreditRecordExample.java
  16. 18 0
      src/main/java/com/hz/employmentsite/services/impl/companyService/CompanyServiceImpl.java
  17. 66 0
      src/main/java/com/hz/employmentsite/services/impl/companyService/CreditRecordServiceImpl.java
  18. 3 3
      src/main/java/com/hz/employmentsite/services/impl/jobUserManager/HonorServiceImpl.java
  19. 2 0
      src/main/java/com/hz/employmentsite/services/service/companyService/CompanyService.java
  20. 16 0
      src/main/java/com/hz/employmentsite/services/service/companyService/CreditRecordService.java
  21. 1 1
      src/main/java/com/hz/employmentsite/services/service/jobUserManager/HonorService.java
  22. 3 0
      src/main/java/com/hz/employmentsite/vo/companyService/CompanyVo.java
  23. 9 0
      src/main/java/com/hz/employmentsite/vo/companyService/CreditRecordVo.java
  24. 1 1
      src/main/resources/generatorConfig.xml
  25. 431 0
      src/main/resources/mapping/PcCreditRecordMapper.xml
  26. 23 0
      src/main/resources/mapping/cquery/CreditRecordCQuery.xml
  27. 52 0
      vue/src/api/companyService/creditRecord.ts
  28. 120 1
      vue/src/views/companyService/company/detail.vue
  29. 196 4
      vue/src/views/companyService/company/edit.vue

+ 27 - 0
doc/待更新脚本.txt

@@ -0,0 +1,27 @@
+-- 2024-7-16 企业信用记录表
+CREATE TABLE `pc_credit_record`  (
+  `CreditRecordID` varchar(50) NOT NULL,
+  `CompanyID` varchar(50) NULL COMMENT '企业ID',
+  `CreditRecordContent` text NULL COMMENT '信用记录内容',
+  `EnterTime` datetime NULL COMMENT '录入时间',
+  `DocumentNumber` varchar(50) NULL COMMENT '决定文书号',
+  `IncludeTime` datetime NULL COMMENT '列入时间',
+  `ExpirationTime` datetime NULL COMMENT '到期时间',
+  `DecidingDepartment` varchar(100) NULL COMMENT '作出列入决定部门',
+  `Source` varchar(100) NULL COMMENT '来源',
+  `IsEffective` int NULL COMMENT '是否有效:0是1否',
+  `DepartmentTypeID` int NULL COMMENT '部门类别',
+  `CreateUserID` varchar(50) NULL,
+  `CreateTime` datetime NULL,
+  `ModifyUserID` varchar(50) NULL,
+  `ModifyTime` datetime NULL,
+  PRIMARY KEY (`CreditRecordID`)
+);
+
+-- 2024-7-16 企业信用记录来源部门字典
+INSERT INTO `sys_dictionary` VALUES ('CreditRecordDepartment', '企业信用记录来源部门类型', 109, 1);
+INSERT INTO `sys_dictionary_item` VALUES ('1ecc5294-51f6-1111-4455-e63f7ac78001', '', 'CreditRecordDepartment', 1, '人社', 1, 1, 1);
+INSERT INTO `sys_dictionary_item` VALUES ('1ecc5294-51f6-1111-4455-e63f7ac78002', '', 'CreditRecordDepartment', 2, '环保', 2, 1, 1);
+INSERT INTO `sys_dictionary_item` VALUES ('1ecc5294-51f6-1111-4455-e63f7ac78003', '', 'CreditRecordDepartment', 3, '工商', 3, 1, 1);
+INSERT INTO `sys_dictionary_item` VALUES ('1ecc5294-51f6-1111-4455-e63f7ac78004', '', 'CreditRecordDepartment', 4, '安全', 4, 1, 1);
+INSERT INTO `sys_dictionary_item` VALUES ('1ecc5294-51f6-1111-4455-e63f7ac78005', '', 'CreditRecordDepartment', 5, '其他', 5, 1, 1);

+ 1 - 1
h5app/src/api/company/index.ts

@@ -125,7 +125,7 @@ export function saveCompanyInfo(data: any) {
 
 export function saveCompany(data: any) {
     return request<object>({
-        url: 'companyService/company/saveCompany',
+        url: 'companyService/company/save',
         method: 'post',
         data: data
     }, {

+ 52 - 0
h5app/src/api/creditRecord/creditRecord.ts

@@ -0,0 +1,52 @@
+import {request} from "@/utils/request";
+
+export function getCreditRecordListByCompanyID(companyID: any) {
+    return request<object>(
+        {
+            url: "companyService/creditRecord/getList",
+            method: 'get',
+            params: {companyID},
+        },
+        {
+            isNew: true,
+        },
+    );
+}
+
+export function getCreditRecordById(creditRecordID: string) {
+    return request({
+        url: 'companyService/creditRecord/getByID',
+        method: 'get',
+        params: {creditRecordID}
+    }, {
+        isNew: true
+    })
+}
+
+export function saveCreditRecord(data: any, userId: string) {
+    return request<object>({
+        url: 'companyService/creditRecord/save',
+        method: 'post',
+        data: data,
+        params: {userId},
+    }, {
+        isNew: true,
+        successMsg: '提交成功!',
+        errorMsg: '提交失败!'
+    })
+}
+
+export function deleteCreditRecord(ids: any) {
+    return request<object>(
+        {
+            url: 'companyService/creditRecord/delete',
+            method: 'post',
+            data: ids,
+        },
+        {
+            isNew: true,
+            successMsg: '删除成功!',
+            errorMsg: '删除失败!'
+        },
+    );
+}

+ 8 - 0
h5app/src/router/index.ts

@@ -102,6 +102,14 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/company/editPost',
                 component: () => import('@/views/pages/company/editPost.vue')
             },
+            {
+                path: 'tabMain/company/creditRecordList',
+                component: () => import('@/views/pages/company/creditRecordList.vue')
+            },
+            {
+                path: 'tabMain/company/editCreditRecord',
+                component: () => import('@/views/pages/company/editCreditRecord.vue')
+            },
             {
                 path: 'tabMain/post/list',
                 component: () => import('@/views/pages/post/list.vue')

+ 452 - 0
h5app/src/views/pages/company/creditRecordList.vue

@@ -0,0 +1,452 @@
+<template>
+  <ion-page class="list-page post-list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="onBack"></ion-icon>
+        </ion-buttons>
+        <ion-title>
+          企业信用记录
+        </ion-title>
+      </ion-toolbar>
+    </ion-header>
+
+    <ion-content>
+      <div class="stepFlex">
+        <div v-for="(record,key) in stepList" :key="key" class="stepFlex-item">
+          <div
+              :class="[(record.val < curStepData?.statusVal || curStepData?.statusVal == stepList.val) ? 'greenCircle' :record.val == curStepData?.statusVal ? 'now' : 'grayCircle']"></div>
+          <div v-if="key !== stepList.length - 1"
+               :class="[record.val < curStepData?.statusVal ? 'greenLine' : 'grayLine']"></div>
+          <div class="stepFlex-item-label">
+            <p class="stepFlex-item-label-title" @click="onRedirect(record.val)">{{ record.title }}</p>
+          </div>
+        </div>
+      </div>
+
+      <form autocomplete="off">
+        <div class="bw-vue-form">
+          <div class="form-title">
+            信用记录
+            <ion-icon :icon="addCircleOutline" class="iconBtn" style="float:right;"
+                      @click="onAdd()"></ion-icon>
+          </div>
+          <div class="bw-vue-list">
+            <div class="list-content" v-if="!loading">
+              <ion-list>
+                <div v-for="(record,key) in creditRecordList" :key="key">
+                  <ion-item-sliding>
+                    <ion-item detail @click="onEdit(record.creditRecordID)">
+                      <ion-label>
+                        <h2>
+                          {{ record.documentNumber }}
+                        </h2>
+                        <p v-if="record.includeTime!=null&&record.expirationTime!=null">
+                          {{
+                            dayjs(record.includeTime).format("YYYY-MM-DD")
+                          }}至{{ dayjs(record.expirationTime).format("YYYY-MM-DD") }}
+                        </p>
+                        <p v-if="record.includeTime==null||record.expirationTime==null">
+                          暂未设置有效期限
+                        </p>
+                      </ion-label>
+                    </ion-item>
+                    <ion-item-options>
+                      <ion-item-option color="danger" @click="setDelAlertOpen(true, record.postID)">
+                        <ion-icon :icon="trashOutline"></ion-icon>
+                      </ion-item-option>
+                    </ion-item-options>
+                  </ion-item-sliding>
+                </div>
+              </ion-list>
+            </div>
+          </div>
+          <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+            <ion-infinite-scroll-content
+                :loadingText="pageParams.total>pageParams.pageIndex*pageParams.pageSize?'正在加载...':'暂无更多'"
+                loadingSpinner="bubbles">
+            </ion-infinite-scroll-content>
+          </ion-infinite-scroll>
+        </div>
+      </form>
+    </ion-content>
+    <ion-footer>
+      <ion-toolbar>
+        <ion-button style="width: 48%;float:left;margin-left: 1%;" @click="onBack">上一步</ion-button>
+        <ion-button style="width: 48%;float:left;margin-right: 1%;" @click="onFinish">完 成</ion-button>
+      </ion-toolbar>
+    </ion-footer>
+
+    <ion-alert
+        :is-open="delAlertOpen"
+        header="删除确认"
+        message="确定要删除该岗位吗?"
+        :buttons="delAlertButtons"
+        @didDismiss="setDelAlertOpen(false, null)"
+    ></ion-alert>
+
+    <ion-alert
+        :is-open="infoAlertOpen"
+        :header="infoAlterData.title"
+        :message="infoAlterData.message"
+        :buttons="infoAlertButtons"
+        @didDismiss="setInfoAlertOpen(false)"
+    ></ion-alert>
+    <ion-loading
+        :is-open="delLoading"
+        message="删除中..."
+        @didDismiss="setDelLoadingOpen(false)">
+    </ion-loading>
+  </ion-page>
+</template>
+<script lang="ts">
+import {defineComponent, reactive, ref} from "vue";
+import {useRoute, useRouter} from "vue-router";
+import {alertController, onIonViewDidEnter} from "@ionic/vue";
+import {arrowBackOutline, addCircleOutline, trashOutline} from 'ionicons/icons';
+import {getCompanyPostList} from '@/api/company/index'
+import dayjs from "dayjs";
+import {post, postByDataAndParams} from "@/api/common";
+import {useUserStore} from "@/store/modules/user";
+import {getCreditRecordListByCompanyID} from "@/api/creditRecord/creditRecord";
+
+interface StepParams {
+  name: string,
+  statusVal: number
+}
+
+export default defineComponent({
+  name: 'PostList',
+  setup() {
+    const userStore = useUserStore();
+    const userInfo = ref(userStore.getUserInfo);
+
+    const router = useRouter();
+    const route = useRoute();
+    const loading = ref(false);
+    const creditRecordList = ref<any>([]);
+    const pageParams = reactive({
+      pageIndex: 1,
+      pageSize: 10,
+      total: 0,
+      companyID: ''
+    });
+    const curStepData = ref<StepParams>({
+      name: "",
+      statusVal: 1
+    });
+    const isEditCompany = ref(0);
+    const stepList = ref<Array<any>>([
+      {
+        title: '基础信息',
+        desc: '企业基础信息',
+        val: 1
+      },
+      {
+        title: '岗位信息',
+        desc: '企业岗位信息',
+        val: 3
+      },
+      {title: '信用记录', desc: '企业信用记录', val: 4}]);
+    const presentAlert = async (message: string) => {
+      const alert = await alertController.create({
+        header: '错误!',
+        message: message,
+        buttons: [
+          '确定'
+        ],
+      });
+
+      await alert.present();
+    };
+
+    // 信息弹窗内容
+    const infoAlterData = reactive({
+      title: "",
+      message: ""
+    });
+    // 删除警告弹窗开关
+    const delAlertOpen = ref(false);
+    // 删除警告弹窗按钮定义
+    const infoAlertButtons = [
+      {
+        text: '确定',
+        role: 'confirm',
+        handler: () => {
+          reload(pageParams.companyID, curStepData.value.statusVal, isEditCompany.value);
+        },
+      },
+    ];
+
+    // 删除数据
+    const delPostID = ref("");
+    // 删除加载
+    const delLoading = ref(false);
+    // 信息弹窗开关
+    const infoAlertOpen = ref(false);
+    // 删除警告弹窗按钮定义
+    const delAlertButtons = [
+      {
+        text: '取消',
+        role: 'cancel',
+        handler: () => {
+          reload(pageParams.companyID, curStepData.value.statusVal, isEditCompany.value);
+        },
+      },
+      {
+        text: '确定',
+        role: 'confirm',
+        handler: () => {
+          delLoading.value = true;
+          postByDataAndParams("companyService/post/delete", [delPostID.value], {loginUserID: userInfo.value.userID}, "岗位信息删除").then((res) => {
+            /* infoAlterData.title = "提示";
+             infoAlterData.message = "删除成功";
+             setInfoAlertOpen(true);*/
+          }).finally(() => {
+            delLoading.value = false;
+            reload(pageParams.companyID, curStepData.value.statusVal, isEditCompany.value);
+          });
+        },
+      },
+    ];
+
+    // 设置要删除的求职人员
+    function setDelAlertOpen(value: boolean, postID: any) {
+      delAlertOpen.value = value;
+      if (postID != null) {
+        delPostID.value = postID;
+      }
+    }
+
+    // 设置信息提示弹窗开关
+    function setInfoAlertOpen(value: boolean) {
+      infoAlertOpen.value = value;
+    }
+
+    // 设置删除弹窗开启关闭
+    function setDelLoadingOpen(value: boolean) {
+      delLoading.value = value;
+    }
+
+    const onAdd = () => {
+      router.push({
+        path: './editCreditRecord',
+        query: {reload: 1, id: null, companyID: pageParams.companyID, isEdit: isEditCompany.value}
+      });
+    };
+    const onEdit = (creditRecordID: any) => {
+      router.push({
+        path: './editCreditRecord',
+        query: {reload: 1, id: creditRecordID, companyID: pageParams.companyID, isEdit: isEditCompany.value}
+      });
+    };
+    const onBack = () => {
+      router.push({path: './postList', query: {reload: 1, id: pageParams.companyID, status: 3}});
+    };
+    const onNext = () => {
+      router.push({
+        path: './creditRecordList',
+        query: {
+          reload: 1,
+          id: pageParams.companyID,
+          status: 4,
+          random: Math.random()
+        }
+      });
+    }
+    const onRedirect = (statusValue: any) => {
+      if (isEditCompany.value == 1 && statusValue == 1) router.push({
+        path: './edit',
+        query: {reload: 1, id: pageParams.companyID, status: 1}
+      });
+    };
+
+    const onFinish = () => {
+      creditRecordList.value = [];
+      router.push({path: './list', query: {reload: 1}});
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pageParams.total > pageParams.pageIndex * pageParams.pageSize) {
+          pageParams.pageSize += 10;
+          loadData(pageParams.companyID, curStepData.value.statusVal, isEditCompany.value);
+        }
+      }, 500);
+    }
+
+    const loadData = async function (companyID: any, status: any, isEdit: any) {
+      loading.value = true;
+      pageParams.companyID = companyID;
+      curStepData.value.statusVal = status;
+      isEditCompany.value = isEdit;
+      getCreditRecordListByCompanyID(companyID).then((result: any) => {
+        creditRecordList.value = result;
+      }).finally(() => {
+        loading.value = false;
+      })
+    };
+
+    const reload = (companyID: any, status: any, isEdit: any) => {
+      pageParams.pageIndex = 1;
+      creditRecordList.value = [];
+      loadData(companyID, status, isEdit);
+    };
+
+    onIonViewDidEnter(() => {
+      if (route.query.reload)
+        reload(route.query.id, route.query.status, route.query.isEdit);
+    });
+
+    return {
+      arrowBackOutline,
+      addCircleOutline,
+      trashOutline,
+      route,
+      router,
+      loading,
+      pageParams,
+      curStepData,
+      creditRecordList,
+      stepList,
+      delPostID,
+      delAlertButtons,
+      infoAlertButtons,
+      delAlertOpen,
+      infoAlertOpen,
+      delLoading,
+      infoAlterData,
+      onBack,
+      onNext,
+      onRedirect,
+      onAdd,
+      onEdit,
+      onFinish,
+      onScroll,
+      loadData,
+      presentAlert,
+      dayjs,
+      setDelAlertOpen,
+      setInfoAlertOpen,
+      setDelLoadingOpen,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.next-btn {
+  width: 100%;
+  --border-radius: 0px;
+  --background: #f2f2f5;
+  margin: 20px 0 0 0;
+  color: #363432;
+  font-size: 14px;
+}
+
+.iconBtn {
+  width: 24px;
+  height: 24px;
+}
+
+.stepFlex {
+  margin: 0;
+  display: flex;
+  width: 100%;
+
+  .stepFlex-item {
+    position: relative;
+    flex: 1;
+    text-align: center;
+    margin-top: -10px;
+
+    .stepFlex-item-label {
+      padding-top: 30px;
+      font-size: 14px;
+
+      .stepFlex-item-label-title {
+        margin-top: 30px;
+      }
+
+      .stepFlex-item-label-desc {
+        margin-top: 5px;
+        color: #b9b9bd;
+      }
+    }
+  }
+
+  .greenCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+  }
+
+  .now {
+    top: calc(50% - 18px);
+    left: calc(50% - 8px);
+    position: absolute;
+    z-index: 3;
+    width: 16px;
+    height: 16px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+    border: 4px solid #c5e8f9;
+  }
+
+  .grayCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #ccc;
+  }
+
+  .greenLine {
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    height: 2px;
+    background-color: #31A2FE;
+    position: absolute;
+  }
+
+  .grayLine {
+    height: 0;
+    border: 1px dashed #ccc;
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    position: absolute;
+  }
+
+
+  .post-list-page {
+    .list-content {
+      margin: 0px 15px !important;
+      background-color: white !important;
+      border-radius: 0 !important;
+
+      ion-item {
+        margin-top: 10px;
+        font-size: 14px;
+        border: 1px solid rgb(242, 242, 245);
+
+        p {
+          font-size: 12px;
+        }
+      }
+    }
+  }
+
+}
+
+</style>

+ 6 - 4
h5app/src/views/pages/company/edit.vue

@@ -421,11 +421,13 @@ export default defineComponent({
         companyDesc: null,
         longitude: null,
         latitude: null,
-        listLabel: null
+        listLabel: null,
+        loginUserID: ""
     }});
     const stepList = ref([
-        {title: '基础信息', desc: '企业基础信息', val: 1},
-        {title: '岗位信息', desc: '企业岗位信息', val: 3}
+      {title: '基础信息', desc: '企业基础信息', val: 1},
+      {title: '岗位信息', desc: '企业岗位信息', val: 3},
+      {title: '信用记录', desc: '企业信用记录', val: 4}
     ]);
 
     const companyStatusList = ref([]);
@@ -783,8 +785,8 @@ export default defineComponent({
       isAdd.value = companyID == null;
       const reqData = await getCompanyById(companyID,loginUserId);
       formState.dataModel = reqData;
+      formState.dataModel.loginUserID = loginUserId;
       isLongDate.value = formState.dataModel.validDate == "2099-12-31T00:00:00.000+08:00";
-      console.log('dataModel',formState.dataModel);
       if(formState.dataModel.regionCode!=null) getStreetListData(formState.dataModel.regionCode);
       if (companyID == null) {
         setLongitudeLatitude();

+ 356 - 0
h5app/src/views/pages/company/editCreditRecord.vue

@@ -0,0 +1,356 @@
+<template>
+  <ion-page class="list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="back"></ion-icon>
+        </ion-buttons>
+        <ion-title>
+          信息记录收集
+        </ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <form autocomplete="off">
+        <div class="bw-vue-form">
+          <div class="form-title">基本信息</div>
+          <div class="form-input">
+            <ion-label>录入时间<span class="danger">*</span></ion-label>
+            <div class="dateTimeBox">
+              <ion-datetime-button datetime="enterTime"></ion-datetime-button>
+              <ion-modal :keep-contents-mounted="true">
+                <ion-datetime id="enterTime" placeholder="日期"
+                              v-model="dataModel.enterTime" :prefer-wheel="true"
+                              dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
+                              :show-default-buttons="true">
+                </ion-datetime>
+              </ion-modal>
+            </div>
+          </div>
+          <div class="form-input">
+            <ion-label>信用记录内容<span class="danger">*</span></ion-label>
+            <div>
+              <ion-input name="creditRecordContent" id="creditRecordContent" class="custom"
+                         placeholder="请输入信用记录内容" v-model="dataModel.creditRecordContent"></ion-input>
+            </div>
+          </div>
+          <div class="form-input">
+            <ion-label>做出列入决定部门<span class="danger">*</span></ion-label>
+            <div>
+              <ion-input name="decidingDepartment" id="decidingDepartment" class="custom"
+                         placeholder="请输入决定部门" v-model="dataModel.decidingDepartment"></ion-input>
+            </div>
+          </div>
+          <div class="form-input">
+            <ion-label>决定文书号<span class="danger">*</span></ion-label>
+            <div>
+              <ion-input name="documentNumber" id="documentNumber" class="custom"
+                         placeholder="请输入决定文书号" v-model="dataModel.documentNumber"></ion-input>
+            </div>
+          </div>
+          <div class="form-input">
+            <ion-label>列入日期<span class="danger">*</span></ion-label>
+            <div class="dateTimeBox">
+              <ion-datetime-button datetime="includeTime"></ion-datetime-button>
+              <ion-modal :keep-contents-mounted="true">
+                <ion-datetime id="includeTime" placeholder="日期"
+                              v-model="dataModel.includeTime" :prefer-wheel="true"
+                              dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
+                              :show-default-buttons="true">
+                </ion-datetime>
+              </ion-modal>
+            </div>
+          </div>
+          <div class="form-input">
+            <ion-label>到期日期<span class="danger">*</span></ion-label>
+            <div class="dateTimeBox">
+              <ion-datetime-button datetime="expirationTime"></ion-datetime-button>
+              <ion-modal :keep-contents-mounted="true">
+                <ion-datetime id="expirationTime" placeholder="日期"
+                              v-model="dataModel.expirationTime" :prefer-wheel="true"
+                              dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
+                              :show-default-buttons="true">
+                </ion-datetime>
+              </ion-modal>
+            </div>
+          </div>
+          <div class="form-input">
+            <ion-label>来源<span class="danger">*</span></ion-label>
+            <div>
+              <ion-input name="source" id="source" class="custom"
+                         placeholder="请输入来源" v-model="dataModel.source"></ion-input>
+            </div>
+          </div>
+          <div class="form-select">
+            <ion-label>是否有效<span class="danger">*</span></ion-label>
+            <ion-select name="isEffective" id="isEffective" okText="确定" cancelText="取消"
+                        v-model="dataModel.isEffective"
+                        interface="action-sheet" placeholder="请选择是否有效" style="width:100%;text-align:left;">
+              <ion-select-option :value="0">是</ion-select-option>
+              <ion-select-option :value="1">否</ion-select-option>
+            </ion-select>
+          </div>
+          <div class="form-select">
+            <ion-label>部门类别<span class="danger">*</span></ion-label>
+            <ion-select name="departmentTypeID" id="departmentTypeID" okText="确定" cancelText="取消"
+                        v-model="dataModel.departmentTypeID"
+                        interface="action-sheet" placeholder="请选择最高学历" style="width:100%;text-align:left;">
+              <ion-select-option v-for="(it,key) in creditRecordDepartmentList" :key="key" :value="it.value">
+                {{ it.name }}
+              </ion-select-option>
+            </ion-select>
+          </div>
+        </div>
+      </form>
+    </ion-content>
+    <ion-footer>
+      <ion-toolbar>
+        <ion-button style="width: 100%;" @click="onSave">提交</ion-button>
+      </ion-toolbar>
+    </ion-footer>
+  </ion-page>
+</template>
+<script lang="ts">
+import {computed, defineComponent, reactive, ref, toRefs} from "vue";
+import {arrowBackOutline} from 'ionicons/icons';
+import {useRoute, useRouter} from "vue-router";
+import {alertController, onIonViewDidEnter} from "@ionic/vue";
+import {useVuelidate} from "@vuelidate/core";
+import {savePost} from "@/api/post";
+import {getSysDictionaryList} from "@/api/system/dictionary";
+import {useUserStore} from "@/store/modules/user";
+import {required} from "@vuelidate/validators";
+import {getCreditRecordById, saveCreditRecord} from "@/api/creditRecord/creditRecord";
+import dayjs from "dayjs";
+
+interface postModel {
+  dataModel: any;
+}
+
+export default defineComponent({
+  name: 'PostEdit',
+  setup() {
+    const router = useRouter();
+    const route = useRoute();
+    const userStore = useUserStore();
+    const userInfo = ref(userStore.getUserInfo);
+    const isShow = ref<any>(false);
+    const isEdit = ref<any>(false);
+    const isEditCompany = ref(0);
+    const isCommit = ref<any>(false);
+    const formState = reactive<postModel>({
+      dataModel: {}
+    });
+    const rules = computed(() => {
+      return {
+        dataModel: {
+          enterTime: {required},
+          creditRecordContent: {required},
+          decidingDepartment: {required},
+          documentNumber: {required},
+          includeTime: {required},
+          expirationTime: {required},
+          source: {required},
+          isEffective: {required},
+          departmentTypeID: {required},
+        }
+      }
+    });
+    const v$ = useVuelidate(rules, formState);
+    const isTrailList = ref([
+      {value: true, name: '是'},
+      {value: false, name: '否'},
+    ]);
+    const creditRecordDepartmentList = ref<Array<any>>([]);
+    const refPostSelectionLike = ref();
+
+    const presentAlert = async (message: string) => {
+      const alert = await alertController.create({
+        header: '错误!',
+        message: message,
+        buttons: [
+          '确定'
+        ],
+      });
+      await alert.present();
+    }
+
+    const onSetWorkCategoryID = (data: any) => {
+      formState.dataModel.workCode = data.value;
+      formState.dataModel.workCategoryName = data.text;
+    }
+
+    const onSave = async function () {
+      isCommit.value = true;
+      const isFormCorrect = await v$.value.$validate();
+      if (!isFormCorrect) {
+        await presentAlert('请输入完整信息!');
+        return null;
+      }
+      if (isCommit.value && inputValid.value) {
+        saveCreditRecord(formState.dataModel, userInfo.value.userID ? userInfo.value.userID : "").then(result => {
+          if (result) {
+            router.push({
+              path: "./creditRecordList",
+              query: {reload: 1, id: formState.dataModel.companyID, status: 4, random: Math.random()}
+            });
+          }
+        })
+      }
+    }
+
+    const back = () => {
+      router.push({
+        path: "./creditRecordList",
+        query: {reload: 1, id: formState.dataModel.companyID, status: 4, isEdit: isEditCompany.value}
+      });
+    }
+
+    const getCreditRecordDepartmentList = async function () {
+      const data: any = await getSysDictionaryList("CreditRecordDepartment");
+      creditRecordDepartmentList.value = data;
+    }
+
+    const loadData = async (creditRecordID: any, companyID: any, isEdit: any) => {
+      isCommit.value = false;
+      await getCreditRecordDepartmentList();
+      isEditCompany.value = isEdit;
+      const loginUserInfo = useUserStore().getUserInfo;
+      formState.dataModel = await getCreditRecordById(creditRecordID);
+      formState.dataModel.companyID = companyID;
+      formState.dataModel.loginUserID = loginUserInfo.userID == undefined ? "" : loginUserInfo.userID;
+      if (!creditRecordID) {
+        formState.dataModel.enterTime = dayjs().format("YYYY-MM-DD");
+        formState.dataModel.includeTime = dayjs().format("YYYY-MM-DD");
+        formState.dataModel.expirationTime = dayjs().format("YYYY-MM-DD");
+      }
+    };
+
+    const onIsTrailChange = () => {
+      if (!formState.dataModel.isTrail) {
+        formState.dataModel.trailMonths = 0;
+      }
+    }
+
+    const inputValid = ref(true);
+
+    const reload = (creditRecordID: any, companyID: any, isEdit: any) => {
+      formState.dataModel.recruitCount = null;
+      loadData(creditRecordID, companyID, isEdit);
+    }
+
+    onIonViewDidEnter(() => {
+      if (route.query.reload)
+        reload(route.query.id, route.query.companyID, route.query.isEdit);
+    });
+
+
+    return {
+      ...toRefs(formState),
+      arrowBackOutline,
+      isCommit,
+      route,
+      router,
+      isShow,
+      isEdit,
+      isTrailList,
+      v$,
+      refPostSelectionLike,
+      onIsTrailChange,
+      onSetWorkCategoryID,
+      onSave,
+      back,
+      creditRecordDepartmentList
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.stepFlex {
+  margin: 0;
+  display: flex;
+  width: 100%;
+
+  .stepFlex-item {
+    position: relative;
+    flex: 1;
+    text-align: center;
+    margin-top: -10px;
+
+    .stepFlex-item-label {
+      padding-top: 60px;
+      font-size: 14px;
+
+      .stepFlex-item-label-title {
+        margin-top: 30px;
+      }
+
+      .stepFlex-item-label-desc {
+        margin-top: 5px;
+        color: #b9b9bd;
+      }
+    }
+  }
+
+  .greenCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+  }
+
+  .now {
+    top: calc(50% - 18px);
+    left: calc(50% - 8px);
+    position: absolute;
+    z-index: 3;
+    width: 16px;
+    height: 16px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+    border: 4px solid #c5e8f9;
+  }
+
+  .grayCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #ccc;
+  }
+
+  .greenLine {
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    height: 2px;
+    background-color: #31A2FE;
+    position: absolute;
+  }
+
+  .grayLine {
+    height: 0;
+    border: 1px dashed #ccc;
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    position: absolute;
+  }
+}
+
+.dateTimeBox {
+  width: 100%;
+  display: flex;
+  margin-top: 5px;
+  justify-content: space-between;
+  align-content: center;
+}
+</style>

+ 16 - 2
h5app/src/views/pages/company/postList.vue

@@ -75,7 +75,8 @@
     <ion-footer>
       <ion-toolbar>
         <ion-button style="width: 48%;float:left;margin-left: 1%;" @click="onBack" >上一步</ion-button>
-        <ion-button style="width: 48%;float:left;margin-right: 1%;" @click="onFinish" >完  成</ion-button>
+        <ion-button style="width: 48%;float:left;margin-left: 1%;" @click="onNext">下一步</ion-button>
+        <!--        <ion-button style="width: 48%;float:left;margin-right: 1%;" @click="onFinish" >完  成</ion-button>-->
       </ion-toolbar>
     </ion-footer>
 
@@ -147,7 +148,8 @@ export default defineComponent({
         title: '岗位信息',
         desc: '企业岗位信息',
         val: 3
-      }]);
+      },
+      {title: '信用记录', desc: '企业信用记录', val: 4}]);
     const presentAlert = async (message: string) => {
       const alert = await alertController.create({
         header: '错误!',
@@ -245,6 +247,17 @@ export default defineComponent({
     const onBack = () => {
       router.push({path: './edit', query: {reload:1,id:pageParams.companyID,status:1}});
     };
+    const onNext = () => {
+      router.push({
+        path: './creditRecordList',
+        query: {
+          reload: 1,
+          id: pageParams.companyID,
+          status: 4,
+          random: Math.random()
+        }
+      });
+    }
     const onRedirect = (statusValue:any) => {
       if(isEditCompany.value==1 && statusValue==1) router.push({path: './edit', query: {reload:1,id:pageParams.companyID,status:1}});
     };
@@ -307,6 +320,7 @@ export default defineComponent({
       delLoading,
       infoAlterData,
       onBack,
+      onNext,
       onRedirect,
       onAdd,
       onEdit,

+ 5 - 2
src/main/java/com/hz/employmentsite/controller/companyService/CompanyController.java

@@ -114,10 +114,13 @@ public class CompanyController {
     public BaseResponse<Integer> save(@RequestBody CompanyVo data) {
         String loginUserID = data.loginUserID;
         try {
-            loginUserID = accountService.getLoginUserID();
+            if (data.loginUserID == null || data.loginUserID.isBlank()){
+                loginUserID = accountService.getLoginUserID();
+            }
         } catch (Exception e) {
+            e.printStackTrace();
         }
-        var result = companyService.save(data, loginUserID);
+        var result = companyService.baseSave(data, loginUserID);
         return RespGenerstor.success(result);
     }
 

+ 56 - 0
src/main/java/com/hz/employmentsite/controller/companyService/CreditRecordController.java

@@ -0,0 +1,56 @@
+package com.hz.employmentsite.controller.companyService;
+
+import com.hz.employmentsite.filter.exception.BaseResponse;
+import com.hz.employmentsite.filter.exception.RespGenerstor;
+import com.hz.employmentsite.model.PcCreditRecord;
+import com.hz.employmentsite.services.service.AccountService;
+import com.hz.employmentsite.services.service.companyService.CreditRecordService;
+import com.hz.employmentsite.vo.companyService.CreditRecordVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.UUID;
+
+@RestController
+@RequestMapping("/api/companyService/creditRecord")
+public class CreditRecordController {
+    @Autowired
+    private AccountService accountService;
+
+    @Autowired
+    private CreditRecordService creditRecordService;
+
+    @GetMapping("/getList")
+    public BaseResponse<List<CreditRecordVo>> getListByCompanyID(@RequestParam String companyID){
+        List<CreditRecordVo> result = creditRecordService.getListByCompanyID(companyID);
+        return RespGenerstor.success(result);
+    }
+
+    @GetMapping("/getByID")
+    public BaseResponse<PcCreditRecord> getById(@RequestParam(required = false) String creditRecordID){
+        PcCreditRecord creditRecord = new PcCreditRecord();
+        if (creditRecordID == null || creditRecordID.isBlank()){
+            creditRecord.setCreditRecordID(UUID.randomUUID().toString());
+        } else {
+            creditRecord = creditRecordService.getById(creditRecordID);
+        }
+        return RespGenerstor.success(creditRecord);
+    }
+
+    @PostMapping("/save")
+    public BaseResponse<Integer> save(@RequestBody PcCreditRecord data, @RequestParam(required = false) String userId){
+        String loginUserID = userId;
+        try {
+            loginUserID = accountService.getLoginUserID();
+        } catch (Exception e){
+            e.printStackTrace();
+        }
+        return RespGenerstor.success(creditRecordService.save(data,loginUserID));
+    }
+
+    @PostMapping("/delete")
+    public BaseResponse<Integer> delete(@RequestBody List<String> ids){
+        return RespGenerstor.success(creditRecordService.delete(ids));
+    }
+}

+ 1 - 1
src/main/java/com/hz/employmentsite/controller/jobUserManager/HonorController.java

@@ -44,7 +44,7 @@ public class HonorController {
     @GetMapping("/getById")
     public BaseResponse<PcHonor> getById(@RequestParam(required = false) String honorID) {
         PcHonor dataModel = new PcHonor();
-        if (honorID == null || honorID == ""){
+        if (honorID == null || honorID.equals("")){
             dataModel.setHonorID(UUID.randomUUID().toString());
             dataModel.setGetTime(new Date());
         }else{

+ 36 - 0
src/main/java/com/hz/employmentsite/mapper/PcCreditRecordMapper.java

@@ -0,0 +1,36 @@
+package com.hz.employmentsite.mapper;
+
+import com.hz.employmentsite.model.PcCreditRecord;
+import com.hz.employmentsite.model.PcCreditRecordExample;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+
+public interface PcCreditRecordMapper {
+    long countByExample(PcCreditRecordExample example);
+
+    int deleteByExample(PcCreditRecordExample example);
+
+    int deleteByPrimaryKey(String creditRecordID);
+
+    int insert(PcCreditRecord row);
+
+    int insertSelective(PcCreditRecord row);
+
+    List<PcCreditRecord> selectByExampleWithBLOBs(PcCreditRecordExample example);
+
+    List<PcCreditRecord> selectByExample(PcCreditRecordExample example);
+
+    PcCreditRecord selectByPrimaryKey(String creditRecordID);
+
+    int updateByExampleSelective(@Param("row") PcCreditRecord row, @Param("example") PcCreditRecordExample example);
+
+    int updateByExampleWithBLOBs(@Param("row") PcCreditRecord row, @Param("example") PcCreditRecordExample example);
+
+    int updateByExample(@Param("row") PcCreditRecord row, @Param("example") PcCreditRecordExample example);
+
+    int updateByPrimaryKeySelective(PcCreditRecord row);
+
+    int updateByPrimaryKeyWithBLOBs(PcCreditRecord row);
+
+    int updateByPrimaryKey(PcCreditRecord row);
+}

+ 14 - 0
src/main/java/com/hz/employmentsite/mapper/cquery/CreditRecordCQuery.java

@@ -0,0 +1,14 @@
+package com.hz.employmentsite.mapper.cquery;
+
+import com.hz.employmentsite.model.PcCreditRecord;
+import com.hz.employmentsite.vo.companyService.CreditRecordVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CreditRecordCQuery {
+    List<CreditRecordVo> getListByCompanyID(@Param("companyID") String companyID);
+
+    PcCreditRecord getById(@Param("creditRecordID") String creditRecordID);
+
+}

+ 155 - 0
src/main/java/com/hz/employmentsite/model/PcCreditRecord.java

@@ -0,0 +1,155 @@
+package com.hz.employmentsite.model;
+
+import java.util.Date;
+
+public class PcCreditRecord {
+    private String creditRecordID;
+
+    private String companyID;
+
+    private Date enterTime;
+
+    private Date includeTime;
+
+    private Date expirationTime;
+
+    private String documentNumber;
+
+    private String decidingDepartment;
+
+    private String source;
+
+    private Integer isEffective;
+
+    private Integer departmentTypeID;
+
+    private String createUserID;
+
+    private Date createTime;
+
+    private String modifyUserID;
+
+    private Date modifyTime;
+
+    private String creditRecordContent;
+
+    public String getCreditRecordID() {
+        return creditRecordID;
+    }
+
+    public void setCreditRecordID(String creditRecordID) {
+        this.creditRecordID = creditRecordID == null ? null : creditRecordID.trim();
+    }
+
+    public String getCompanyID() {
+        return companyID;
+    }
+
+    public void setCompanyID(String companyID) {
+        this.companyID = companyID == null ? null : companyID.trim();
+    }
+
+    public Date getEnterTime() {
+        return enterTime;
+    }
+
+    public void setEnterTime(Date enterTime) {
+        this.enterTime = enterTime;
+    }
+
+    public String getDocumentNumber() {
+        return documentNumber;
+    }
+
+    public void setDocumentNumber(String documentNumber) {
+        this.documentNumber = documentNumber == null ? null : documentNumber.trim();
+    }
+
+    public Date getIncludeTime() {
+        return includeTime;
+    }
+
+    public void setIncludeTime(Date includeTime) {
+        this.includeTime = includeTime;
+    }
+
+    public Date getExpirationTime() {
+        return expirationTime;
+    }
+
+    public void setExpirationTime(Date expirationTime) {
+        this.expirationTime = expirationTime;
+    }
+
+    public String getDecidingDepartment() {
+        return decidingDepartment;
+    }
+
+    public void setDecidingDepartment(String decidingDepartment) {
+        this.decidingDepartment = decidingDepartment == null ? null : decidingDepartment.trim();
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source == null ? null : source.trim();
+    }
+
+    public Integer getIsEffective() {
+        return isEffective;
+    }
+
+    public void setIsEffective(Integer isEffective) {
+        this.isEffective = isEffective;
+    }
+
+    public Integer getDepartmentTypeID() {
+        return departmentTypeID;
+    }
+
+    public void setDepartmentTypeID(Integer departmentTypeID) {
+        this.departmentTypeID = departmentTypeID;
+    }
+
+    public String getCreateUserID() {
+        return createUserID;
+    }
+
+    public void setCreateUserID(String createUserID) {
+        this.createUserID = createUserID == null ? null : createUserID.trim();
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getModifyUserID() {
+        return modifyUserID;
+    }
+
+    public void setModifyUserID(String modifyUserID) {
+        this.modifyUserID = modifyUserID == null ? null : modifyUserID.trim();
+    }
+
+    public Date getModifyTime() {
+        return modifyTime;
+    }
+
+    public void setModifyTime(Date modifyTime) {
+        this.modifyTime = modifyTime;
+    }
+
+    public String getCreditRecordContent() {
+        return creditRecordContent;
+    }
+
+    public void setCreditRecordContent(String creditRecordContent) {
+        this.creditRecordContent = creditRecordContent == null ? null : creditRecordContent.trim();
+    }
+}

File diff suppressed because it is too large
+ 1110 - 0
src/main/java/com/hz/employmentsite/model/PcCreditRecordExample.java


+ 18 - 0
src/main/java/com/hz/employmentsite/services/impl/companyService/CompanyServiceImpl.java

@@ -84,6 +84,8 @@ public class CompanyServiceImpl implements CompanyService {
     private AccountService accountService;
     @Autowired
     private SysLogMapper sysLogMapper;
+    @Autowired
+    private PcCreditRecordMapper pcCreditRecordMapper;
 
     @Override
     public PageInfo<CompanyVo> getList(Integer pageIndex, Integer pageSize,
@@ -182,6 +184,22 @@ public class CompanyServiceImpl implements CompanyService {
 
     @Override
     public Integer save(CompanyVo data, String userId) {
+        Integer result = baseSave(data, userId);
+        PcCreditRecordExample creEmp = new PcCreditRecordExample();
+        creEmp.or().andCompanyIDEqualTo(data.getCompanyID());
+        pcCreditRecordMapper.deleteByExample(creEmp);
+        if (data.creditRecordList != null && !data.creditRecordList.isEmpty()) {
+            data.creditRecordList.forEach(creditRecord -> {
+                creditRecord.setCreditRecordID(UUID.randomUUID().toString());
+                creditRecord.setCompanyID(data.getCompanyID());
+                pcCreditRecordMapper.insert(creditRecord);
+            });
+        }
+        return result;
+    }
+
+    @Override
+    public Integer baseSave(CompanyVo data, String userId) {
         Integer result = 0;
         Boolean isExist = data.getCompanyID() != null;
         PcCompanyWithBLOBs dbData = null;

+ 66 - 0
src/main/java/com/hz/employmentsite/services/impl/companyService/CreditRecordServiceImpl.java

@@ -0,0 +1,66 @@
+package com.hz.employmentsite.services.impl.companyService;
+
+import com.hz.employmentsite.mapper.PcCreditRecordMapper;
+import com.hz.employmentsite.mapper.cquery.CreditRecordCQuery;
+import com.hz.employmentsite.model.PcCreditRecord;
+import com.hz.employmentsite.model.PcCreditRecordExample;
+import com.hz.employmentsite.services.service.companyService.CreditRecordService;
+import com.hz.employmentsite.util.StringUtils;
+import com.hz.employmentsite.vo.companyService.CreditRecordVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+@Service("CreditRecordService")
+public class CreditRecordServiceImpl implements CreditRecordService {
+    @Autowired
+    private CreditRecordCQuery creditRecordCQuery;
+
+    @Autowired
+    private PcCreditRecordMapper pcCreditRecordMapper;
+
+    @Autowired
+    private StringUtils stringUtils;
+
+    @Override
+    public List<CreditRecordVo> getListByCompanyID(String companyID) {
+        return creditRecordCQuery.getListByCompanyID(companyID);
+    }
+
+    @Override
+    public PcCreditRecord getById(String creditRecordID) {
+        if (stringUtils.IsNullOrEmpty(creditRecordID)) {
+            return null;
+        }
+        return creditRecordCQuery.getById(creditRecordID);
+    }
+
+    @Override
+    public Integer save(PcCreditRecord data, String userId) {
+        PcCreditRecord creditRecord = pcCreditRecordMapper.selectByPrimaryKey(data.getCreditRecordID());
+
+        if (creditRecord == null){
+            // 添加
+            data.setCreditRecordID(UUID.randomUUID().toString());
+            data.setCreateUserID(userId);
+            data.setCreateTime(new Date());
+            return pcCreditRecordMapper.insert(data);
+        } else {
+            // 修改
+            data.setModifyUserID(userId);
+            data.setModifyTime(new Date());
+            return pcCreditRecordMapper.updateByPrimaryKey(data);
+        }
+    }
+
+    @Override
+    public int delete(List<String> ids) {
+        PcCreditRecordExample example = new PcCreditRecordExample();
+        PcCreditRecordExample.Criteria criteria = example.or();
+        criteria.andCreditRecordIDIn(ids);
+        return pcCreditRecordMapper.deleteByExample(example);
+    }
+}

+ 3 - 3
src/main/java/com/hz/employmentsite/services/impl/jobUserManager/HonorServiceImpl.java

@@ -42,11 +42,11 @@ public class HonorServiceImpl implements HonorService {
     }
 
     @Override
-    public PcHonor getById(String educationID) {
-        if (stringUtils.IsNullOrEmpty(educationID)) {
+    public PcHonor getById(String honorID) {
+        if (stringUtils.IsNullOrEmpty(honorID)) {
             return null;
         }
-        PcHonor data = honorCQuery.getById(educationID);
+        PcHonor data = honorCQuery.getById(honorID);
         return data;
     }
 

+ 2 - 0
src/main/java/com/hz/employmentsite/services/service/companyService/CompanyService.java

@@ -28,6 +28,8 @@ public interface CompanyService {
 
     Integer save(CompanyVo data, String userId);
 
+    Integer baseSave(CompanyVo data, String userId);
+
     Integer delete(HttpServletRequest request, List<String> id);
 
     CompanyVo getDataById(String id,boolean isAllCompany);

+ 16 - 0
src/main/java/com/hz/employmentsite/services/service/companyService/CreditRecordService.java

@@ -0,0 +1,16 @@
+package com.hz.employmentsite.services.service.companyService;
+
+import com.hz.employmentsite.model.PcCreditRecord;
+import com.hz.employmentsite.vo.companyService.CreditRecordVo;
+
+import java.util.List;
+
+public interface CreditRecordService {
+    List<CreditRecordVo> getListByCompanyID(String companyID);
+
+    PcCreditRecord getById(String creditRecordID);
+
+    Integer save(PcCreditRecord data, String userId);
+
+    int delete(List<String> ids);
+}

+ 1 - 1
src/main/java/com/hz/employmentsite/services/service/jobUserManager/HonorService.java

@@ -11,7 +11,7 @@ public interface HonorService {
 
     List<PcHonor> getListByJobUserID(String jobUserID);
 
-    PcHonor getById(String educationID);
+    PcHonor getById(String honorID);
 
     Integer save(PcHonor data, String userId);
 

+ 3 - 0
src/main/java/com/hz/employmentsite/vo/companyService/CompanyVo.java

@@ -1,5 +1,6 @@
 package com.hz.employmentsite.vo.companyService;
 
+import com.hz.employmentsite.model.PcCreditRecord;
 import com.hz.employmentsite.util.datarange.annotations.CompanyID;
 import com.hz.employmentsite.util.datarange.annotations.InstitutionID;
 import com.hz.employmentsite.util.datarange.annotations.RegionID;
@@ -116,6 +117,8 @@ public class CompanyVo {
 
     public List<LabelVo> listLabel;
 
+    public List<PcCreditRecord> creditRecordList;
+
     // JSON列表数据
     public String labelList;
     public String postList;

+ 9 - 0
src/main/java/com/hz/employmentsite/vo/companyService/CreditRecordVo.java

@@ -0,0 +1,9 @@
+package com.hz.employmentsite.vo.companyService;
+
+import com.hz.employmentsite.model.PcCreditRecord;
+import lombok.Data;
+
+@Data
+public class CreditRecordVo extends PcCreditRecord {
+    public String departmentTypeName;
+}

+ 1 - 1
src/main/resources/generatorConfig.xml

@@ -110,7 +110,7 @@
 <!--        <table schema="" tableName="pc_education"><property name="useActualColumnNames" value="true"/></table>-->
         <!--<table schema="" tableName="wx_qrcode"><property name="useActualColumnNames" value="true"/></table>
         <table schema="" tableName="wx_qrcode_scan_record"><property name="useActualColumnNames" value="true"/></table>-->
-
+        <table schema="" tableName="pc_credit_record"><property name="useActualColumnNames" value="true"/></table>
 
     </context>
 </generatorConfiguration>

+ 431 - 0
src/main/resources/mapping/PcCreditRecordMapper.xml

@@ -0,0 +1,431 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.hz.employmentsite.mapper.PcCreditRecordMapper">
+  <resultMap id="BaseResultMap" type="com.hz.employmentsite.model.PcCreditRecord">
+    <id column="CreditRecordID" jdbcType="VARCHAR" property="creditRecordID" />
+    <result column="CompanyID" jdbcType="VARCHAR" property="companyID" />
+    <result column="EnterTime" jdbcType="TIMESTAMP" property="enterTime" />
+    <result column="DocumentNumber" jdbcType="VARCHAR" property="documentNumber" />
+    <result column="IncludeTime" jdbcType="TIMESTAMP" property="includeTime" />
+    <result column="ExpirationTime" jdbcType="TIMESTAMP" property="expirationTime" />
+    <result column="DecidingDepartment" jdbcType="VARCHAR" property="decidingDepartment" />
+    <result column="Source" jdbcType="VARCHAR" property="source" />
+    <result column="IsEffective" jdbcType="INTEGER" property="isEffective" />
+    <result column="DepartmentTypeID" jdbcType="INTEGER" property="departmentTypeID" />
+    <result column="CreateUserID" jdbcType="VARCHAR" property="createUserID" />
+    <result column="CreateTime" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="ModifyUserID" jdbcType="VARCHAR" property="modifyUserID" />
+    <result column="ModifyTime" jdbcType="TIMESTAMP" property="modifyTime" />
+  </resultMap>
+  <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.hz.employmentsite.model.PcCreditRecord">
+    <result column="CreditRecordContent" jdbcType="LONGVARCHAR" property="creditRecordContent" />
+  </resultMap>
+  <sql id="Example_Where_Clause">
+    <where>
+      <foreach collection="oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Update_By_Example_Where_Clause">
+    <where>
+      <foreach collection="example.oredCriteria" item="criteria" separator="or">
+        <if test="criteria.valid">
+          <trim prefix="(" prefixOverrides="and" suffix=")">
+            <foreach collection="criteria.criteria" item="criterion">
+              <choose>
+                <when test="criterion.noValue">
+                  and ${criterion.condition}
+                </when>
+                <when test="criterion.singleValue">
+                  and ${criterion.condition} #{criterion.value}
+                </when>
+                <when test="criterion.betweenValue">
+                  and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
+                </when>
+                <when test="criterion.listValue">
+                  and ${criterion.condition}
+                  <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
+                    #{listItem}
+                  </foreach>
+                </when>
+              </choose>
+            </foreach>
+          </trim>
+        </if>
+      </foreach>
+    </where>
+  </sql>
+  <sql id="Base_Column_List">
+    CreditRecordID, CompanyID, EnterTime, DocumentNumber, IncludeTime, ExpirationTime, 
+    DecidingDepartment, Source, IsEffective, DepartmentTypeID, CreateUserID, CreateTime, 
+    ModifyUserID, ModifyTime
+  </sql>
+  <sql id="Blob_Column_List">
+    CreditRecordContent
+  </sql>
+  <select id="selectByExampleWithBLOBs" parameterType="com.hz.employmentsite.model.PcCreditRecordExample" resultMap="ResultMapWithBLOBs">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from pc_credit_record
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByExample" parameterType="com.hz.employmentsite.model.PcCreditRecordExample" resultMap="BaseResultMap">
+    select
+    <if test="distinct">
+      distinct
+    </if>
+    <include refid="Base_Column_List" />
+    from pc_credit_record
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+    <if test="orderByClause != null">
+      order by ${orderByClause}
+    </if>
+  </select>
+  <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="ResultMapWithBLOBs">
+    select 
+    <include refid="Base_Column_List" />
+    ,
+    <include refid="Blob_Column_List" />
+    from pc_credit_record
+    where CreditRecordID = #{creditRecordID,jdbcType=VARCHAR}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    delete from pc_credit_record
+    where CreditRecordID = #{creditRecordID,jdbcType=VARCHAR}
+  </delete>
+  <delete id="deleteByExample" parameterType="com.hz.employmentsite.model.PcCreditRecordExample">
+    delete from pc_credit_record
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </delete>
+  <insert id="insert" parameterType="com.hz.employmentsite.model.PcCreditRecord">
+    insert into pc_credit_record (CreditRecordID, CompanyID, EnterTime, 
+      DocumentNumber, IncludeTime, ExpirationTime, 
+      DecidingDepartment, Source, IsEffective, 
+      DepartmentTypeID, CreateUserID, CreateTime, 
+      ModifyUserID, ModifyTime, CreditRecordContent
+      )
+    values (#{creditRecordID,jdbcType=VARCHAR}, #{companyID,jdbcType=VARCHAR}, #{enterTime,jdbcType=TIMESTAMP}, 
+      #{documentNumber,jdbcType=VARCHAR}, #{includeTime,jdbcType=TIMESTAMP}, #{expirationTime,jdbcType=TIMESTAMP}, 
+      #{decidingDepartment,jdbcType=VARCHAR}, #{source,jdbcType=VARCHAR}, #{isEffective,jdbcType=INTEGER}, 
+      #{departmentTypeID,jdbcType=INTEGER}, #{createUserID,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, 
+      #{modifyUserID,jdbcType=VARCHAR}, #{modifyTime,jdbcType=TIMESTAMP}, #{creditRecordContent,jdbcType=LONGVARCHAR}
+      )
+  </insert>
+  <insert id="insertSelective" parameterType="com.hz.employmentsite.model.PcCreditRecord">
+    insert into pc_credit_record
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="creditRecordID != null">
+        CreditRecordID,
+      </if>
+      <if test="companyID != null">
+        CompanyID,
+      </if>
+      <if test="enterTime != null">
+        EnterTime,
+      </if>
+      <if test="documentNumber != null">
+        DocumentNumber,
+      </if>
+      <if test="includeTime != null">
+        IncludeTime,
+      </if>
+      <if test="expirationTime != null">
+        ExpirationTime,
+      </if>
+      <if test="decidingDepartment != null">
+        DecidingDepartment,
+      </if>
+      <if test="source != null">
+        Source,
+      </if>
+      <if test="isEffective != null">
+        IsEffective,
+      </if>
+      <if test="departmentTypeID != null">
+        DepartmentTypeID,
+      </if>
+      <if test="createUserID != null">
+        CreateUserID,
+      </if>
+      <if test="createTime != null">
+        CreateTime,
+      </if>
+      <if test="modifyUserID != null">
+        ModifyUserID,
+      </if>
+      <if test="modifyTime != null">
+        ModifyTime,
+      </if>
+      <if test="creditRecordContent != null">
+        CreditRecordContent,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="creditRecordID != null">
+        #{creditRecordID,jdbcType=VARCHAR},
+      </if>
+      <if test="companyID != null">
+        #{companyID,jdbcType=VARCHAR},
+      </if>
+      <if test="enterTime != null">
+        #{enterTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="documentNumber != null">
+        #{documentNumber,jdbcType=VARCHAR},
+      </if>
+      <if test="includeTime != null">
+        #{includeTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="expirationTime != null">
+        #{expirationTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="decidingDepartment != null">
+        #{decidingDepartment,jdbcType=VARCHAR},
+      </if>
+      <if test="source != null">
+        #{source,jdbcType=VARCHAR},
+      </if>
+      <if test="isEffective != null">
+        #{isEffective,jdbcType=INTEGER},
+      </if>
+      <if test="departmentTypeID != null">
+        #{departmentTypeID,jdbcType=INTEGER},
+      </if>
+      <if test="createUserID != null">
+        #{createUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifyUserID != null">
+        #{modifyUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="modifyTime != null">
+        #{modifyTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="creditRecordContent != null">
+        #{creditRecordContent,jdbcType=LONGVARCHAR},
+      </if>
+    </trim>
+  </insert>
+  <select id="countByExample" parameterType="com.hz.employmentsite.model.PcCreditRecordExample" resultType="java.lang.Long">
+    select count(*) from pc_credit_record
+    <if test="_parameter != null">
+      <include refid="Example_Where_Clause" />
+    </if>
+  </select>
+  <update id="updateByExampleSelective" parameterType="map">
+    update pc_credit_record
+    <set>
+      <if test="row.creditRecordID != null">
+        CreditRecordID = #{row.creditRecordID,jdbcType=VARCHAR},
+      </if>
+      <if test="row.companyID != null">
+        CompanyID = #{row.companyID,jdbcType=VARCHAR},
+      </if>
+      <if test="row.enterTime != null">
+        EnterTime = #{row.enterTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="row.documentNumber != null">
+        DocumentNumber = #{row.documentNumber,jdbcType=VARCHAR},
+      </if>
+      <if test="row.includeTime != null">
+        IncludeTime = #{row.includeTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="row.expirationTime != null">
+        ExpirationTime = #{row.expirationTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="row.decidingDepartment != null">
+        DecidingDepartment = #{row.decidingDepartment,jdbcType=VARCHAR},
+      </if>
+      <if test="row.source != null">
+        Source = #{row.source,jdbcType=VARCHAR},
+      </if>
+      <if test="row.isEffective != null">
+        IsEffective = #{row.isEffective,jdbcType=INTEGER},
+      </if>
+      <if test="row.departmentTypeID != null">
+        DepartmentTypeID = #{row.departmentTypeID,jdbcType=INTEGER},
+      </if>
+      <if test="row.createUserID != null">
+        CreateUserID = #{row.createUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="row.createTime != null">
+        CreateTime = #{row.createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="row.modifyUserID != null">
+        ModifyUserID = #{row.modifyUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="row.modifyTime != null">
+        ModifyTime = #{row.modifyTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="row.creditRecordContent != null">
+        CreditRecordContent = #{row.creditRecordContent,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExampleWithBLOBs" parameterType="map">
+    update pc_credit_record
+    set CreditRecordID = #{row.creditRecordID,jdbcType=VARCHAR},
+      CompanyID = #{row.companyID,jdbcType=VARCHAR},
+      EnterTime = #{row.enterTime,jdbcType=TIMESTAMP},
+      DocumentNumber = #{row.documentNumber,jdbcType=VARCHAR},
+      IncludeTime = #{row.includeTime,jdbcType=TIMESTAMP},
+      ExpirationTime = #{row.expirationTime,jdbcType=TIMESTAMP},
+      DecidingDepartment = #{row.decidingDepartment,jdbcType=VARCHAR},
+      Source = #{row.source,jdbcType=VARCHAR},
+      IsEffective = #{row.isEffective,jdbcType=INTEGER},
+      DepartmentTypeID = #{row.departmentTypeID,jdbcType=INTEGER},
+      CreateUserID = #{row.createUserID,jdbcType=VARCHAR},
+      CreateTime = #{row.createTime,jdbcType=TIMESTAMP},
+      ModifyUserID = #{row.modifyUserID,jdbcType=VARCHAR},
+      ModifyTime = #{row.modifyTime,jdbcType=TIMESTAMP},
+      CreditRecordContent = #{row.creditRecordContent,jdbcType=LONGVARCHAR}
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByExample" parameterType="map">
+    update pc_credit_record
+    set CreditRecordID = #{row.creditRecordID,jdbcType=VARCHAR},
+      CompanyID = #{row.companyID,jdbcType=VARCHAR},
+      EnterTime = #{row.enterTime,jdbcType=TIMESTAMP},
+      DocumentNumber = #{row.documentNumber,jdbcType=VARCHAR},
+      IncludeTime = #{row.includeTime,jdbcType=TIMESTAMP},
+      ExpirationTime = #{row.expirationTime,jdbcType=TIMESTAMP},
+      DecidingDepartment = #{row.decidingDepartment,jdbcType=VARCHAR},
+      Source = #{row.source,jdbcType=VARCHAR},
+      IsEffective = #{row.isEffective,jdbcType=INTEGER},
+      DepartmentTypeID = #{row.departmentTypeID,jdbcType=INTEGER},
+      CreateUserID = #{row.createUserID,jdbcType=VARCHAR},
+      CreateTime = #{row.createTime,jdbcType=TIMESTAMP},
+      ModifyUserID = #{row.modifyUserID,jdbcType=VARCHAR},
+      ModifyTime = #{row.modifyTime,jdbcType=TIMESTAMP}
+    <if test="example != null">
+      <include refid="Update_By_Example_Where_Clause" />
+    </if>
+  </update>
+  <update id="updateByPrimaryKeySelective" parameterType="com.hz.employmentsite.model.PcCreditRecord">
+    update pc_credit_record
+    <set>
+      <if test="companyID != null">
+        CompanyID = #{companyID,jdbcType=VARCHAR},
+      </if>
+      <if test="enterTime != null">
+        EnterTime = #{enterTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="documentNumber != null">
+        DocumentNumber = #{documentNumber,jdbcType=VARCHAR},
+      </if>
+      <if test="includeTime != null">
+        IncludeTime = #{includeTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="expirationTime != null">
+        ExpirationTime = #{expirationTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="decidingDepartment != null">
+        DecidingDepartment = #{decidingDepartment,jdbcType=VARCHAR},
+      </if>
+      <if test="source != null">
+        Source = #{source,jdbcType=VARCHAR},
+      </if>
+      <if test="isEffective != null">
+        IsEffective = #{isEffective,jdbcType=INTEGER},
+      </if>
+      <if test="departmentTypeID != null">
+        DepartmentTypeID = #{departmentTypeID,jdbcType=INTEGER},
+      </if>
+      <if test="createUserID != null">
+        CreateUserID = #{createUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        CreateTime = #{createTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="modifyUserID != null">
+        ModifyUserID = #{modifyUserID,jdbcType=VARCHAR},
+      </if>
+      <if test="modifyTime != null">
+        ModifyTime = #{modifyTime,jdbcType=TIMESTAMP},
+      </if>
+      <if test="creditRecordContent != null">
+        CreditRecordContent = #{creditRecordContent,jdbcType=LONGVARCHAR},
+      </if>
+    </set>
+    where CreditRecordID = #{creditRecordID,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.hz.employmentsite.model.PcCreditRecord">
+    update pc_credit_record
+    set CompanyID = #{companyID,jdbcType=VARCHAR},
+      EnterTime = #{enterTime,jdbcType=TIMESTAMP},
+      DocumentNumber = #{documentNumber,jdbcType=VARCHAR},
+      IncludeTime = #{includeTime,jdbcType=TIMESTAMP},
+      ExpirationTime = #{expirationTime,jdbcType=TIMESTAMP},
+      DecidingDepartment = #{decidingDepartment,jdbcType=VARCHAR},
+      Source = #{source,jdbcType=VARCHAR},
+      IsEffective = #{isEffective,jdbcType=INTEGER},
+      DepartmentTypeID = #{departmentTypeID,jdbcType=INTEGER},
+      CreateUserID = #{createUserID,jdbcType=VARCHAR},
+      CreateTime = #{createTime,jdbcType=TIMESTAMP},
+      ModifyUserID = #{modifyUserID,jdbcType=VARCHAR},
+      ModifyTime = #{modifyTime,jdbcType=TIMESTAMP},
+      CreditRecordContent = #{creditRecordContent,jdbcType=LONGVARCHAR}
+    where CreditRecordID = #{creditRecordID,jdbcType=VARCHAR}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="com.hz.employmentsite.model.PcCreditRecord">
+    update pc_credit_record
+    set CompanyID = #{companyID,jdbcType=VARCHAR},
+      EnterTime = #{enterTime,jdbcType=TIMESTAMP},
+      DocumentNumber = #{documentNumber,jdbcType=VARCHAR},
+      IncludeTime = #{includeTime,jdbcType=TIMESTAMP},
+      ExpirationTime = #{expirationTime,jdbcType=TIMESTAMP},
+      DecidingDepartment = #{decidingDepartment,jdbcType=VARCHAR},
+      Source = #{source,jdbcType=VARCHAR},
+      IsEffective = #{isEffective,jdbcType=INTEGER},
+      DepartmentTypeID = #{departmentTypeID,jdbcType=INTEGER},
+      CreateUserID = #{createUserID,jdbcType=VARCHAR},
+      CreateTime = #{createTime,jdbcType=TIMESTAMP},
+      ModifyUserID = #{modifyUserID,jdbcType=VARCHAR},
+      ModifyTime = #{modifyTime,jdbcType=TIMESTAMP}
+    where CreditRecordID = #{creditRecordID,jdbcType=VARCHAR}
+  </update>
+</mapper>

+ 23 - 0
src/main/resources/mapping/cquery/CreditRecordCQuery.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.hz.employmentsite.mapper.cquery.CreditRecordCQuery">
+    <select id="getListByCompanyID" resultType="com.hz.employmentsite.vo.companyService.CreditRecordVo">
+        SELECT
+            credit.*,
+            department.`Name` AS departmentTypeName
+        FROM
+            pc_credit_record credit
+            LEFT JOIN sys_dictionary_item department ON credit.DepartmentTypeID = department.`Value` AND department.DictionaryCode = 'CreditRecordDepartment'
+        where 1=1
+            <if test="companyID != null and companyID != ''">
+                and companyID = #{companyID}
+            </if>
+        order by EnterTime desc, ExpirationTime desc
+    </select>
+    <select id="getById" resultType="com.hz.employmentsite.model.PcCreditRecord">
+        select * from pc_credit_record where 1=1
+        <if test="creditRecordID != null and creditRecordID != ''">
+            and creditRecordID = #{creditRecordID}
+        </if>
+    </select>
+</mapper>

+ 52 - 0
vue/src/api/companyService/creditRecord.ts

@@ -0,0 +1,52 @@
+import {request} from "@/utils/request";
+
+export function getCreditRecordListByCompanyID(companyID: any) {
+  return request<object>(
+    {
+      url: "companyService/creditRecord/getList",
+      method: 'get',
+      params: {companyID},
+    },
+    {
+      isNew: true,
+    },
+  );
+}
+
+export function getCreditRecordById(creditRecordID: string) {
+  return request({
+    url: 'companyService/creditRecord/getByID',
+    method: 'get',
+    params: {creditRecordID}
+  }, {
+    isNew: true
+  })
+}
+
+export function saveCreditRecord(data: any, userId: string) {
+  return request<object>({
+    url: 'companyService/creditRecord/save',
+    method: 'post',
+    data: data,
+    params: {userId},
+  }, {
+    isNew: true,
+    successMsg: '提交成功!',
+    errorMsg: '提交失败!'
+  })
+}
+
+export function deleteCreditRecord(ids) {
+  return request<object>(
+    {
+      url: 'companyService/creditRecord/delete',
+      method: 'post',
+      data: ids,
+    },
+    {
+      isNew: true,
+      successMsg: '删除成功!',
+      errorMsg: '删除失败!'
+    },
+  );
+}

+ 120 - 1
vue/src/views/companyService/company/detail.vue

@@ -52,6 +52,41 @@
       <a-descriptions-item :span="3" label="经营范围">{{ companyInfo.businScope }}</a-descriptions-item>
       <a-descriptions-item :span="3" label="企业简介">{{ companyInfo.companyDesc }}</a-descriptions-item>
     </a-descriptions>
+    <a-divider orientation="left">信用记录</a-divider>
+    <a-row>
+      <a-col style="margin-bottom: 20px;">
+        <a-table :columns="creditRecordColumns" :data-source="creditRecordData" :pagination="false"
+                 bordered :scroll="{ x: '1500px' }">
+          <template #bodyCell="{ column ,text, record}">
+            <template v-if="column.key === 'enterTime'">
+              <div>
+                {{ dayjs(record.enterTime).format('YYYY-MM-DD') }}
+              </div>
+            </template>
+            <template v-if="column.key === 'includeTime'">
+              <div>
+                {{ dayjs(record.includeTime).format('YYYY-MM-DD') }}
+              </div>
+            </template>
+            <template v-if="column.key === 'expirationTime'">
+              <div>
+                {{ dayjs(record.expirationTime).format('YYYY-MM-DD') }}
+              </div>
+            </template>
+            <template v-if="column.key === 'isEffective'">
+              <div>
+                {{ record.isEffective == 0 ? '是' : '否' }}
+              </div>
+            </template>
+            <template v-if="column.key === 'departmentTypeID'">
+              <div>
+                {{ record.departmentTypeName }}
+              </div>
+            </template>
+          </template>
+        </a-table>
+      </a-col>
+    </a-row>
     <a-divider orientation="left">附件照片</a-divider>
     <b-upload-file :fileRefId="companyInfo.companyID" :readonly="true" :multiple="true" style="width: 100%;"
                    :setFileList="setFileList" :accept="'.pdf,.png,.jpg'"></b-upload-file>
@@ -64,6 +99,8 @@ import {getCompanyById} from "@/api/companyService/company";
 import {onMounted, reactive, ref} from "vue";
 import BUploadFile from "@/components/file/uploadFile.vue";
 import dayjs from "dayjs";
+import type {TableColumnsType} from "ant-design-vue";
+import {getCreditRecordListByCompanyID} from "@/api/companyService/creditRecord";
 
 // 企业信息
 const companyInfo = reactive({
@@ -106,10 +143,85 @@ const companyInfo = reactive({
 })
 // 文件数据
 const fileList = ref();
+const creditRecordColumns: TableColumnsType = [
+  {
+    title: '序号',
+    align: "center",
+    key: 'honorID',
+    width: 80,
+    fixed: 'left',
+    customRender: item => item.index + 1
+  },
+  {
+    title: '录入时间',
+    dataIndex: 'enterTime',
+    key: 'enterTime',
+    align: "center",
+    width: 140
+  },
+  {
+    title: '信用记录内容',
+    align: "center",
+    dataIndex: 'creditRecordContent',
+    key: 'creditRecordContent',
+    width: 180
+  },
+  {
+    title: '做出列入决定部门',
+    align: "center",
+    dataIndex: 'decidingDepartment',
+    key: 'decidingDepartment',
+    width: 180
+  },
+  {
+    title: '决定文书号',
+    align: "center",
+    dataIndex: 'documentNumber',
+    key: 'documentNumber',
+    width: 180
+  },
+  {
+    title: '列入日期',
+    align: "center",
+    dataIndex: 'includeTime',
+    key: 'includeTime',
+    width: 140
+  },
+  {
+    title: '到期日期',
+    align: "center",
+    dataIndex: 'expirationTime',
+    key: 'expirationTime',
+    width: 140
+  },
+  {
+    title: '来源',
+    align: "center",
+    dataIndex: 'source',
+    key: 'source',
+    width: 180
+  },
+  {
+    title: '是否有效',
+    align: "center",
+    dataIndex: 'isEffective',
+    key: 'isEffective',
+    width: 100
+  },
+  {
+    title: '类别',
+    align: "center",
+    dataIndex: 'departmentTypeID',
+    key: 'departmentTypeID',
+    width: 100
+  },
+]
+const creditRecordData = ref<Array<any>>([]);
 
 // 数据加载
 function loadData(id: any) {
-  getCompanyById(id, "").then(result => {
+  findCreditRecord(id);
+  getCompanyById(id, "", true).then(result => {
     Object.keys(companyInfo).forEach(key => {
       companyInfo[key] = result[key]
     })
@@ -121,6 +233,13 @@ function setFileList(files) {
   fileList.value = files;
 };
 
+// 查询信用记录
+function findCreditRecord(companyID: any) {
+  getCreditRecordListByCompanyID(companyID).then((result: any) => {
+    creditRecordData.value = result;
+  })
+}
+
 onMounted(() => {
   const id = history.state.params?.id;
   loadData(id);

+ 196 - 4
vue/src/views/companyService/company/edit.vue

@@ -386,6 +386,102 @@
             </a-button>
         </a-col>
       </a-row>
+      <a-row>
+        <a-col :span="24" style="text-align: right; margin-top: 20px; margin-right: 20px">
+          <Space>
+            <a-button @click="addCreditRecord">
+              <template #icon>
+                <plus-circle-outlined/>
+              </template>
+              新增
+            </a-button>
+          </Space>
+        </a-col>
+      </a-row>
+      <a-divider orientation="left">信用记录</a-divider>
+      <a-row>
+        <a-col style="margin-bottom: 20px;">
+          <a-table :columns="creditRecordColumns" :data-source="creditRecordData" :pagination="false"
+                   bordered :scroll="{ x: '1600px' }">
+            <template #bodyCell="{ column ,index}">
+              <template v-if="column.key === 'enterTime'">
+                <div>
+                  <a-date-picker
+                    v-model:value="creditRecordData[index][column.key]"
+                    picker="date" :allow-clear="false"
+                    value-format="YYYY-MM-DD" style="width: 100%"
+                  />
+                </div>
+              </template>
+              <template v-if="column.key === 'creditRecordContent'">
+                <div>
+                  <a-input v-model:value="creditRecordData[index][column.key]" style="width: 100%"/>
+                </div>
+              </template>
+              <template v-if="column.key === 'decidingDepartment'">
+                <div>
+                  <a-input v-model:value="creditRecordData[index][column.key]" style="width: 100%"/>
+                </div>
+              </template>
+              <template v-if="column.key === 'documentNumber'">
+                <div>
+                  <a-input v-model:value="creditRecordData[index][column.key]" style="width: 100%"/>
+                </div>
+              </template>
+              <template v-if="column.key === 'includeTime'">
+                <div>
+                  <a-date-picker
+                    v-model:value="creditRecordData[index][column.key]"
+                    picker="date" :allow-clear="false"
+                    value-format="YYYY-MM-DD" style="width: 100%"
+                  />
+                </div>
+              </template>
+              <template v-if="column.key === 'expirationTime'">
+                <div>
+                  <a-date-picker
+                    v-model:value="creditRecordData[index][column.key]"
+                    picker="date" :allow-clear="false"
+                    value-format="YYYY-MM-DD" style="width: 100%"
+                  />
+                </div>
+              </template>
+              <template v-if="column.key === 'source'">
+                <div>
+                  <a-input v-model:value="creditRecordData[index][column.key]" style="width: 100%"/>
+                </div>
+              </template>
+              <template v-if="column.key === 'isEffective'">
+                <div>
+                  <a-select
+                    ref="select"
+                    v-model:value="creditRecordData[index][column.key]"
+                    :options="[
+                      {label: '是', value: 0},
+                      {label: '否', value: 1}
+                    ]"
+                    :allow-clear="false" style="width: 100%">
+                  </a-select>
+                </div>
+              </template>
+              <template v-if="column.key === 'departmentTypeID'">
+                <div>
+                  <a-select
+                    ref="select"
+                    v-model:value="creditRecordData[index][column.key]"
+                    :options="creditRecordDepartmentList"
+                    :field-names="{ label: 'name', value: 'value' }"
+                    :allow-clear="false" style="width: 100%">
+                  </a-select>
+                </div>
+              </template>
+              <template v-if="column.key === 'creditRecordOperation'">
+                <a-button type="link" size="small" @click="deleteCreditRecord(index)">删除</a-button>
+              </template>
+            </template>
+          </a-table>
+        </a-col>
+      </a-row>
       <a-divider orientation="left">附件图片上传</a-divider>
       <b-upload-file :fileRefId="dataModel.companyID" :readonly="false" :multiple="true" style="width: 100%;"
                      :setFileList="setFileList" :accept="'.pdf,.png,.jpg'"  ></b-upload-file>
@@ -404,7 +500,7 @@
 import {defineComponent, reactive, ref, toRefs, watch} from 'vue';
 import {useRouter} from 'vue-router';
 import {useTabsViewStore} from '@/store/modules/tabsView';
-import type {FormInstance, SelectProps} from 'ant-design-vue';
+import type {FormInstance, SelectProps, TableColumnsType} from 'ant-design-vue';
 import BUploadFile from '@/components/file/uploadFile.vue';
 import {getRegionCodeList, getStreetCodeList} from "@/api/system/area/index";
 import {
@@ -423,6 +519,7 @@ import {get} from "@/api/common";
 import SelectLabel from "@/views/baseSettings/label/selectLabel.vue";
 import {debounce} from "lodash-es";
 import {getAddressLonLat} from "@/utils/position";
+import {getCreditRecordListByCompanyID} from "@/api/companyService/creditRecord";
 
 interface FormState {
   dataModel: any;
@@ -456,6 +553,7 @@ export default defineComponent(
       const companyStatusList = ref<SelectProps['options']>();
       const registeredCapitalTypeList = ref<SelectProps['options']>();
       const estateCategoryList = ref<SelectProps['options']>();
+      const creditRecordDepartmentList = ref<SelectProps['options']>();
       const shortageStatusList = ref<SelectProps['options']>([
         {value: 1, name: '是'},
         {value: 0, name: '否'},
@@ -465,6 +563,72 @@ export default defineComponent(
       const firmList = ref<Array<any>>([])
       let lastFetchId = 0;
       const firmNameFetching = ref(false)
+      const creditRecordColumns: TableColumnsType = [
+        {
+          title: '序号',
+          align: "center",
+          key: 'honorID',
+          width: 80,
+          fixed: 'left',
+          customRender: item => item.index + 1
+        },
+        {
+          title: '录入时间',
+          dataIndex: 'enterTime',
+          key: 'enterTime',
+          width: 140
+        },
+        {
+          title: '信用记录内容',
+          dataIndex: 'creditRecordContent',
+          key: 'creditRecordContent',
+          width: 180
+        },
+        {
+          title: '做出列入决定部门',
+          dataIndex: 'decidingDepartment',
+          key: 'decidingDepartment',
+          width: 180
+        },
+        {
+          title: '决定文书号',
+          dataIndex: 'documentNumber',
+          key: 'documentNumber',
+          width: 180
+        },
+        {
+          title: '列入日期',
+          dataIndex: 'includeTime',
+          key: 'includeTime',
+          width: 140
+        },
+        {
+          title: '到期日期',
+          dataIndex: 'expirationTime',
+          key: 'expirationTime',
+          width: 140
+        },
+        {
+          title: '来源',
+          dataIndex: 'source',
+          key: 'source',
+          width: 180
+        },
+        {
+          title: '是否有效',
+          dataIndex: 'isEffective',
+          key: 'isEffective',
+          width: 100
+        },
+        {
+          title: '类别',
+          dataIndex: 'departmentTypeID',
+          key: 'departmentTypeID',
+          width: 100
+        },
+        {title: '操作', key: 'creditRecordOperation', fixed: 'right', width: 120, align: "center"},
+      ]
+      const creditRecordData = ref<Array<any>>([]);
 
       watch(formState.dataModel.companyName, () => {
         firmList.value = [];
@@ -534,6 +698,11 @@ export default defineComponent(
         estateCategoryList.value = data;
       }
 
+      const getCreditRecordDepartmentList = async function () {
+        const data: any = await getSysDictionaryList("CreditRecordDepartment");
+        creditRecordDepartmentList.value = data;
+      }
+
       const siteChange = async function () {
         const curSiteData: any = await getSiteByID(formState.dataModel.siteID);
         formState.dataModel.regionCode = curSiteData.regionCode;
@@ -630,6 +799,7 @@ export default defineComponent(
 
         if(isAllowCommit.value){
           formState.dataModel.showIndustryName = null;
+          formState.dataModel.creditRecordList = creditRecordData.value;
           saveCompany(formState.dataModel).then(result => {
             if (result) {
               tabsViewStore.closeCurrentTabByPath('/companyService/enterprise/add');
@@ -741,12 +911,12 @@ export default defineComponent(
         getRegisteredCapitalTypeList();
         getEstateCategoryList();
         getFirstIndustryList();
+        getCreditRecordDepartmentList();
         getInfo().then((loginUserInfo:any)=>{
-          console.log("userInfo",loginUserInfo.userID);
           getCompanyById(id,loginUserInfo.userID,true).then(result => {
+            findCreditRecord(result.companyID);
             formState.dataModel = result;
             formState.dataModel.hasIndustry = true;
-            console.log("curDataModel",formState.dataModel);
             showPicker.value = formState.dataModel.validDate == '2099-12-31T00:00:00.000+08:00' ? '1' : '2';
             if (showPicker.value === '1') {
               showDateTime.value = dayjs(new Date().toLocaleDateString().replaceAll("/", "-"));
@@ -829,6 +999,23 @@ export default defineComponent(
         }
       }
 
+      // 添加信用记录
+      function addCreditRecord() {
+        creditRecordData.value.push({creditRecordContent: "", companyID: formState.dataModel.companyID});
+      }
+
+      // 删除信用记录
+      function deleteCreditRecord(index: any) {
+        creditRecordData.value.splice(index, 1);
+      }
+
+      // 查询信用记录
+      function findCreditRecord(companyID: any) {
+        getCreditRecordListByCompanyID(companyID).then((result: any) => {
+          creditRecordData.value = result;
+        })
+      }
+
       return {
         ...toRefs(formState),
         loadData,
@@ -866,7 +1053,12 @@ export default defineComponent(
         insuredCountChange,
         formatStr,
         formRef,
-        companyAddressChange
+        companyAddressChange,
+        creditRecordColumns,
+        creditRecordData,
+        addCreditRecord,
+        deleteCreditRecord,
+        creditRecordDepartmentList
       }
     },
     mounted() {