فهرست منبع

招聘需求 同步北森第二次调整

qingwu 7 ماه پیش
والد
کامیت
af1ebae0af
18فایلهای تغییر یافته به همراه1117 افزوده شده و 118 حذف شده
  1. 3 3
      metadata/com/kingdee/eas/custom/recuritment/ApplicantBeisen.bizunit
  2. 170 4
      metadata/com/kingdee/eas/custom/recuritment/app/ApplicantBeisen.entity
  3. 94 0
      metadata/com/kingdee/eas/custom/recuritment/app/ApplicantBeisenQuery.query
  4. 75 24
      metadata/com/kingdee/eas/custom/recuritment/app/CT_REC_ApplicantBeisen.table
  5. 332 0
      metadata/com/kingdee/eas/custom/recuritment/client/ApplicantBeisenEditUI.ui
  6. 22 0
      metadata/com/kingdee/eas/custom/recuritment/client/ApplicantBeisenListUI.ui
  7. 22 0
      src/com/kingdee/eas/custom/recuritment/AbstractApplicantBeisenInfo.java
  8. 49 3
      src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI.java
  9. 2 0
      src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI.properties
  10. 2 0
      src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI_l1.properties
  11. 2 0
      src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI_l2.properties
  12. 2 0
      src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI_l3.properties
  13. 0 0
      src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenListUI.java
  14. 0 0
      src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenListUI.properties
  15. 0 0
      src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenListUI_l2.properties
  16. 0 0
      src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenListUI_l3.properties
  17. 331 73
      src/com/kingdee/eas/custom/recuritment/task/RecuritmentFacadeControllerBean.java
  18. 11 11
      src/com/kingdee/eas/custom/recuritment/utils/AttachmentUtils.java

+ 3 - 3
metadata/com/kingdee/eas/custom/recuritment/ApplicantBeisen.bizunit

@@ -101,9 +101,9 @@
       <lang locale="zh_TW" value="com.kingdee.eas.custom.recuritment.client.ApplicantBeisenListUI" />
     </rs>
     <rs key="bizUnit[com.kingdee.eas.custom.recuritment.ApplicantBeisen].extendedProperty.maxFieldIndex">
-      <lang locale="en_US" value="5" />
-      <lang locale="zh_CN" value="5" />
-      <lang locale="zh_TW" value="5" />
+      <lang locale="en_US" value="7" />
+      <lang locale="zh_CN" value="7" />
+      <lang locale="zh_TW" value="7" />
     </rs>
     <rs key="bizUnit[com.kingdee.eas.custom.recuritment.ApplicantBeisen].extendedProperty.userDefined">
       <lang locale="en_US" value="true" />

+ 170 - 4
metadata/com/kingdee/eas/custom/recuritment/app/ApplicantBeisen.entity

@@ -190,7 +190,7 @@
       <isNullable>false</isNullable>
       <formula />
       <length>100</length>
-      <precision>0</precision>
+      <precision>100</precision>
       <decimalDigits>0</decimalDigits>
       <defaultValue>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateId].defaultValue</defaultValue>
       <displayFormat />
@@ -210,7 +210,7 @@
       <isNullable>false</isNullable>
       <formula />
       <length>100</length>
-      <precision>0</precision>
+      <precision>100</precision>
       <decimalDigits>0</decimalDigits>
       <defaultValue>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[applyId].defaultValue</defaultValue>
       <displayFormat />
@@ -244,7 +244,7 @@
       <isNullable>false</isNullable>
       <formula />
       <length>2000</length>
-      <precision>0</precision>
+      <precision>2000</precision>
       <decimalDigits>0</decimalDigits>
       <defaultValue>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[syncResult].defaultValue</defaultValue>
       <displayFormat />
@@ -264,7 +264,7 @@
       <isNullable>false</isNullable>
       <formula />
       <length>80</length>
-      <precision>0</precision>
+      <precision>100</precision>
       <decimalDigits>0</decimalDigits>
       <defaultValue>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[syncStatus].defaultValue</defaultValue>
       <displayFormat />
@@ -272,6 +272,46 @@
         <key name="name" value="CFSyncStatus" />
       </mappingField>
     </ownProperty>
+    <ownProperty>
+      <name>recuritmentName</name>
+      <alias>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].alias</alias>
+      <description>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].description</description>
+      <userDefined>true</userDefined>
+      <configured>false</configured>
+      <dataType>String</dataType>
+      <metadataRef />
+      <isMultilingual>false</isMultilingual>
+      <isNullable>false</isNullable>
+      <formula />
+      <length>100</length>
+      <precision>0</precision>
+      <decimalDigits>0</decimalDigits>
+      <defaultValue>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].defaultValue</defaultValue>
+      <displayFormat />
+      <mappingField>
+        <key name="name" value="CFRecuritmentName" />
+      </mappingField>
+    </ownProperty>
+    <ownProperty>
+      <name>candidateName</name>
+      <alias>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].alias</alias>
+      <description>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].description</description>
+      <userDefined>true</userDefined>
+      <configured>false</configured>
+      <dataType>String</dataType>
+      <metadataRef />
+      <isMultilingual>false</isMultilingual>
+      <isNullable>false</isNullable>
+      <formula />
+      <length>100</length>
+      <precision>0</precision>
+      <decimalDigits>0</decimalDigits>
+      <defaultValue>entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].defaultValue</defaultValue>
+      <displayFormat />
+      <mappingField>
+        <key name="name" value="CFCandidateName" />
+      </mappingField>
+    </ownProperty>
   </properties>
   <logicalKey>
     <name>id</name>
@@ -1073,6 +1113,132 @@
       <lang locale="zh_CN" value="true" />
       <lang locale="zh_TW" value="true" />
     </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].alias">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="应聘者名称" />
+      <lang locale="zh_HK" value="應聘者名稱" />
+      <lang locale="zh_TW" value="應聘者名稱" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].defaultValue">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="null" />
+      <lang locale="zh_HK" value="null" />
+      <lang locale="zh_TW" value="null" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].description">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="应聘者名称" />
+      <lang locale="zh_HK" value="應聘者名稱" />
+      <lang locale="zh_TW" value="應聘者名稱" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].extendedProperty.ColWidthInKDTable">
+      <lang locale="en_US" value="50" />
+      <lang locale="zh_CN" value="50" />
+      <lang locale="zh_TW" value="50" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].extendedProperty.bizDataType">
+      <lang locale="en_US" value="STRING" />
+      <lang locale="zh_CN" value="STRING" />
+      <lang locale="zh_TW" value="STRING" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].extendedProperty.enableFieldPermission">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].extendedProperty.isForGrouping">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].extendedProperty.isForMapping">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].extendedProperty.isForMatching">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].extendedProperty.isForWrittenBack">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].extendedProperty.isInCode">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[candidateName].extendedProperty.isVisibleForKDTable">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].alias">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="需求名称" />
+      <lang locale="zh_HK" value="需求名稱" />
+      <lang locale="zh_TW" value="需求名稱" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].defaultValue">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="null" />
+      <lang locale="zh_HK" value="null" />
+      <lang locale="zh_TW" value="null" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].description">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="需求名称" />
+      <lang locale="zh_HK" value="需求名稱" />
+      <lang locale="zh_TW" value="需求名稱" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].extendedProperty.ColWidthInKDTable">
+      <lang locale="en_US" value="50" />
+      <lang locale="zh_CN" value="50" />
+      <lang locale="zh_TW" value="50" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].extendedProperty.bizDataType">
+      <lang locale="en_US" value="STRING" />
+      <lang locale="zh_CN" value="STRING" />
+      <lang locale="zh_TW" value="STRING" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].extendedProperty.enableFieldPermission">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].extendedProperty.isForGrouping">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].extendedProperty.isForMapping">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].extendedProperty.isForMatching">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].extendedProperty.isForWrittenBack">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].extendedProperty.isInCode">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[recuritmentName].extendedProperty.isVisibleForKDTable">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
     <rs key="entityObject[com.kingdee.eas.custom.recuritment.app.ApplicantBeisen].properties.ownProperty[syncResult].alias">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="同步结果" />

+ 94 - 0
metadata/com/kingdee/eas/custom/recuritment/app/ApplicantBeisenQuery.query

@@ -988,6 +988,68 @@
         <key name="name" value="ApplicantBeisenQuery" />
       </query>
     </queryField>
+    <queryField>
+      <name>recuritmentName</name>
+      <userDefined>true</userDefined>
+      <formulaString>#0</formulaString>
+      <constString />
+      <displayName>joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[recuritmentName].displayName</displayName>
+      <groupType />
+      <isSelector>true</isSelector>
+      <isFilter>true</isFilter>
+      <isSorter>true</isSorter>
+      <isParameter>false</isParameter>
+      <returnType>String</returnType>
+      <propertyRefs>
+        <propertyRef>
+          <key>8980004c-ea57-4135-86cd-811ce0de9504</key>
+          <parentUnit>
+            <key name="name" value="recuritmentName" />
+          </parentUnit>
+          <subEntity>
+            <key name="name" value="ApplicantBeisen" />
+          </subEntity>
+          <refProperty>
+            <key name="name" value="recuritmentName" />
+          </refProperty>
+        </propertyRef>
+      </propertyRefs>
+      <query>
+        <key name="package" value="com.kingdee.eas.custom.recuritment.app" />
+        <key name="name" value="ApplicantBeisenQuery" />
+      </query>
+    </queryField>
+    <queryField>
+      <name>candidateName</name>
+      <userDefined>true</userDefined>
+      <formulaString>#0</formulaString>
+      <constString />
+      <displayName>joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[candidateName].displayName</displayName>
+      <groupType />
+      <isSelector>true</isSelector>
+      <isFilter>true</isFilter>
+      <isSorter>true</isSorter>
+      <isParameter>false</isParameter>
+      <returnType>String</returnType>
+      <propertyRefs>
+        <propertyRef>
+          <key>d0f6202a-3a98-4091-b4a8-3b1f79dce598</key>
+          <parentUnit>
+            <key name="name" value="candidateName" />
+          </parentUnit>
+          <subEntity>
+            <key name="name" value="ApplicantBeisen" />
+          </subEntity>
+          <refProperty>
+            <key name="name" value="candidateName" />
+          </refProperty>
+        </propertyRef>
+      </propertyRefs>
+      <query>
+        <key name="package" value="com.kingdee.eas.custom.recuritment.app" />
+        <key name="name" value="ApplicantBeisenQuery" />
+      </query>
+    </queryField>
   </units>
   <defaultFilter>
     <name>defaultFilter</name>
