Browse Source

Merge branch 'master' of http://git.fmode.cn:3000/bin/edu-textbook

xll 7 months ago
parent
commit
aafb2f657b

+ 1 - 1
docker-front

@@ -1 +1 @@
-Subproject commit f2aa87dcdcbea31ac16b3a7e5a2aa858de9f5aff
+Subproject commit 358be7327229e41502eb135e681309929f34ed72

+ 2 - 1
server/.gitignore

@@ -3,4 +3,5 @@ logs/
 database/
 database/
 bin/
 bin/
 dist/
 dist/
-temp*
+temp*
+!template/

+ 16 - 1
server/cloud/authing/func-authing-org-sync.js

@@ -43,8 +43,12 @@ async function syncOrganizationsFromAuthing(){
             // console.log(departList)
             // console.log(departList)
             console.log(departList?.length)
             console.log(departList?.length)
             // return
             // return
-            let insertRes = await InsertAllDepartment(departList)
+            let insertRes = await InsertAllDepartment(departList);
             console.log(insertRes)
             console.log(insertRes)
+            // 将所有不存在的部门,设置为isDeleted删除状态
+            try{
+                let deleteRes = await UpdateAllDeleteDepartment(departList);
+            }catch(err){}
             return {code:200,count:departList?.length,message:`成功导入${departList?.length}条`}
             return {code:200,count:departList?.length,message:`成功导入${departList?.length}条`}
         }
         }
         
         
@@ -57,6 +61,17 @@ async function syncOrganizationsFromAuthing(){
 }
 }
 module.exports.syncOrganizationsFromAuthing = syncOrganizationsFromAuthing
 module.exports.syncOrganizationsFromAuthing = syncOrganizationsFromAuthing
 
 
