BatchSubmitShemeBillControllerBeanEx.java 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. package com.kingdee.shr.compensation.app.integrate;
  2. import com.kingdee.bos.BOSException;
  3. import com.kingdee.bos.Context;
  4. import com.kingdee.bos.util.BOSUuid;
  5. import com.kingdee.bos.util.EASResource;
  6. import com.kingdee.eas.common.EASBizException;
  7. import com.kingdee.eas.hr.base.HRBillStateEnum;
  8. import com.kingdee.eas.util.app.DbUtil;
  9. import com.kingdee.shr.compensation.app.utils.DateRange;
  10. import com.kingdee.shr.compensation.app.utils.SubConstants;
  11. import com.kingdee.shr.compensation.app.utils.SubmitShemeUtils;
  12. import com.kingdee.util.NumericExceptionSubItem;
  13. import bsh.StringUtil;
  14. import java.text.SimpleDateFormat;
  15. import java.util.ArrayList;
  16. import java.util.Date;
  17. import java.util.HashMap;
  18. import java.util.HashSet;
  19. import java.util.List;
  20. import java.util.Map;
  21. import java.util.Optional;
  22. import java.util.Set;
  23. import org.apache.commons.lang3.ObjectUtils;
  24. import org.apache.commons.lang3.StringUtils;
  25. import org.apache.log4j.Logger;
  26. /**
  27. * 提报拓展
  28. * @author coyle
  29. * 20250601
  30. */
  31. public class BatchSubmitShemeBillControllerBeanEx extends BatchSubmitShemeBillControllerBean {
  32. private static final Logger logger = Logger.getLogger(BatchSubmitShemeBillControllerBeanEx.class);
  33. private static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
  34. private static Map<String,String> FEILDS = new HashMap();
  35. /**
  36. * 设置点检率数据
  37. * @param ctx
  38. * @param info
  39. * @param billId
  40. * @throws BOSException
  41. * @throws EASBizException
  42. */
  43. protected void setMesData(Context ctx, BatchSubmitShemeBillInfo info, String billId)
  44. throws BOSException, EASBizException {
  45. String id = info.getSubmitScheme().getId().toString();
  46. CalSubmitSchemeInfo calSubmitSchemeInfo = CalSubmitSchemeFactory.getLocalInstance(ctx) .getCalSubmitSchemeInfo(" where id = '" + id + "'");
  47. if (null != calSubmitSchemeInfo.getSubmitSchemeType() && 4 == calSubmitSchemeInfo.getSubmitSchemeType().getValue()) {
  48. BatchSubmitShemeBillEntryCollection coll = info.getEntry();
  49. if (coll.isEmpty()) {
  50. return;
  51. }
  52. //
  53. HashSet<String> selectPerson = new HashSet();
  54. HashSet<String> selectDate = new HashSet();
  55. for (int i = 0; i < coll.size(); ++i) {
  56. BatchSubmitShemeBillEntryInfo entryInfo = coll.get(i);
  57. String personId = entryInfo.getPerson().getId().toString();
  58. selectPerson.add(personId);
  59. Date effectDate = entryInfo.getEffectDate();
  60. String formattedEffectDate = SDF.format(effectDate);
  61. selectDate.add(formattedEffectDate);
  62. }
  63. // 找出最大日期与最小日期
  64. DateRange dateRange = SubmitShemeUtils.findMinMaxDate(selectDate);
  65. HashMap<String, HashMap> mesData = SubmitShemeUtils.getMesData( ctx, selectPerson, dateRange);
  66. upMesData(ctx, info ,coll, mesData);
  67. }
  68. }
  69. /**
  70. * 设置点检率数据
  71. * @param ctx
  72. * @param info
  73. * @param entrys
  74. * @param mesData
  75. */
  76. public static void upMesData(Context ctx,BatchSubmitShemeBillInfo info, BatchSubmitShemeBillEntryCollection entrys, HashMap<String, HashMap> mesData) {
  77. try {
  78. //获取方案的字段
  79. CalSubmitSchemeInfo calSubmitSchemeInfo = info.getSubmitScheme();
  80. if(null == calSubmitSchemeInfo) {
  81. return;
  82. }
  83. String field = "1";
  84. CalSubmitItemCollection subColl = CalSubmitItemFactory.getLocalInstance(ctx)
  85. .getCalSubmitItemCollection("SELECT ID,FieldSn,number where number = '"+SubConstants.BOOLEANFIELD+"'");
  86. if(subColl.size()>0) {
  87. CalSubmitItemInfo calSubmitItemInfo = subColl.get(0);
  88. int fieldSn = calSubmitItemInfo.getFieldSn();
  89. field = "S"+fieldSn ;
  90. }
  91. //提报项目字段提取,用于后面做判断;
  92. Set<String> itemSet = new HashSet();
  93. String subSchemeId = calSubmitSchemeInfo.getId().toString();
  94. CalSubmitSchemeItemCollection calSubmitSchemeItemCollection = CalSubmitSchemeItemFactory.getLocalInstance(ctx).getCalSubmitSchemeItemCollection(" select calSubmitItem.number where calSubmitScheme = '"+subSchemeId+"'" );
  95. for(int i = 0;i<calSubmitSchemeItemCollection.size();i++) {
  96. CalSubmitSchemeItemInfo calSubmitSchemeItemInfo = calSubmitSchemeItemCollection.get(i);
  97. CalSubmitItemInfo calSubmitItem = calSubmitSchemeItemInfo.getCalSubmitItem();
  98. String itemNum = calSubmitItem.getNumber();
  99. itemSet.add(itemNum);
  100. }
  101. String[] itemNums = SubConstants.ITEMNUMS;
  102. //如果itemNums不包含itemSet 说明没有提报项目,则从itemNums中删除此元素;
  103. // 使用ArrayList作为中间容器
  104. List<String> tempList = new ArrayList<>();
  105. for (String item : itemNums) {
  106. if (itemSet.contains(item)) {
  107. tempList.add(item);
  108. }
  109. }
  110. //如果不存在提报项目则不添加,以免报错
  111. itemNums = tempList.toArray(new String[0]);
  112. logger.error("日提报赋值的字段"+itemNums.toString());
  113. if(ObjectUtils.isEmpty(FEILDS)) {
  114. FEILDS = SubmitShemeUtils.getFeilds(ctx);
  115. }
  116. String sql = " update T_HR_TimepieceBillEntry set " ;
  117. for(int i =0; i < itemNums.length ;i++ ) {
  118. String keyF = itemNums[i];
  119. String sqlFeild = FEILDS.get(keyF);
  120. sql = sql + sqlFeild + " = ? " ;
  121. if(i != itemNums.length -1 ) {
  122. sql += " , ";
  123. }
  124. }
  125. sql += " where fid = ? ";
  126. //需更新的MES单据的id;
  127. Set<String> checkbillIds = new HashSet();
  128. //sql参数
  129. List paramList = new ArrayList();
  130. for (int i = 0; i < entrys.size(); i++) {
  131. BatchSubmitShemeBillEntryInfo entry = entrys.get(i);
  132. String pId = entry.getPerson().getId().toString();
  133. Date effectDate = entry.getEffectDate();
  134. String eDate = SDF.format(effectDate);
  135. String key = pId + "_" + eDate;
  136. HashMap valMap = mesData.get(key);
  137. if (ObjectUtils.isEmpty(valMap)) {
  138. continue;
  139. }
  140. //最后这个是id
  141. Object[] paraObj = new Object[itemNums.length + 1];
  142. setParamsVal(itemNums, checkbillIds, entry, valMap, paraObj,field);
  143. paramList.add(paraObj);
  144. }
  145. logger.error("查询messql"+sql);
  146. DbUtil.executeBatch(ctx, sql, paramList);
  147. logger.error("提交赋值成功");
  148. //更新MES单据的状态
  149. SubmitShemeUtils.updateInspectionRate(ctx, info, checkbillIds);
  150. logger.error("点检率状态反写成功");
  151. } catch (BOSException e) {
  152. e.printStackTrace();
  153. }
  154. }
  155. /**
  156. * 设置参数值参数赋值;
  157. * @param itemNums
  158. * @param checkbillIds
  159. * @param entry
  160. * @param valMap
  161. * @param paraObj
  162. * @param field 标识字段; 是否需要更新
  163. */
  164. private static void setParamsVal(String[] itemNums, Set<String> checkbillIds, BatchSubmitShemeBillEntryInfo entry,
  165. HashMap valMap, Object[] paraObj,String field) {
  166. //如果为空说明还没保存,则不处理,交前端handler处理;
  167. if(ObjectUtils.isEmpty(entry.getId())) {
  168. return;
  169. }
  170. String booleanStr = "";
  171. if(!StringUtils.isEmpty(field)) {
  172. booleanStr = Optional.ofNullable( entry.getString(field)).orElse("");
  173. }
  174. for(int j =0; j < itemNums.length ;j++ ) {
  175. String keyF = itemNums[j];
  176. String valFeild = FEILDS.get(keyF);
  177. //如果是锁定的则不变更,使用原来的值;
  178. if(booleanStr.contains(valFeild)) {
  179. paraObj[j] = entry.get(valFeild);
  180. }else {
  181. //变更
  182. paraObj[j] = valMap.get(valFeild);
  183. }
  184. if( j == itemNums.length-1 ) {
  185. paraObj[itemNums.length] = entry.getId().toString();
  186. checkbillIds.add(FEILDS.get(SubConstants.MESID));
  187. }
  188. }
  189. }
  190. protected void beforeSave(Context ctx, BatchSubmitShemeBillInfo info) throws EASBizException, BOSException {
  191. if (!"EDIT".equalsIgnoreCase(String.valueOf(info.get("workFlowEdit")))) {
  192. this.checkBillExists(ctx, info);
  193. }
  194. HRBillStateEnum oldBillState = null;
  195. if (info.getId() != null) {
  196. BatchSubmitShemeBillCollection billInfoC = this.getBatchSubmitShemeBillCollection(ctx,
  197. "select id,billState where id = '" + info.getId().toString() + "'");
  198. oldBillState = billInfoC.isEmpty() ? null : billInfoC.get(0).getBillState();
  199. //点检率数据赋值;
  200. setMesData(ctx, info, info.getId().toString());
  201. }
  202. super.checkHRBillWorkFlowIsEdit(ctx, info, oldBillState);
  203. }
  204. private void checkBillExists(Context ctx, BatchSubmitShemeBillInfo info) throws EASBizException, BOSException {
  205. if (BatchSubmitShemeBillFactory.getLocalInstance(ctx)
  206. .exists("where number = '" + info.getNumber() + "' and billState > 1")) {
  207. throw new EASBizException(new NumericExceptionSubItem("002", EASResource
  208. .getString("com.kingdee.shr.compensation.resource.CommonResource", "label191", ctx.getLocale())));
  209. }
  210. }
  211. }