@@ -1368,6 +1430,22 @@
       <lang locale="zh_CN" value="true" />
       <lang locale="zh_TW" value="true" />
     </rs>
+    <rs key="joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[candidateName].displayName">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="应聘者名称" />
+      <lang locale="zh_HK" value="應聘者名稱" />
+      <lang locale="zh_TW" value="應聘者名稱" />
+    </rs>
+    <rs key="joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[candidateName].extendedProperty.isCommonQueryFilter">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
+    <rs key="joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[candidateName].extendedProperty.isCommonQuerySorter">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
     <rs key="joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[createTime].displayName">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="创建时间" />
@@ -1495,6 +1573,22 @@
       <lang locale="zh_CN" value="true" />
       <lang locale="zh_TW" value="true" />
     </rs>
+    <rs key="joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[recuritmentName].displayName">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="需求名称" />
+      <lang locale="zh_HK" value="需求名稱" />
+      <lang locale="zh_TW" value="需求名稱" />
+    </rs>
+    <rs key="joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[recuritmentName].extendedProperty.isCommonQueryFilter">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
+    <rs key="joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[recuritmentName].extendedProperty.isCommonQuerySorter">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
     <rs key="joinQuery[com.kingdee.eas.custom.recuritment.app.ApplicantBeisenQuery].units.queryField[syncResult].displayName">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="同步结果" />

+ 75 - 24
metadata/com/kingdee/eas/custom/recuritment/app/CT_REC_ApplicantBeisen.table

@@ -5,7 +5,7 @@
   <alias>dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].alias</alias>
   <description>dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].description</description>
   <userDefined>true</userDefined>
-  <bizUnitPK />
+  <bizUnitPK>com.kingdee.eas.custom.recuritment.ApplicantBeisen</bizUnitPK>
   <columns>
     <column>
       <name>CFCandidateId</name>
@@ -343,6 +343,34 @@
       <scale>0</scale>
       <precision>44</precision>
     </column>
+    <column>
+      <name>CFRecuritmentName</name>
+      <alias>dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFRecuritmentName].alias</alias>
+      <description>dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFRecuritmentName].description</description>
+      <userDefined>true</userDefined>
+      <isMultilingual>false</isMultilingual>
+      <isEncoded>false</isEncoded>
+      <isNullable>true</isNullable>
+      <defaultValue />
+      <sqlType>NVARCHAR</sqlType>
+      <length>100</length>
+      <scale>0</scale>
+      <precision>0</precision>
+    </column>
+    <column>
+      <name>CFCandidateName</name>
+      <alias>dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFCandidateName].alias</alias>
+      <description>dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFCandidateName].description</description>
+      <userDefined>true</userDefined>
+      <isMultilingual>false</isMultilingual>
+      <isEncoded>false</isEncoded>
+      <isNullable>true</isNullable>
+      <defaultValue />
+      <sqlType>NVARCHAR</sqlType>
+      <length>100</length>
+      <scale>0</scale>
+      <precision>0</precision>
+    </column>
   </columns>
   <primaryKey>
     <name>PK_ApplicantBeisen</name>
@@ -542,6 +570,18 @@
       <lang locale="zh_HK" value="應聘者id" />
       <lang locale="zh_TW" value="應聘者id" />
     </rs>
+    <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFCandidateName].alias">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="应聘者名称" />
+      <lang locale="zh_HK" value="應聘者名稱" />
+      <lang locale="zh_TW" value="應聘者名稱" />
+    </rs>
+    <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFCandidateName].description">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="应聘者名称" />
+      <lang locale="zh_HK" value="應聘者名稱" />
+      <lang locale="zh_TW" value="應聘者名稱" />
+    </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFRecuritmentID].alias">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="需求管理" />
@@ -554,6 +594,18 @@
       <lang locale="zh_HK" value="需求管理" />
       <lang locale="zh_TW" value="需求管理" />
     </rs>
+    <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFRecuritmentName].alias">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="需求名称" />
+      <lang locale="zh_HK" value="需求名稱" />
+      <lang locale="zh_TW" value="需求名稱" />
+    </rs>
+    <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFRecuritmentName].description">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="需求名称" />
+      <lang locale="zh_HK" value="需求名稱" />
+      <lang locale="zh_TW" value="需求名稱" />
+    </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[CFSyncResult].alias">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="同步结果" />
@@ -580,9 +632,9 @@
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FAdminOrgUnitId].alias">
       <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="null" />
-      <lang locale="zh_HK" value="null" />
-      <lang locale="zh_TW" value="null" />
+      <lang locale="zh_CN" value="行政组织" />
+      <lang locale="zh_HK" value="行政組織" />
+      <lang locale="zh_TW" value="行政組織" />
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FAdminOrgUnitId].description">
       <lang locale="en_US" value="null" />
@@ -602,9 +654,9 @@
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FAuditorID].alias">
       <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="null" />
-      <lang locale="zh_HK" value="null" />
-      <lang locale="zh_TW" value="null" />
+      <lang locale="zh_CN" value="审核人" />
+      <lang locale="zh_HK" value="審核人" />
+      <lang locale="zh_TW" value="審核人" />
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FAuditorID].description">
       <lang locale="en_US" value="null" />
@@ -638,9 +690,9 @@
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FControlUnitID].alias">
       <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="null" />
-      <lang locale="zh_HK" value="null" />
-      <lang locale="zh_TW" value="null" />
+      <lang locale="zh_CN" value="控制单元" />
+      <lang locale="zh_HK" value="控制單元" />
+      <lang locale="zh_TW" value="控制單元" />
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FControlUnitID].description">
       <lang locale="en_US" value="null" />
@@ -662,9 +714,9 @@
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FCreatorID].alias">
       <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="null" />
-      <lang locale="zh_HK" value="null" />
-      <lang locale="zh_TW" value="null" />
+      <lang locale="zh_CN" value="创建者" />
+      <lang locale="zh_HK" value="創建者" />
+      <lang locale="zh_TW" value="創建者" />
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FCreatorID].description">
       <lang locale="en_US" value="null" />
@@ -686,21 +738,20 @@
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FHROrgUnitID].alias">
       <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="null" />
-      <lang locale="zh_HK" value="null" />
-      <lang locale="zh_TW" value="null" />
+      <lang locale="zh_CN" value="HR组织" />
+      <lang locale="zh_HK" value="HR組織" />
+      <lang locale="zh_TW" value="HR組織" />
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FHROrgUnitID].description">
       <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="null" />
-      <lang locale="zh_HK" value="null" />
+      <lang locale="zh_CN" value="" />
       <lang locale="zh_TW" value="null" />
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FHandlerID].alias">
       <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="null" />
-      <lang locale="zh_HK" value="null" />
-      <lang locale="zh_TW" value="null" />
+      <lang locale="zh_CN" value="经手人" />
+      <lang locale="zh_HK" value="經手人" />
+      <lang locale="zh_TW" value="經手人" />
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FHandlerID].description">
       <lang locale="en_US" value="null" />
@@ -757,9 +808,9 @@
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FLastUpdateUserID].alias">
       <lang locale="en_US" value="null" />
-      <lang locale="zh_CN" value="null" />
-      <lang locale="zh_HK" value="null" />
-      <lang locale="zh_TW" value="null" />
+      <lang locale="zh_CN" value="最后修改者" />
+      <lang locale="zh_HK" value="最後修改者" />
+      <lang locale="zh_TW" value="最後修改者" />
     </rs>
     <rs key="dataTable[com.kingdee.eas.custom.recuritment.app.CT_REC_ApplicantBeisen].columns.column[FLastUpdateUserID].description">
       <lang locale="en_US" value="null" />

+ 332 - 0
metadata/com/kingdee/eas/custom/recuritment/client/ApplicantBeisenEditUI.ui

@@ -668,6 +668,104 @@
         <key name="name" value="CoreUI" />
       </parent>
     </component>