+
+async function UpdateAllDeleteDepartment(departList){
+    let existsIdList = departList.map(depart=>depart?.departmentId)
+    existsIdList = existsIdList.filter(item=>item)
+    let sql = `
+    UPDATE "Department" SET "isDeleted" = true
+    WHERE "objectId" <> ALL ($1);
+    `
+    let result = await pgClient().any(sql,[existsIdList]);
+    return result
+}
 async function InsertAllDepartment(departList){
 async function InsertAllDepartment(departList){
     // {
     // {
         //     departmentId: '66868df17adf199d1c77875d',
         //     departmentId: '66868df17adf199d1c77875d',

+ 2 - 1
server/cloud/authing/index.js

@@ -1,3 +1,4 @@
 export * from "./func-authing-session-sync"
 export * from "./func-authing-session-sync"
 export * from "./func-authing-org-sync"
 export * from "./func-authing-org-sync"
-export * from "./trigger-user-save"
+export * from "./trigger-user-save"
+export * from "./trigger-department"

+ 77 - 0
server/cloud/authing/trigger-department.js

@@ -0,0 +1,77 @@
+// https://docs.authing.cn/v3/reference/sdk/node/management/%E7%AE%A1%E7%90%86%E7%BB%84%E7%BB%87%E6%9C%BA%E6%9E%84/update-department.html
+const { ManagementClient,Models } = require('authing-node-sdk')
+const managementClient  = new ManagementClient({
+    accessKeyId: '6699e5bc4767805be9cd1ddc', // 用户池级别AKSK
+    accessKeySecret: "c92f71bda13ac9e2e903410148733514",
+    host: 'https://textbook.u2-dev.hep.com.cn', // 应用的认证地址
+})
+
+/**
+ * @example
+ curl -X POST -H "Content-Type: application/json" -H "X-Parse-Application-Id: edu-textbook" -d '{
+  "name": "测试部门",
+  "organizationCode": 1000000
+}' http://127.0.0.1:61337/parse/classes/Department
+ */
+export function defineDepartmentTrigger(){
+    Parse.Cloud.beforeSave("Department", async (request) => {
+        await syncDepartmentInfo(request,request.object)
+    });
+
+    Parse.Cloud.beforeDelete("Department", async (request) => {
+        let organizationCode = request?.object?.get("organizationCode")
+        if(organizationCode) organizationCode = String(organizationCode)
+        const result = await managementClient.deleteDepartment({
+            // 替换组织 Code 和部门 ID
+            organizationCode: organizationCode,
+            departmentId: request?.object?.id
+        });
+    });
+}
+
+
+async function syncDepartmentInfo(request,depart){
+    let authDepartment = {}
+    if(depart?.id) authDepartment.departmentId = depart?.id
+    if(depart?.get("status")) authDepartment.status = depart?.get("status")
+    if(depart?.get("code")) authDepartment.code = depart?.get("code")
+    if(depart?.get("name")) authDepartment.name = depart?.get("name")
+    if(depart?.get("organizationCode")) authDepartment.organizationCode = String(depart?.get("organizationCode"))
+    if(depart?.get("discription")) authDepartment.discription = depart?.get("discription")
+    let parentDepartmentId = depart?.get("parent")?.id || depart?.get("parent")?.objectId || "root"
+    if(parentDepartmentId) authDepartment.parentDepartmentId = parentDepartmentId
+
+    let result
+    if(depart?.id){ // 修改
+
+    // INSERT INTO "Department" ("objectId", "organizationCode", "name", "description","branch","parent","code","createdAt","updatedAt","status","type","hasChildren")
+
+        // let objectId = depart?.departmentId
+        // if(!depart?.hasChildren){ // 最后一级,类型为单位
+        //     depart.type = "单位"
+        // }
+        // let parentId = depart?.parent?.departmentId // 指针是正常的
+        // let branchName = depart?.branch?.name // 分值为当前单位最上级分支(表示应用下,分支最高级名称)
+
+        // rowData.push([
+        //     // 1-5
+        //     objectId, depart?.organizationCode, depart?.name, depart?.description, branchName,
+        //     // 6-10
+        //     parentId, depart?.code, depart?.createdAt || new Date(), depart?.updatedAt || new Date(), depart?.status,
+        //     // 11
+        //     depart?.type,depart?.hasChildren
+        // ])
+
+        // authDepartment.departmentIdType = Models.UpdateDepartmentReqDto.departmentIdType.DEPARTMENT_ID
+        result = await managementClient.updateDepartment(authDepartment);
+        
+    }else{ // 新建
+        // authDepartment.openDepartmentId = depart?.id
+        // console.log(authDepartment)
+        result = await managementClient.createDepartment(authDepartment);
+        if(result?.statusCode==200){
+            request.object.id = result?.data?.departmentId
+        }
+    }
+    // console.log(result)
+}

+ 13 - 0
server/cloud/tbook/func-tbook-export.js

@@ -0,0 +1,13 @@
+
+const Parse = global.Parse;
+/**
+ * 导出流程教材申报文件
+ */
+async function exportProcessReportDocs(processId) {
+    let query = new Parse.Query("EduTextbook")
+    query.equalTo("eduProcess",processId);
+    let textbookList = await query.find();
+    console.log(textbookList);
+}
+
+module.exports.exportProcessReportDocs = exportProcessReportDocs

BIN
server/cloud/tbook/template/模板-推荐申报表.docx


+ 8 - 0
server/cloud/tbook/test/test-export.js

@@ -0,0 +1,8 @@
+const Parse = require("parse/node");
+Parse.initialize("edu-textbook");
+Parse.serverURL = "http://8.140.98.43/parse";
+global.Parse = Parse;
+
+const { exportProcessReportDocs } = require("../func-tbook-export");
+
+exportProcessReportDocs("Wz34loxdbO")

+ 2 - 1
server/server.js

@@ -44,7 +44,7 @@ global.config["LOCAL"] = argv.local || process.env["LOCAL"] || appConfig["LOCAL"
 
 
 import  {textbookRouter} from "./api/textbook/routes";
 import  {textbookRouter} from "./api/textbook/routes";
 import { defineAliOssSTS } from "./cloud/aliyun"
 import { defineAliOssSTS } from "./cloud/aliyun"
-import { defineAuthingLogin, defineUserAfterDelete, defineUserBeforeSave } from "./cloud/authing"
+import { defineAuthingLogin, defineDepartmentTrigger, defineUserAfterDelete, defineUserBeforeSave } from "./cloud/authing"
 import { defineAuthingDepartSync } from "./cloud/authing"
 import { defineAuthingDepartSync } from "./cloud/authing"
 import { defineUserAfterSave } from "./cloud/authing"
 import { defineUserAfterSave } from "./cloud/authing"
 import { defineTbookISBN } from "./cloud/tbook"
 import { defineTbookISBN } from "./cloud/tbook"
@@ -185,6 +185,7 @@ async function initParseAndDatabase(){
       defineUserAfterSave();
       defineUserAfterSave();
       defineUserBeforeSave();
       defineUserBeforeSave();
       defineUserAfterDelete();
       defineUserAfterDelete();
+      defineDepartmentTrigger();
       defineTbookISBN();
       defineTbookISBN();
     });
     });