+    <component>
+      <name>contrecuritmentName</name>
+      <alias>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].alias</alias>
+      <userDefined>true</userDefined>
+      <classType>com.kingdee.bos.ctrl.swing.KDLabelContainer</classType>
+      <isContainer>true</isContainer>
+      <constraints>0,0,270,19</constraints>
+      <tabIndex>0</tabIndex>
+      <herited>false</herited>
+      <bimUIObjectPK />
+      <layoutInfo>
+        <name />
+        <type>LabelContainerLayout</type>
+        <value />
+      </layoutInfo>
+      <properties>
+        <property>
+          <name>boundLabelText</name>
+          <type>java.lang.String</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].properties.property[boundLabelText].value</value>
+          <isMultiLan>true</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>boundLabelLength</name>
+          <type>int</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].properties.property[boundLabelLength].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>boundLabelUnderline</name>
+          <type>boolean</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].properties.property[boundLabelUnderline].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>visible</name>
+          <type>boolean</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].properties.property[visible].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+      </properties>
+      <parent>
+        <key name="name" value="CoreUI" />
+      </parent>
+    </component>
+    <component>
+      <name>contcandidateName</name>
+      <alias>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].alias</alias>
+      <userDefined>true</userDefined>
+      <classType>com.kingdee.bos.ctrl.swing.KDLabelContainer</classType>
+      <isContainer>true</isContainer>
+      <constraints>0,0,270,19</constraints>
+      <tabIndex>0</tabIndex>
+      <herited>false</herited>
+      <bimUIObjectPK />
+      <layoutInfo>
+        <name />
+        <type>LabelContainerLayout</type>
+        <value />
+      </layoutInfo>
+      <properties>
+        <property>
+          <name>boundLabelText</name>
+          <type>java.lang.String</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].properties.property[boundLabelText].value</value>
+          <isMultiLan>true</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>boundLabelLength</name>
+          <type>int</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].properties.property[boundLabelLength].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>boundLabelUnderline</name>
+          <type>boolean</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].properties.property[boundLabelUnderline].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>visible</name>
+          <type>boolean</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].properties.property[visible].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+      </properties>
+      <parent>
+        <key name="name" value="CoreUI" />
+      </parent>
+    </component>
     <component>
       <name>prmtCreator</name>
       <alias>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[prmtCreator].alias</alias>
@@ -1328,6 +1426,120 @@
         </propertyBinding>
       </propertyBindings>
     </component>
+    <component>
+      <name>txtrecuritmentName</name>
+      <alias>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].alias</alias>
+      <userDefined>true</userDefined>
+      <classType>com.kingdee.bos.ctrl.swing.KDTextField</classType>
+      <isContainer>false</isContainer>
+      <constraints>3</constraints>
+      <tabIndex>24</tabIndex>
+      <herited>false</herited>
+      <bimUIObjectPK />
+      <properties>
+        <property>
+          <name>visible</name>
+          <type>boolean</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].properties.property[visible].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>horizontalAlignment</name>
+          <type>int</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].properties.property[horizontalAlignment].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>maxLength</name>
+          <type>int</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].properties.property[maxLength].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>required</name>
+          <type>boolean</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].properties.property[required].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+      </properties>
+      <parent>
+        <key name="name" value="contrecuritmentName" />
+      </parent>
+      <propertyBindings>
+        <propertyBinding>
+          <propertyName>text</propertyName>
+          <propertyType>java.lang.String</propertyType>
+          <bindingObject>editData</bindingObject>
+          <bindingField>recuritmentName</bindingField>
+          <fieldType>String</fieldType>
+          <accessType>2</accessType>
+          <autoMode>false</autoMode>
+          <herited>false</herited>
+          <userDefined>true</userDefined>
+        </propertyBinding>
+      </propertyBindings>
+    </component>
+    <component>
+      <name>txtcandidateName</name>
+      <alias>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].alias</alias>
+      <userDefined>true</userDefined>
+      <classType>com.kingdee.bos.ctrl.swing.KDTextField</classType>
+      <isContainer>false</isContainer>
+      <constraints>3</constraints>
+      <tabIndex>25</tabIndex>
+      <herited>false</herited>
+      <bimUIObjectPK />
+      <properties>
+        <property>
+          <name>visible</name>
+          <type>boolean</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].properties.property[visible].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>horizontalAlignment</name>
+          <type>int</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].properties.property[horizontalAlignment].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>maxLength</name>
+          <type>int</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].properties.property[maxLength].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+        <property>
+          <name>required</name>
+          <type>boolean</type>
+          <value>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].properties.property[required].value</value>
+          <isMultiLan>false</isMultiLan>
+          <userDefined>true</userDefined>
+        </property>
+      </properties>
+      <parent>
+        <key name="name" value="contcandidateName" />
+      </parent>
+      <propertyBindings>
+        <propertyBinding>
+          <propertyName>text</propertyName>
+          <propertyType>java.lang.String</propertyType>
+          <bindingObject>editData</bindingObject>
+          <bindingField>candidateName</bindingField>
+          <fieldType>String</fieldType>
+          <accessType>2</accessType>
+          <autoMode>false</autoMode>
+          <herited>false</herited>
+          <userDefined>true</userDefined>
+        </propertyBinding>
+      </propertyBindings>
+    </component>
     <component>
       <name>btnTraceUp</name>
       <alias>uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[btnTraceUp].alias</alias>
@@ -2347,6 +2559,66 @@
       <lang locale="zh_HK" value="true" />
       <lang locale="zh_TW" value="true" />
     </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].alias">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="null" />
+      <lang locale="zh_HK" value="null" />
+      <lang locale="zh_TW" value="null" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].properties.property[boundLabelLength].value">
+      <lang locale="en_US" value="100" />
+      <lang locale="zh_CN" value="100" />
+      <lang locale="zh_HK" value="100" />
+      <lang locale="zh_TW" value="100" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].properties.property[boundLabelText].value">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="应聘者名称" />
+      <lang locale="zh_HK" value="應聘者名稱" />
+      <lang locale="zh_TW" value="應聘者名稱" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].properties.property[boundLabelUnderline].value">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_HK" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contcandidateName].properties.property[visible].value">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_HK" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].alias">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="null" />
+      <lang locale="zh_HK" value="null" />
+      <lang locale="zh_TW" value="null" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].properties.property[boundLabelLength].value">
+      <lang locale="en_US" value="100" />
+      <lang locale="zh_CN" value="100" />
+      <lang locale="zh_HK" value="100" />
+      <lang locale="zh_TW" value="100" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].properties.property[boundLabelText].value">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="需求名称" />
+      <lang locale="zh_HK" value="需求名稱" />
+      <lang locale="zh_TW" value="需求名稱" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].properties.property[boundLabelUnderline].value">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_HK" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritmentName].properties.property[visible].value">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_HK" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
     <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[contrecuritment].alias">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="null" />
@@ -2845,6 +3117,66 @@
       <lang locale="zh_HK" value="true" />
       <lang locale="zh_TW" value="true" />
     </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].alias">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="应聘者名称" />
+      <lang locale="zh_HK" value="應聘者名稱" />
+      <lang locale="zh_TW" value="應聘者名稱" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].properties.property[horizontalAlignment].value">
+      <lang locale="en_US" value="2" />
+      <lang locale="zh_CN" value="2" />
+      <lang locale="zh_HK" value="2" />
+      <lang locale="zh_TW" value="2" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].properties.property[maxLength].value">
+      <lang locale="en_US" value="100" />
+      <lang locale="zh_CN" value="100" />
+      <lang locale="zh_HK" value="100" />
+      <lang locale="zh_TW" value="100" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].properties.property[required].value">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_HK" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtcandidateName].properties.property[visible].value">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_HK" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].alias">
+      <lang locale="en_US" value="null" />
+      <lang locale="zh_CN" value="需求名称" />
+      <lang locale="zh_HK" value="需求名稱" />
+      <lang locale="zh_TW" value="需求名稱" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].properties.property[horizontalAlignment].value">
+      <lang locale="en_US" value="2" />
+      <lang locale="zh_CN" value="2" />
+      <lang locale="zh_HK" value="2" />
+      <lang locale="zh_TW" value="2" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].properties.property[maxLength].value">
+      <lang locale="en_US" value="100" />
+      <lang locale="zh_CN" value="100" />
+      <lang locale="zh_HK" value="100" />
+      <lang locale="zh_TW" value="100" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].properties.property[required].value">
+      <lang locale="en_US" value="false" />
+      <lang locale="zh_CN" value="false" />
+      <lang locale="zh_HK" value="false" />
+      <lang locale="zh_TW" value="false" />
+    </rs>
+    <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtrecuritmentName].properties.property[visible].value">
+      <lang locale="en_US" value="true" />
+      <lang locale="zh_CN" value="true" />
+      <lang locale="zh_HK" value="true" />
+      <lang locale="zh_TW" value="true" />
+    </rs>
     <rs key="uiObject[com.kingdee.eas.custom.recuritment.client.ApplicantBeisenEditUI].components.component[txtsyncResult].alias">
       <lang locale="en_US" value="null" />
       <lang locale="zh_CN" value="同步结果" />

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 22 - 0
metadata/com/kingdee/eas/custom/recuritment/client/ApplicantBeisenListUI.ui


+ 22 - 0
src/com/kingdee/eas/custom/recuritment/AbstractApplicantBeisenInfo.java

@@ -74,6 +74,28 @@ public class AbstractApplicantBeisenInfo extends com.kingdee.eas.hr.base.HRBillB
         setString("syncStatus", item.getValue());
 		}
     }
+    /**
+     * Object:±±É­Ó¦Æ¸Õß's ÐèÇóÃû³Æproperty 
+     */
+    public String getRecuritmentName()
+    {
+        return getString("recuritmentName");
+    }
+    public void setRecuritmentName(String item)
+    {
+        setString("recuritmentName", item);
+    }
+    /**
+     * Object:±±É­Ó¦Æ¸Õß's ӦƸÕßÃû³Æproperty 
+     */
+    public String getCandidateName()
+    {
+        return getString("candidateName");
+    }
+    public void setCandidateName(String item)
+    {
+        setString("candidateName", item);
+    }
     public BOSObjectType getBOSType()
     {
         return new BOSObjectType("D413A099");

+ 49 - 3
src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI.java

@@ -59,6 +59,8 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
     protected com.kingdee.bos.ctrl.swing.KDLabelContainer contrecuritment;
     protected com.kingdee.bos.ctrl.swing.KDLabelContainer contsyncResult;
     protected com.kingdee.bos.ctrl.swing.KDLabelContainer contsyncStatus;
+    protected com.kingdee.bos.ctrl.swing.KDLabelContainer contrecuritmentName;
+    protected com.kingdee.bos.ctrl.swing.KDLabelContainer contcandidateName;
     protected com.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox prmtCreator;
     protected com.kingdee.bos.ctrl.swing.KDDatePicker kDDateCreateTime;
     protected com.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox prmtLastUpdateUser;
@@ -73,6 +75,8 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
     protected com.kingdee.bos.ctrl.swing.KDScrollPane scrollPanesyncResult;
     protected com.kingdee.bos.ctrl.swing.KDTextArea txtsyncResult;
     protected com.kingdee.bos.ctrl.swing.KDComboBox syncStatus;
+    protected com.kingdee.bos.ctrl.swing.KDTextField txtrecuritmentName;
+    protected com.kingdee.bos.ctrl.swing.KDTextField txtcandidateName;
     protected com.kingdee.eas.custom.recuritment.ApplicantBeisenInfo editData = null;
     /**
      * output class constructor
@@ -150,6 +154,8 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
         this.contrecuritment = new com.kingdee.bos.ctrl.swing.KDLabelContainer();
         this.contsyncResult = new com.kingdee.bos.ctrl.swing.KDLabelContainer();
         this.contsyncStatus = new com.kingdee.bos.ctrl.swing.KDLabelContainer();
+        this.contrecuritmentName = new com.kingdee.bos.ctrl.swing.KDLabelContainer();
+        this.contcandidateName = new com.kingdee.bos.ctrl.swing.KDLabelContainer();
         this.prmtCreator = new com.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox();
         this.kDDateCreateTime = new com.kingdee.bos.ctrl.swing.KDDatePicker();
         this.prmtLastUpdateUser = new com.kingdee.bos.ctrl.extendcontrols.KDBizPromptBox();
@@ -164,6 +170,8 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
         this.scrollPanesyncResult = new com.kingdee.bos.ctrl.swing.KDScrollPane();
         this.txtsyncResult = new com.kingdee.bos.ctrl.swing.KDTextArea();
         this.syncStatus = new com.kingdee.bos.ctrl.swing.KDComboBox();
+        this.txtrecuritmentName = new com.kingdee.bos.ctrl.swing.KDTextField();
+        this.txtcandidateName = new com.kingdee.bos.ctrl.swing.KDTextField();
         this.contCreator.setName("contCreator");
         this.contCreateTime.setName("contCreateTime");
         this.contLastUpdateUser.setName("contLastUpdateUser");
@@ -177,6 +185,8 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
         this.contrecuritment.setName("contrecuritment");
         this.contsyncResult.setName("contsyncResult");
         this.contsyncStatus.setName("contsyncStatus");
+        this.contrecuritmentName.setName("contrecuritmentName");
+        this.contcandidateName.setName("contcandidateName");
         this.prmtCreator.setName("prmtCreator");
         this.kDDateCreateTime.setName("kDDateCreateTime");
         this.prmtLastUpdateUser.setName("prmtLastUpdateUser");
@@ -191,6 +201,8 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
         this.scrollPanesyncResult.setName("scrollPanesyncResult");
         this.txtsyncResult.setName("txtsyncResult");
         this.syncStatus.setName("syncStatus");
+        this.txtrecuritmentName.setName("txtrecuritmentName");
+        this.txtcandidateName.setName("txtcandidateName");
         // CoreUI		
         this.btnTraceUp.setVisible(false);		
         this.btnTraceDown.setVisible(false);		
@@ -278,6 +290,16 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
         this.contsyncStatus.setBoundLabelLength(100);		
         this.contsyncStatus.setBoundLabelUnderline(true);		
         this.contsyncStatus.setVisible(true);
+        // contrecuritmentName		
+        this.contrecuritmentName.setBoundLabelText(resHelper.getString("contrecuritmentName.boundLabelText"));		
+        this.contrecuritmentName.setBoundLabelLength(100);		
+        this.contrecuritmentName.setBoundLabelUnderline(true);		
+        this.contrecuritmentName.setVisible(true);
+        // contcandidateName		
+        this.contcandidateName.setBoundLabelText(resHelper.getString("contcandidateName.boundLabelText"));		
+        this.contcandidateName.setBoundLabelLength(100);		
+        this.contcandidateName.setBoundLabelUnderline(true);		
+        this.contcandidateName.setVisible(true);
         // prmtCreator		
         this.prmtCreator.setEnabled(false);
         // kDDateCreateTime		
@@ -324,7 +346,17 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
         this.syncStatus.setVisible(true);		
         this.syncStatus.addItems(EnumUtils.getEnumList("com.kingdee.eas.ma.biz.BizExecuteResultEnum").toArray());		
         this.syncStatus.setRequired(false);
-        this.setFocusTraversalPolicy(new com.kingdee.bos.ui.UIFocusTraversalPolicy(new java.awt.Component[] {txtcandidateId,txtapplyId,prmtrecuritment,txtsyncResult,syncStatus}));
+        // txtrecuritmentName		
+        this.txtrecuritmentName.setVisible(true);		
+        this.txtrecuritmentName.setHorizontalAlignment(2);		
+        this.txtrecuritmentName.setMaxLength(100);		
+        this.txtrecuritmentName.setRequired(false);
+        // txtcandidateName		
+        this.txtcandidateName.setVisible(true);		
+        this.txtcandidateName.setHorizontalAlignment(2);		
+        this.txtcandidateName.setMaxLength(100);		
+        this.txtcandidateName.setRequired(false);
+        this.setFocusTraversalPolicy(new com.kingdee.bos.ui.UIFocusTraversalPolicy(new java.awt.Component[] {txtcandidateId,txtapplyId,prmtrecuritment,txtsyncResult,syncStatus,txtrecuritmentName,txtcandidateName}));
         this.setFocusCycleRoot(true);
 		//Register control's property binding
 		registerBindings();
@@ -378,6 +410,10 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
         this.add(contsyncResult, null);
         contsyncStatus.setBounds(new Rectangle(0, 0, 270, 19));
         this.add(contsyncStatus, null);
+        contrecuritmentName.setBounds(new Rectangle(0, 0, 270, 19));
+        this.add(contrecuritmentName, null);
+        contcandidateName.setBounds(new Rectangle(0, 0, 270, 19));
+        this.add(contcandidateName, null);
         //contCreator
         contCreator.setBoundEditor(prmtCreator);
         //contCreateTime
@@ -406,6 +442,10 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
         scrollPanesyncResult.getViewport().add(txtsyncResult, null);
         //contsyncStatus
         contsyncStatus.setBoundEditor(syncStatus);
+        //contrecuritmentName
+        contrecuritmentName.setBoundEditor(txtrecuritmentName);
+        //contcandidateName
+        contcandidateName.setBoundEditor(txtcandidateName);
 
     }
 
@@ -594,7 +634,9 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
 		dataBinder.registerBinding("applyId", String.class, this.txtapplyId, "text");
 		dataBinder.registerBinding("recuritment", com.kingdee.eas.basedata.person.PersonInfo.class, this.prmtrecuritment, "data");
 		dataBinder.registerBinding("syncResult", String.class, this.txtsyncResult, "text");
-		dataBinder.registerBinding("syncStatus", com.kingdee.eas.ma.biz.BizExecuteResultEnum.class, this.syncStatus, "selectedItem");		
+		dataBinder.registerBinding("syncStatus", com.kingdee.eas.ma.biz.BizExecuteResultEnum.class, this.syncStatus, "selectedItem");
+		dataBinder.registerBinding("recuritmentName", String.class, this.txtrecuritmentName, "text");
+		dataBinder.registerBinding("candidateName", String.class, this.txtcandidateName, "text");		
 	}
 	//Regiester UI State
 	private void registerUIState(){		
@@ -741,7 +783,9 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
 		getValidateHelper().registerBindProperty("applyId", ValidateHelper.ON_SAVE);    
 		getValidateHelper().registerBindProperty("recuritment", ValidateHelper.ON_SAVE);    
 		getValidateHelper().registerBindProperty("syncResult", ValidateHelper.ON_SAVE);    
-		getValidateHelper().registerBindProperty("syncStatus", ValidateHelper.ON_SAVE);    		
+		getValidateHelper().registerBindProperty("syncStatus", ValidateHelper.ON_SAVE);    
+		getValidateHelper().registerBindProperty("recuritmentName", ValidateHelper.ON_SAVE);    
+		getValidateHelper().registerBindProperty("candidateName", ValidateHelper.ON_SAVE);    		
 	}
 
 
@@ -814,6 +858,8 @@ public abstract class AbstractApplicantBeisenEditUI extends com.kingdee.eas.fram
 		}
         sic.add(new SelectorItemInfo("syncResult"));
         sic.add(new SelectorItemInfo("syncStatus"));
+        sic.add(new SelectorItemInfo("recuritmentName"));
+        sic.add(new SelectorItemInfo("candidateName"));
         return sic;
     }        
     	

+ 2 - 0
src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI.properties

@@ -13,6 +13,8 @@ contrecuritment.boundLabelText=\u9700\u6C42\u7BA1\u7406
 contsyncResult.boundLabelText=\u540C\u6B65\u7ED3\u679C
 contsyncStatus.boundLabelText=\u540C\u6B65\u72B6\u6001
 syncStatus.items=[Enum]com.kingdee.eas.ma.biz.BizExecuteResultEnum
+contrecuritmentName.boundLabelText=\u9700\u6C42\u540D\u79F0
+contcandidateName.boundLabelText=\u5E94\u8058\u8005\u540D\u79F0
 ActionSubmit.SHORT_DESCRIPTION=\u63D0\u4EA4
 ActionSubmit.LONG_DESCRIPTION=\u63D0\u4EA4
 ActionSubmit.NAME=\u63D0\u4EA4

+ 2 - 0
src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI_l1.properties

@@ -13,6 +13,8 @@ contrecuritment.boundLabelText=
 contsyncResult.boundLabelText=
 contsyncStatus.boundLabelText=
 syncStatus.items=
+contrecuritmentName.boundLabelText=
+contcandidateName.boundLabelText=
 ActionSubmit.SHORT_DESCRIPTION=
 ActionSubmit.LONG_DESCRIPTION=
 ActionSubmit.NAME=

+ 2 - 0
src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI_l2.properties

@@ -13,6 +13,8 @@ contrecuritment.boundLabelText=\u9700\u6C42\u7BA1\u7406
 contsyncResult.boundLabelText=\u540C\u6B65\u7ED3\u679C
 contsyncStatus.boundLabelText=\u540C\u6B65\u72B6\u6001
 syncStatus.items=[Enum]com.kingdee.eas.ma.biz.BizExecuteResultEnum
+contrecuritmentName.boundLabelText=\u9700\u6C42\u540D\u79F0
+contcandidateName.boundLabelText=\u5E94\u8058\u8005\u540D\u79F0
 ActionSubmit.SHORT_DESCRIPTION=\u63D0\u4EA4
 ActionSubmit.LONG_DESCRIPTION=\u63D0\u4EA4
 ActionSubmit.NAME=\u63D0\u4EA4

+ 2 - 0
src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenEditUI_l3.properties

@@ -13,6 +13,8 @@ contrecuritment.boundLabelText=\u9700\u6C42\u7BA1\u7406
 contsyncResult.boundLabelText=\u540C\u6B65\u7D50\u679C
 contsyncStatus.boundLabelText=\u540C\u6B65\u72C0\u614B
 syncStatus.items=[Enum]com.kingdee.eas.ma.biz.BizExecuteResultEnum
+contrecuritmentName.boundLabelText=\u9700\u6C42\u540D\u7A31
+contcandidateName.boundLabelText=\u61C9\u8058\u8005\u540D\u7A31
 ActionSubmit.SHORT_DESCRIPTION=\u63D0\u4EA4
 ActionSubmit.LONG_DESCRIPTION=\u63D0\u4EA4
 ActionSubmit.NAME=\u63D0\u4EA4

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenListUI.java


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenListUI.properties


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenListUI_l2.properties


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
src/com/kingdee/eas/custom/recuritment/client/AbstractApplicantBeisenListUI_l3.properties


+ 331 - 73
src/com/kingdee/eas/custom/recuritment/task/RecuritmentFacadeControllerBean.java

@@ -28,13 +28,18 @@ import com.kingdee.eas.custom.recuritment.utils.InitialValueUtils;
 import com.kingdee.eas.hr.base.IRelation;
 import com.kingdee.eas.hr.base.RelationCollection;
 import com.kingdee.eas.hr.base.RelationFactory;
+import com.kingdee.shr.base.syssetting.app.osf.OSFAppUtil;
+import com.kingdee.shr.base.syssetting.exception.SHRWebException;
 import com.kingdee.shr.recuritment.*;
+import com.kingdee.shr.recuritment.service.SelectNextStageService;
 import com.kingdee.util.StringUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.log4j.Logger;
 import org.apache.logging.log4j.util.TriConsumer;
 
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.text.ParseException;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -49,6 +54,26 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
 //    private static final ZoneId BEIJING_ZONE = ZoneId.of("Asia/Shanghai");
 
     private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+    Map<String, String> configMap = new HashMap<>();
+    private Properties propt = new Properties();//共用参数
+
+    /**
+     * @throws IOException
+     */
+    public RecuritmentFacadeControllerBean() throws IOException {
+        String filePath = System.getProperty("EAS_HOME") + "/server/properties/beisen/beisenConfig.properties";
+        try (InputStreamReader reader = new InputStreamReader(new FileInputStream(filePath), "UTF-8")) {
+            this.propt.load(reader);
+        } catch (IOException e) {
+            e.printStackTrace();
+            logger.error("未找到" + filePath + "配置文件。");
+            throw e;
+        }
+        Set<Map.Entry<Object, Object>> set = this.propt.entrySet();
+        for (Map.Entry<Object, Object> entry : set) {
+            configMap.put((String) entry.getKey(), (String) entry.getValue());
+        }
+    }
 
     /**
      * 同步北森简历和附件
@@ -61,6 +86,8 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
     @Override
     protected void _syncBeisenResume(Context ctx, String billId) throws BOSException, EASBizException {
         super._syncBeisenResume(ctx, billId);
+        IResumeBaseRec iResumeBaseRec = ResumeBaseRecFactory.getLocalInstance(ctx);
+
         logger.error("billId" + billId);
         //北森应聘者
         IApplicantBeisen iApplicantBeisen = ApplicantBeisenFactory.getLocalInstance(ctx);
@@ -84,16 +111,20 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
             //应聘者id
             String candidateId = applicantBeisenInfo.getCandidateId();
             try {
-                IResumeBaseRec iResumeBaseRec = ResumeBaseRecFactory.getLocalInstance(ctx);
                 ResumeBaseRecCollection collection = iResumeBaseRec.getResumeBaseRecCollection("select * ,resumeState.number where applyId = '" + applyId + "'");
                 // 1. 获取简历基础信息
-                ResumeBaseRecInfo resumeInfo = collection.get(0);
-                if (resumeInfo == null) {
+                //ResumeBaseRecInfo resumeInfo = collection.get(0);
+                ResumeBaseRecInfo resumeInfo = null;
+                if (!collection.isEmpty()) {
+                    resumeInfo = collection.get(0);
+                    if (!"0001".equals(resumeInfo.getResumeState().getNumber())) {
+                        // 非待筛选不同步
+                        continue;
+                    }
+                } else {
                     resumeInfo = new ResumeBaseRecInfo();
                     resumeInfo.put("applyId", applyId);
                     resumeInfo.put("candidateId", candidateId);
-                } else if (!"0001".equals(resumeInfo.getResumeState().getNumber())) {
-                    continue;
                 }
                 //通过申请ID获取招聘需求
                 RecuritmentDemandInfo recuritmentDemandInfo = getRecuritmentByApplyId(ctx, applyId);
@@ -105,6 +136,8 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
                 resumeInfo.setRecuritPosition(recuritmentDemandInfo.getRecuritPosition());
                 //北森应聘者-需求管理
                 applicantBeisenInfo.setRecuritment(recuritmentDemandInfo);
+                //招聘需求名称
+                //applicantBeisenInfo.setRecuritmentName(recuritmentDemandInfo.getPositionName());
                 // 2. 获取  标准简历数据
                 JSONObject resumeJson = getResumeByApplyId(applyId);
                 logger.error("resumeJson--" + resumeJson);
@@ -112,16 +145,38 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
                 if (200 == code) {
                     JSONObject data = resumeJson.getJSONObject("data");
                     // 3. 处理简历各部分数据
-                    processResumeSections(ctx, data, resumeInfo);
+                    Map<String, String> mapData = processResumeSections(ctx, data, resumeInfo);
+                    //北森应聘者--应聘者名称
+                    applicantBeisenInfo.setCandidateName(mapData.get("name"));
                     //删除附件信息
-                    AttachmentUtils.deleteAttachment(ctx, resumeInfo.getId().toString());
+                    String where = "where boid = '" + resumeInfo.getId().toString() + "' and (attachment.name like '%标准简历%' or attachment.name like '%面试评价%' or attachment.name like '%原始简历%' )";
+                    AttachmentUtils.deleteAttachment(ctx, where);
                     // 根据申请Id获取并处理简历文件
                     processResumeFile(applyId, ctx, resumeInfo, "标准简历");
                     // 获取并处理面试评价文件
                     processResumeFile(applyId, ctx, resumeInfo, "面试评价");
-                    applicantBeisenInfo.setSyncResult("同步成功!");
-                    applicantBeisenInfo.setSyncStatus(ExecuteResultEnum.SUCCESS);
-                    successSize++;
+                    // 获取并处理原始简历文件
+                    processResumeFile(applyId, ctx, resumeInfo, "原始简历");
+                    // 获取并处理背调信息文件
+                    processResumeFile(applyId, ctx, resumeInfo, "背调信息");
+                    //生成录用报批
+                    //String errorMsg = saveRecApproval(ctx, mapData);
+                    String serviceName = "generateHireApprovalService";
+                    Map param = new HashMap();
+                    param.put("resumeBaseRecId", mapData.get("resumeBaseRecId").toString());
+                    String errorMsg = (String) OSFAppUtil.callService(ctx, serviceName, param);
+                    //String errorMsg = null;
+                    if (com.kingdee.bos.rabbitmq.util.StringUtils.isEmpty(errorMsg)) {
+                        //修改录用报批数据
+                        updateApproval(ctx, mapData);
+                        //修复简历数据
+                        updateResumeBaseRe(ctx, iResumeBaseRec, mapData.get("resumeBaseRecId").toString());
+                        applicantBeisenInfo.setSyncResult("同步成功!");
+                        applicantBeisenInfo.setSyncStatus(ExecuteResultEnum.SUCCESS);
+                        successSize++;
+                    } else {
+                        throw new BOSException(errorMsg.toString());
+                    }
                 } else {
                     throw new BOSException(resumeJson.getString("message"));
                 }
@@ -133,11 +188,104 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
                 iApplicantBeisen.save(applicantBeisenInfo);
                 errorSize++;
                 logger.error("简历处理失败: " + e.getMessage(), e);
+                msgMap.put("error", e.getMessage());
             }
         }
         logger.error("成功条数" + successSize);
         logger.error("失败条数" + errorSize);
+        msgMap.put("successSize", successSize);
+        msgMap.put("errorSize", errorSize);
+        //return msgMap;
+    }
+
+
+    /**
+     * 修复简历数据
+     *
+     * @param ctx
+     * @param iResumeBaseRec
+     * @param resumeBaseRecId
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    public void updateResumeBaseRe(Context ctx, IResumeBaseRec iResumeBaseRec, String resumeBaseRecId) throws BOSException, EASBizException {
+        ResumeBaseRecInfo resumeBaseRecInfo = iResumeBaseRec.getResumeBaseRecInfo(new ObjectUuidPK(resumeBaseRecId));
+        IWorkingExp iWorkingExp = WorkingExpFactory.getLocalInstance(ctx);
+        WorkingExpCollection workingExpColl = iWorkingExp.getWorkingExpCollection("where resumeBase = '" + resumeBaseRecInfo.getId().toString() + "' order by dateEnd desc");
+        if (!workingExpColl.isEmpty()) {
+            WorkingExpInfo workingExpInfo = workingExpColl.get(0);
+            //职位
+            resumeBaseRecInfo.setLastJob(workingExpInfo.getPosition());
+            //公司
+            resumeBaseRecInfo.setLastCompany(workingExpInfo.getCompany());
+            //行业
+            resumeBaseRecInfo.setLastIndustry(workingExpInfo.getIndustry());
+        }
+        SelectorItemCollection sic = new SelectorItemCollection();
+        sic.add("lastJob");
+        sic.add("lastCompany");
+        sic.add("lastIndustry");
+        iResumeBaseRec.updatePartial(resumeBaseRecInfo, sic);
+    }
 
+    /**
+     * 修改录用报批数据
+     *
+     * @param ctx
+     * @param mapData
+     */
+    public void updateApproval(Context ctx, Map<String, String> mapData) throws BOSException, EASBizException {
+        logger.error("updateApproval--");
+        //简历ID
+        String resumeBaseRecId = mapData.get("resumeBaseRecId");
+        logger.error("简历ID" + resumeBaseRecId);
+        //获取录用报批 通过结束日期排序 获取最高学历
+        IRecApproval iRecApproval = RecApprovalFactory.getLocalInstance(ctx);
+        RecApprovalCollection recApprovalCollection = iRecApproval.getRecApprovalCollection("where resumeBaseRec = '" + resumeBaseRecId + "'");
+        if (recApprovalCollection.isEmpty()) {
+            throw new BOSException("未查询到录用报批数据!");
+        }
+        RecApprovalInfo recApprovalInfo = recApprovalCollection.get(0);
+        //查询简历-教育经历数据
+        IEducationExpREC iEducationExpREC = EducationExpRECFactory.getLocalInstance(ctx);
+        EducationExpRECCollection educationExpRECCollection = iEducationExpREC.getEducationExpRECCollection("where resumeBase = '" + resumeBaseRecId + "' order by dateEnd desc");
+        if (!educationExpRECCollection.isEmpty()) {
+            EducationExpRECInfo educationExpRECInfo = educationExpRECCollection.get(0);
+            //第一学历
+            recApprovalInfo.put("firsteducation", educationExpRECInfo.getDegreeF7().getId());
+            //专业
+            recApprovalInfo.put("firstspeciality", educationExpRECInfo.getMajor());
+            //毕业院校
+            recApprovalInfo.put("firstschool", educationExpRECInfo.getSchool());
+            SelectorItemCollection sic = new SelectorItemCollection();
+            sic.add("firsteducation");
+            sic.add("firstspeciality");
+            sic.add("firstschool");
+            iRecApproval.updatePartial(recApprovalInfo, sic);
+        }
+    }
+
+    /**
+     * 自动生成录用报批
+     * 第二次调整新增代码
+     *
+     * @param ctx
+     * @param mapData
+     * @return
+     * @throws SHRWebException
+     * @throws BOSException
+     * @throws EASBizException
+     */
+    public String saveRecApproval(Context ctx, Map mapData) throws SHRWebException, BOSException, EASBizException {
+        IResumeState iResumeState = ResumeStateFactory.getLocalInstance(ctx);
+        //"0009" 待报批  录用报批状态
+        ResumeStateInfo resumeStateInfo = iResumeState.getResumeStateInfo("where number = '0009'");
+        String resumeBaseRecId = mapData.get("resumeBaseRecId").toString();
+        String resumeStateId = resumeStateInfo.getId().toString();
+        String errorMsg = SelectNextStageService.getInstance().dealNext(ctx, resumeBaseRecId, resumeStateId, "resumeList");
+        //String errorMsg = SelectNextStageUtils.getInstance().dealNext(ctx, resumeBaseRecId, resumeStateId, "resumeList");
+        logger.error("errorMsg--" + errorMsg);
+        return errorMsg;
     }
 
     /**
@@ -181,21 +329,71 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
             throw new BOSException("未查询到需求IDRecruitRequirementIds");
         }
         String recruitRequirementId = recruit.getString("value");
-        //招聘需求
-        IRecuritmentDemand iRecuritmentDemand = RecuritmentDemandFactory.getLocalInstance(ctx);
-        if (StringUtils.isEmpty(recruitRequirementId)) {
+        //未查询到北森的该人员招聘需求
+        if (com.kingdee.bos.rabbitmq.util.StringUtils.isEmpty(recruitRequirementId)) {
             throw new BOSException("通过applyId[" + applyId + "]未查询到招聘需求!");
         }
         logger.error("requirementId--" + recruitRequirementId);
+        //根据需求ID获取招聘需求
+        JSONArray items = new JSONArray();
+        items.add(recruitRequirementId);
+        JSONObject requirements = beisenApiClient.callApi(BeisenParam.GET_REQUIREMENTS, items);
+        logger.error("requirements--" + requirements);
+        if (200 != requirements.getInteger("code")) {
+            throw new BOSException("根据需求ID获取招聘需求失败,原因:" + entity.get("message"));
+        }
+        JSONArray data = requirements.getJSONArray("data");
+        JSONObject dataJson = data.getJSONObject(0);
+        //招聘需求
+        IRecuritmentDemand iRecuritmentDemand = RecuritmentDemandFactory.getLocalInstance(ctx);
         //招聘需求
         RecuritmentDemandCollection recuritmentDemandCollection = iRecuritmentDemand.getRecuritmentDemandCollection("where requirementId='" + recruitRequirementId + "'");
+        //shr未查询到对应的招聘需求
         if (recuritmentDemandCollection.isEmpty()) {
-            throw new BOSException("sHR未查询到对应的招聘需求,北森需求ID:" + recruitRequirementId);
+            //String message = "sHR未查询到对应的招聘需求,北森需求ID:" + recruitRequirementId + ",需求名称:" + dataJson.getString("name");;
+            // 推送未查询到招聘需求消息至北森
+            pushMessageToBeisen(applyId, configMap.get("syncToBsErrorMsg"));
+            //pushMessageToBeisen(applyId, "显示匹配不上金蝶原始需求单据");
+            throw new BOSException("sHR未查询到对应的招聘需求,需求名称::" + dataJson.getString("name") + ",北森需求ID" + recruitRequirementId);
         }
+        //成功則修改北森字段为空
+        pushMessageToBeisen(applyId, "");
         return recuritmentDemandCollection.get(0);
     }
 
 
+    /**
+     * 推送消息至北森
+     *
+     * @param applyId 申请ID
+     * @param message 消息
+     */
+    public void pushMessageToBeisen(String applyId, String message) throws IOException {
+        try {
+
+            BeisenApiClient beisenApiClient = BeisenApiClient.getInstance();
+            //POST_UPDATEAPPLYLIST 更新申请信息
+            JSONObject pamas = new JSONObject();
+            JSONArray applyList = new JSONArray();
+            JSONObject pama = new JSONObject();
+            JSONObject fieldValues = new JSONObject();
+            //测试环境:extjianlitongbujieguo_433899_1252390002
+            //正式环境:extjianlitongbujieguo_614492_1252390002
+            fieldValues.put(configMap.get("syncToErrorBS"), message);//是否同步成功
+            pama.put("fieldValues", fieldValues);
+            pama.put("applyId", applyId);
+            applyList.add(pama);
+            pamas.put("applyList", applyList);
+            logger.error("pushMessageToBeisen--pamas--" + pamas);
+            JSONObject result = beisenApiClient.callApi(BeisenParam.POST_UPDATEAPPLYLIST, pamas);
+            logger.error("pushMessageToBeisen--result--" + result);
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new RuntimeException(e);
+        }
+    }
+
+
     /**
      * 处理简历文件或面试评价文件
      *
@@ -206,38 +404,93 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
      */
     private void processResumeFile(String applyId, Context ctx, ResumeBaseRecInfo resumeInfo, String fileType) {
         logger.error("processResumeFile--");
+        //是否是背景信息
+        boolean isOrigin = false;
         try {
             // 根据文件类型获取对应的文件信息
-            JSONObject fileInfo = "标准简历".equals(fileType) ? getStandardResumeFileUrlByApplyId(applyId) : getInterviewEvaluationFile(applyId);
+            //JSONObject fileInfo = "标准简历".equals(fileType) ? getStandardResumeFileUrlByApplyId(applyId) : getInterviewEvaluationFile(applyId);
+            JSONObject fileInfo = null;
+            String param = "?applyId=" + applyId;
+            BeisenApiClient beisenApiClient = BeisenApiClient.getInstance();
+            if ("标准简历".equals(fileType)) {
+                //fileInfo = getStandardResumeFileUrlByApplyId(applyId);
+                fileInfo = beisenApiClient.callGetApi(BeisenParam.GET_STANDERDRESUMEFILURLBYAPPLYID + param, new JSONObject());
+            } else if ("面试评价".equals(fileType)) {
+                //fileInfo = getInterviewEvaluationFile(applyId);
+                fileInfo = beisenApiClient.callGetApi(BeisenParam.GET_INTERVIEWEVALUATIONFILE + param, new JSONObject());
+            } else if ("原始简历".equals(fileType)) {
+                fileInfo = beisenApiClient.callGetApi(BeisenParam.GET_ORIGINRESUMEBYAPPLYID + param, new JSONObject());
+            } else if ("背调信息".equals(fileType)) {
+                param = "?applyId=" + applyId + "&supportManualCreate=true";
+                String GET_BACKGROUNDINVESTIGATIONBYAPPLYID = "https://openapi.italent.cn/RecruitV6/api/v1/Investigation/GetBackgroundInvestigationByApplyId";
+                //背景调查附件单独处理
+                //fileInfo = beisenApiClient.callGetApi(BeisenParam.GET_BACKGROUNDINVESTIGATIONBYAPPLYID + param, new JSONObject());
+                fileInfo = beisenApiClient.callGetApi(GET_BACKGROUNDINVESTIGATIONBYAPPLYID + param, new JSONObject());
+                logger.error("背调信息--" + fileInfo);
+                //originResume
+                isOrigin = true;
+            }
             logger.error("fileInfo--" + fileInfo);
             if (fileInfo == null) {
                 throw new BOSException("获取{}文件信息失败: 返回结果为null" + fileType);
             }
             Integer code = fileInfo.getInteger("code");
             if (!Integer.valueOf(200).equals(code)) {
-                throw new BOSException("获取{" + fileType + "}文件失败: 返回code={" + code + "}");
-            }
-            JSONObject data = fileInfo.getJSONObject("data");
-            if (data == null) {
-                throw new BOSException("获取{" + fileType + "}文件失败: data字段为空");
-            }
-            String downloadUrl = data.getString("downloadUrl");
-            String dfsPath = data.getString("dfsPath");
-            if (com.kingdee.bos.rabbitmq.util.StringUtils.isBlank(downloadUrl) || com.kingdee.bos.rabbitmq.util.StringUtils.isBlank(dfsPath)) {
-                throw new BOSException("获取{" + fileType + "}文件失败: downloadUrl或dfsPath为空");
+                //未获取到简历不执行
+                logger.error("获取{" + fileType + "}文件失败: 返回code={" + code + "}");
+                return;
+                //throw new BOSException("获取{" + fileType + "}文件失败: 返回code={" + code + "}");
+            }
+            logger.error("isOrigin--" + isOrigin);
+            //背景调查附件单独处理
+            if (isOrigin) {
+                JSONArray data = fileInfo.getJSONArray("data");
+                for (int i = 0; i < data.size(); i++) {
+                    JSONObject dataJson = data.getJSONObject(i);
+                    //fileDetails-背调报告文件详情列表
+                    JSONArray fileDetails = dataJson.getJSONArray("fileDetails");
+                    for (int j = 0; j < fileDetails.size(); j++) {
+                        JSONObject file = fileDetails.getJSONObject(j);
+                        String fileName = file.getString("fileName");
+                        String fileExtension = AttachmentUtils.extractFileExtension(fileName);
+                        String customFileName = "北森" + (fileType + (j + 1)) + "." + fileExtension;
+                        //删除之前的附件
+                        String where = "where boid = '" + resumeInfo.getId().toString() + "' and name like '%" + fileName + "%'";
+                        logger.error("where--" + where);
+                        AttachmentUtils.deleteAttachment(ctx, where);
+                        String downloadUrl = file.getString("downloadUrl");
+                        // 获取文件内容并保存
+                        byte[] fileData = AttachmentUtils.getBytesByNetURL("https:" + downloadUrl);
+                        if (fileData == null || fileData.length == 0) {
+                            throw new BOSException("获取{" + fileType + "}文件内容失败: 下载内容为空");
+                        }
+                        AttachmentUtils.insertAttachment(ctx, customFileName, resumeInfo, fileData, fileName);
+                    }
+                }
+            } else {
+                JSONObject data = fileInfo.getJSONObject("data");
+                if (data == null) {
+                    throw new BOSException("获取{" + fileType + "}文件失败: data字段为空");
+                }
+                String downloadUrl = data.getString("downloadUrl");
+                String dfsPath = data.getString("dfsPath");
+                if (com.kingdee.bos.rabbitmq.util.StringUtils.isBlank(downloadUrl) || com.kingdee.bos.rabbitmq.util.StringUtils.isBlank(dfsPath)) {
+                    throw new BOSException("获取{" + fileType + "}文件失败: downloadUrl或dfsPath为空");
+                }
+                // 处理文件名
+                String fileName = AttachmentUtils.extractFileNameFromPath(dfsPath);
+                String fileExtension = AttachmentUtils.extractFileExtension(fileName);
+                String customFileName = "北森" + fileType + "." + fileExtension;
+                // 获取文件内容并保存
+                byte[] fileData = AttachmentUtils.getBytesByNetURL("https:" + downloadUrl);
+                if (fileData == null || fileData.length == 0) {
+                    throw new BOSException("获取{" + fileType + "}文件内容失败: 下载内容为空");
+                }
+                AttachmentUtils.insertAttachment(ctx, customFileName, resumeInfo, fileData, fileName);
+                logger.error("{" + fileType + "}文件处理成功: {" + customFileName + "}");
             }
-            // 处理文件名
-            String fileName = AttachmentUtils.extractFileNameFromPath(dfsPath);
-            String fileExtension = AttachmentUtils.extractFileExtension(fileName);
-            String customFileName = "北森" + fileType + "." + fileExtension;
 
-            // 获取文件内容并保存
-            byte[] fileData = AttachmentUtils.getBytesByNetURL("https:" + downloadUrl);
-            if (fileData == null || fileData.length == 0) {
-                throw new BOSException("获取{" + fileType + "}文件内容失败: 下载内容为空");
-            }
-            AttachmentUtils.insertAttachment(ctx, customFileName, resumeInfo, fileData);
-            logger.info("{" + fileType + "}文件处理成功: {" + customFileName + "}");
+            //}
         } catch (Exception e) {
             logger.error("处理" + fileType + "文件时发生异常", e);
         }
@@ -247,9 +500,10 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
     /**
      * 处理简历各部分数据
      */
-    private void processResumeSections(Context ctx, JSONObject resumeJson, ResumeBaseRecInfo resumeInfo) throws BOSException, EASBizException, ParseException, IOException {
+    private Map processResumeSections(Context ctx, JSONObject resumeJson, ResumeBaseRecInfo resumeInfo) throws BOSException, EASBizException, ParseException, IOException {
+        Map mapData = new HashMap();
         JSONArray personProfile = resumeJson.getJSONArray("personProfile");
-        saveResumeBaseRec(ctx, personProfile, resumeInfo);
+        saveResumeBaseRec(ctx, personProfile, resumeInfo, mapData);
         JSONArray education = resumeJson.getJSONArray("education");
         saveEducationExpRE(ctx, education, resumeInfo);
         // 使用Map定义简历部分与处理方法的对应关系
@@ -275,33 +529,34 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
                 }
             }
         });
+        return mapData;
     }
 
-    /**
-     * 根据申请Id获取标准简历文件
-     *
-     * @param applyId
-     * @return
-     */
-    public JSONObject getStandardResumeFileUrlByApplyId(String applyId) throws IOException {
-        String param = "?applyId=" + applyId;
-        BeisenApiClient beisenApiClient = BeisenApiClient.getInstance();
-        JSONObject jsonObject = beisenApiClient.callGetApi(BeisenParam.GET_STANDERDRESUMEFILURLBYAPPLYID + param, new JSONObject());
-        return jsonObject;
-    }
-
-    /**
-     * 根据申请Id获取标准简历文件
-     *
-     * @param applyId
-     * @return
-     */
-    public JSONObject getInterviewEvaluationFile(String applyId) throws IOException {
-        String param = "?applyId=" + applyId;
-        BeisenApiClient beisenApiClient = BeisenApiClient.getInstance();
-        JSONObject jsonObject = beisenApiClient.callGetApi(BeisenParam.GET_INTERVIEWEVALUATIONFILE + param, new JSONObject());
-        return jsonObject;
-    }
+    ///**
+    // * 根据申请Id获取标准简历文件
+    // *
+    // * @param applyId
+    // * @return
+    // */
+    //public JSONObject getStandardResumeFileUrlByApplyId(String applyId) throws IOException {
+    //    String param = "?applyId=" + applyId;
+    //    BeisenApiClient beisenApiClient = BeisenApiClient.getInstance();
+    //    JSONObject jsonObject = beisenApiClient.callGetApi(BeisenParam.GET_STANDERDRESUMEFILURLBYAPPLYID + param, new JSONObject());
+    //    return jsonObject;
+    //}
+    //
+    ///**
+    // * 根据申请Id获取标准简历文件
+    // *
+    // * @param applyId
+    // * @return
+    // */
+    //public JSONObject getInterviewEvaluationFile(String applyId) throws IOException {
+    //    String param = "?applyId=" + applyId;
+    //    BeisenApiClient beisenApiClient = BeisenApiClient.getInstance();
+    //    JSONObject jsonObject = beisenApiClient.callGetApi(BeisenParam.GET_INTERVIEWEVALUATIONFILE + param, new JSONObject());
+    //    return jsonObject;
+    //}
 
     /**
      * 根据申请Id获取标准简历
@@ -322,7 +577,7 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
      *
      * @param personProfile
      */
-    public void saveResumeBaseRec(Context ctx, JSONArray personProfile, ResumeBaseRecInfo resumeBaseRecInfo) throws BOSException, EASBizException, ParseException, IOException {
+    public void saveResumeBaseRec(Context ctx, JSONArray personProfile, ResumeBaseRecInfo resumeBaseRecInfo, Map mapData) throws BOSException, EASBizException, ParseException, IOException {
         logger.error("personProfile--" + personProfile);
         BeisenParamByProperties beisenParamByProperties = new BeisenParamByProperties();
         Map<String, String> config = beisenParamByProperties.getConfig();
@@ -368,7 +623,11 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
                 resumeBaseRecInfo.setWorkDate(DateTimeUtils.parseDate(text, "yyyy/MM/dd"));
             }
             //参加工作年限     workSeniority
-            if ("YearsOfWork".equals(name)) {
+            if ("YearsOfWork".equals(name) && !com.kingdee.util.StringUtils.isEmpty(text)) {
+                resumeBaseRecInfo.setWorkSeniority(text);
+            }
+            //工作年限 YearsOfWork
+            if ("YearsOfWork".equals(name) && !com.kingdee.util.StringUtils.isEmpty(text)) {
                 resumeBaseRecInfo.setWorkSeniority(text);
             }
             //身份证号码    identityCardNo
@@ -488,7 +747,7 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
             }
             //毕业学校 school
             if ("LastSchool".equals(name)) {
-                if (StringUtils.isEmpty(text)) {
+                if (com.kingdee.util.StringUtils.isEmpty(text)) {
                     throw new BOSException("毕业学校不能为空!");
                 }
                 resumeBaseRecInfo.setName(text);
@@ -558,21 +817,21 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
             }
         }
         String errorMsg = ",身份证号码、手机号为必填数据,请在北森维护数据后再次同步!";
-        if (StringUtils.isEmpty(resumeBaseRecInfo.getIdentityCardNo()) && StringUtils.isEmpty(resumeBaseRecInfo.getPassportNo())) {
+        if (com.kingdee.util.StringUtils.isEmpty(resumeBaseRecInfo.getIdentityCardNo()) && com.kingdee.util.StringUtils.isEmpty(resumeBaseRecInfo.getPassportNo())) {
             throw new BOSException("身份证号码不能为空" + errorMsg);
         }
-        if (StringUtils.isEmpty(resumeBaseRecInfo.getMobilePhone())) {
+        if (com.kingdee.util.StringUtils.isEmpty(resumeBaseRecInfo.getMobilePhone())) {
             throw new BOSException("手机号码不能为空" + errorMsg);
         }
         IResumeBaseRec iResumeBaseRec = ResumeBaseRecFactory.getLocalInstance(ctx);
         IObjectPK save = iResumeBaseRec.save(resumeBaseRecInfo);
         logger.error("resumeBaseRecId--" + save);
+        mapData.put("resumeBaseRecId", save.toString());
+        mapData.put("name", resumeBaseRecInfo.getName());
 //        } catch (Exception e) {
 //            logger.error("简历基本信息报错信息:" + e.getMessage());
 //            throw new RuntimeException(e);
 //        }
-
-
     }
 
     /**
@@ -744,10 +1003,10 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
                 if (dateStart == null) {
                     throw new BOSException("教育经历:入学时间不能为空" + errorMsg);
                 }
-                if (StringUtils.isEmpty(educationExpRECInfo.getMajor())) {
+                if (com.kingdee.util.StringUtils.isEmpty(educationExpRECInfo.getMajor())) {
                     throw new BOSException("教育经历:专业不能为空" + errorMsg);
                 }
-                if (StringUtils.isEmpty(educationExpRECInfo.getSchool())) {
+                if (com.kingdee.util.StringUtils.isEmpty(educationExpRECInfo.getSchool())) {
                     throw new BOSException("教育经历:毕业院校不能为空" + errorMsg);
                 }
                 if (educationExpRECInfo.getDegreeF7() == null) {
@@ -1130,7 +1389,6 @@ public class RecuritmentFacadeControllerBean extends AbstractRecuritmentFacadeCo
             logger.error("社会关系保存失败!" + e.getMessage());
             throw new RuntimeException(e);
         }
-
     }
 
 

+ 11 - 11
src/com/kingdee/eas/custom/recuritment/utils/AttachmentUtils.java

@@ -3,6 +3,8 @@ package com.kingdee.eas.custom.recuritment.utils;
 import com.kingdee.bos.BOSException;
 import com.kingdee.bos.Context;
 import com.kingdee.bos.ctrl.swing.StringUtils;
+import com.kingdee.bos.dao.IObjectPK;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
 import com.kingdee.bos.metadata.entity.EntityViewInfo;
 import com.kingdee.bos.metadata.entity.FilterInfo;
 import com.kingdee.bos.metadata.entity.FilterItemCollection;
@@ -36,19 +38,19 @@ public class AttachmentUtils {
      * 删除附件信息
      *
      * @param ctx
-     * @param boid 附件挂载Id
+     * @param sql 条件
      * @throws BOSException
      * @throws EASBizException
      */
-    public static void deleteAttachment(Context ctx, String boid) throws BOSException, EASBizException {
+    public static void deleteAttachment(Context ctx, String sql) throws BOSException, EASBizException {
         //查询附件扩展表
         ISHRAttachmentExt ishrAttachmentExt = SHRAttachmentExtFactory.getLocalInstance(ctx);
-        SHRAttachmentExtCollection shrAttachmentExtCollection =
-                ishrAttachmentExt.getSHRAttachmentExtCollection("where boid = '" + boid + "' and (attachment.name like '%标准简历%' or attachment.name like '%面试评价%' )");
+        SHRAttachmentExtCollection shrAttachmentExtCollection = ishrAttachmentExt.getSHRAttachmentExtCollection(sql);
         Set delAtt = new HashSet();
         for (int i = 0; i < shrAttachmentExtCollection.size(); i++) {
             SHRAttachmentExtInfo shrAttachmentExtInfo = shrAttachmentExtCollection.get(i);
             AttachmentInfo attachment = shrAttachmentExtInfo.getAttachment();
+            ishrAttachmentExt.delete(new ObjectUuidPK(shrAttachmentExtInfo.getId()));
             delAtt.add(attachment.getId());
         }
         if (delAtt.size() > 0) {
@@ -60,7 +62,6 @@ public class AttachmentUtils {
             //删除附件扩展表和关联关系表数据
             FilterInfo dleExFilter = new FilterInfo();
             dleExFilter.getFilterItems().add(new FilterItemInfo("attachment.id", delAtt, CompareType.INCLUDE));
-            ishrAttachmentExt.delete(dleExFilter);
             BoAttchAssoFactory.getLocalInstance(ctx).delete(dleExFilter);
         }
     }
@@ -72,7 +73,7 @@ public class AttachmentUtils {
      * @throws BOSException
      * @throws EASBizException
      */
-    public static void insertAttachment(Context ctx, String filename, ResumeBaseRecInfo resumeInfo, byte[] data) {
+    public static void insertAttachment(Context ctx, String filename, ResumeBaseRecInfo resumeInfo, byte[] data, String oldfileName) {
         try {
             //if (data.length > 20971520) {
             //    throw new BOSException("保存附件失败,附件大小超过20MB!");
@@ -93,17 +94,17 @@ public class AttachmentUtils {
             ai.setSharedDesc("否");
             ai.setAttachID("" + System.currentTimeMillis());
             ai.setType(getFileType(filename));
-
+            AttachmentFactory.getLocalInstance(ctx).addnew(ai);
             attchExt.setAttachment(ai);
             attchExt.setName(filename);
             attchExt.setPropertyName("null0");
             attchExt.setType(AttachmentTypeEnum.FORM);
-            attchExt.setState(AttachmentState.UNSAVE);
 //            attchExt.setBunding(userId + "#" + uipk);
             attchExt.setBoID(boId);
             attchExt.setState(AttachmentState.SAVE);
-            AttachmentFactory.getLocalInstance(ctx).addnew(ai);
-            attchExt.setState(AttachmentState.SAVE);
+            attchExt.setSimpleName(oldfileName);
+            SHRAttachmentExtFactory.getLocalInstance(ctx).addnew(attchExt);
+
             BoAttchAssoInfo boAttchAssoInfo = new BoAttchAssoInfo();
             boAttchAssoInfo.setBoID(boId);
             boAttchAssoInfo.setAssoBusObjType(String.valueOf(BOSUuid.getBOSObjectType(boId, true)));
@@ -111,7 +112,6 @@ public class AttachmentUtils {
             boAttchAssoInfo.setAttachment(ai);
             BoAttchAssoFactory.getLocalInstance(ctx).addnew(boAttchAssoInfo);
 
-            SHRAttachmentExtFactory.getLocalInstance(ctx).addnew(attchExt);
         } catch (EASBizException e) {
             e.printStackTrace();
         } catch (BOSException e) {

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است