123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- package com.kingdee.shr.compensation.app.integrate;
-
- import com.kingdee.bos.BOSException;
- import com.kingdee.bos.Context;
- import com.kingdee.bos.util.BOSUuid;
- import com.kingdee.bos.util.EASResource;
- import com.kingdee.eas.common.EASBizException;
- import com.kingdee.eas.hr.base.HRBillStateEnum;
- import com.kingdee.eas.util.app.DbUtil;
- import com.kingdee.shr.compensation.app.utils.DateRange;
- import com.kingdee.shr.compensation.app.utils.SubConstants;
- import com.kingdee.shr.compensation.app.utils.SubmitShemeUtils;
- import com.kingdee.util.NumericExceptionSubItem;
- import bsh.StringUtil;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.List;
- import java.util.Map;
- import java.util.Optional;
- import java.util.Set;
- import org.apache.commons.lang3.ObjectUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.log4j.Logger;
- /**
- * 提报拓展
- * @author coyle
- * 20250601
- */
- public class BatchSubmitShemeBillControllerBeanEx extends BatchSubmitShemeBillControllerBean {
- private static final Logger logger = Logger.getLogger(BatchSubmitShemeBillControllerBeanEx.class);
- private static SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");
- private static Map<String,String> FEILDS = new HashMap();
- /**
- * 设置点检率数据
- * @param ctx
- * @param info
- * @param billId
- * @throws BOSException
- * @throws EASBizException
- */
- protected void setMesData(Context ctx, BatchSubmitShemeBillInfo info, String billId)
- throws BOSException, EASBizException {
- String id = info.getSubmitScheme().getId().toString();
- CalSubmitSchemeInfo calSubmitSchemeInfo = CalSubmitSchemeFactory.getLocalInstance(ctx) .getCalSubmitSchemeInfo(" where id = '" + id + "'");
- if (null != calSubmitSchemeInfo.getSubmitSchemeType() && 4 == calSubmitSchemeInfo.getSubmitSchemeType().getValue()) {
- BatchSubmitShemeBillEntryCollection coll = info.getEntry();
- if (coll.isEmpty()) {
- return;
- }
- //
- HashSet<String> selectPerson = new HashSet();
- HashSet<String> selectDate = new HashSet();
- for (int i = 0; i < coll.size(); ++i) {
- BatchSubmitShemeBillEntryInfo entryInfo = coll.get(i);
- String personId = entryInfo.getPerson().getId().toString();
- selectPerson.add(personId);
- Date effectDate = entryInfo.getEffectDate();
- String formattedEffectDate = SDF.format(effectDate);
- selectDate.add(formattedEffectDate);
-
- }
- // 找出最大日期与最小日期
- DateRange dateRange = SubmitShemeUtils.findMinMaxDate(selectDate);
- HashMap<String, HashMap> mesData = SubmitShemeUtils.getMesData( ctx, selectPerson, dateRange);
- upMesData(ctx, info ,coll, mesData);
- }
- }
- /**
- * 设置点检率数据
- * @param ctx
- * @param info
- * @param entrys
- * @param mesData
- */
- public static void upMesData(Context ctx,BatchSubmitShemeBillInfo info, BatchSubmitShemeBillEntryCollection entrys, HashMap<String, HashMap> mesData) {
- try {
- //获取方案的字段
- CalSubmitSchemeInfo calSubmitSchemeInfo = info.getSubmitScheme();
- if(null == calSubmitSchemeInfo) {
- return;
- }
-
- String field = "1";
- CalSubmitItemCollection subColl = CalSubmitItemFactory.getLocalInstance(ctx)
- .getCalSubmitItemCollection("SELECT ID,FieldSn,number where number = '"+SubConstants.BOOLEANFIELD+"'");
- if(subColl.size()>0) {
- CalSubmitItemInfo calSubmitItemInfo = subColl.get(0);
- int fieldSn = calSubmitItemInfo.getFieldSn();
- field = "S"+fieldSn ;
- }
-
- //提报项目字段提取,用于后面做判断;
- Set<String> itemSet = new HashSet();
- String subSchemeId = calSubmitSchemeInfo.getId().toString();
- CalSubmitSchemeItemCollection calSubmitSchemeItemCollection = CalSubmitSchemeItemFactory.getLocalInstance(ctx).getCalSubmitSchemeItemCollection(" select calSubmitItem.number where calSubmitScheme = '"+subSchemeId+"'" );
- for(int i = 0;i<calSubmitSchemeItemCollection.size();i++) {
- CalSubmitSchemeItemInfo calSubmitSchemeItemInfo = calSubmitSchemeItemCollection.get(i);
- CalSubmitItemInfo calSubmitItem = calSubmitSchemeItemInfo.getCalSubmitItem();
- String itemNum = calSubmitItem.getNumber();
- itemSet.add(itemNum);
- }
- String[] itemNums = SubConstants.ITEMNUMS;
- //如果itemNums不包含itemSet 说明没有提报项目,则从itemNums中删除此元素;
- // 使用ArrayList作为中间容器
- List<String> tempList = new ArrayList<>();
- for (String item : itemNums) {
- if (itemSet.contains(item)) {
- tempList.add(item);
- }
- }
- //如果不存在提报项目则不添加,以免报错
- itemNums = tempList.toArray(new String[0]);
- logger.error("日提报赋值的字段"+itemNums.toString());
- if(ObjectUtils.isEmpty(FEILDS)) {
- FEILDS = SubmitShemeUtils.getFeilds(ctx);
- }
-
- String sql = " update T_HR_TimepieceBillEntry set " ;
- for(int i =0; i < itemNums.length ;i++ ) {
- String keyF = itemNums[i];
- String sqlFeild = FEILDS.get(keyF);
- sql = sql + sqlFeild + " = ? " ;
- if(i != itemNums.length -1 ) {
- sql += " , ";
- }
- }
- sql += " where fid = ? ";
- //需更新的MES单据的id;
- Set<String> checkbillIds = new HashSet();
- //sql参数
- List paramList = new ArrayList();
- for (int i = 0; i < entrys.size(); i++) {
- BatchSubmitShemeBillEntryInfo entry = entrys.get(i);
- String pId = entry.getPerson().getId().toString();
- Date effectDate = entry.getEffectDate();
- String eDate = SDF.format(effectDate);
- String key = pId + "_" + eDate;
- HashMap valMap = mesData.get(key);
-
- if (ObjectUtils.isEmpty(valMap)) {
- continue;
- }
-
- //最后这个是id
- Object[] paraObj = new Object[itemNums.length + 1];
- setParamsVal(itemNums, checkbillIds, entry, valMap, paraObj,field);
- paramList.add(paraObj);
- }
- logger.error("查询messql"+sql);
- DbUtil.executeBatch(ctx, sql, paramList);
- logger.error("提交赋值成功");
- //更新MES单据的状态
- SubmitShemeUtils.updateInspectionRate(ctx, info, checkbillIds);
- logger.error("点检率状态反写成功");
- } catch (BOSException e) {
- e.printStackTrace();
- }
- }
- /**
- * 设置参数值参数赋值;
- * @param itemNums
- * @param checkbillIds
- * @param entry
- * @param valMap
- * @param paraObj
- * @param field 标识字段; 是否需要更新
- */
- private static void setParamsVal(String[] itemNums, Set<String> checkbillIds, BatchSubmitShemeBillEntryInfo entry,
- HashMap valMap, Object[] paraObj,String field) {
- //如果为空说明还没保存,则不处理,交前端handler处理;
- if(ObjectUtils.isEmpty(entry.getId())) {
- return;
- }
- String booleanStr = "";
- if(!StringUtils.isEmpty(field)) {
- booleanStr = Optional.ofNullable( entry.getString(field)).orElse("");
- }
- for(int j =0; j < itemNums.length ;j++ ) {
- String keyF = itemNums[j];
- String valFeild = FEILDS.get(keyF);
- //如果是锁定的则不变更,使用原来的值;
- if(booleanStr.contains(valFeild)) {
- paraObj[j] = entry.get(valFeild);
- }else {
- //变更
- paraObj[j] = valMap.get(valFeild);
- }
- if( j == itemNums.length-1 ) {
- paraObj[itemNums.length] = entry.getId().toString();
- checkbillIds.add(FEILDS.get(SubConstants.MESID));
- }
- }
- }
-
- protected void beforeSave(Context ctx, BatchSubmitShemeBillInfo info) throws EASBizException, BOSException {
- if (!"EDIT".equalsIgnoreCase(String.valueOf(info.get("workFlowEdit")))) {
- this.checkBillExists(ctx, info);
- }
- HRBillStateEnum oldBillState = null;
- if (info.getId() != null) {
- BatchSubmitShemeBillCollection billInfoC = this.getBatchSubmitShemeBillCollection(ctx,
- "select id,billState where id = '" + info.getId().toString() + "'");
- oldBillState = billInfoC.isEmpty() ? null : billInfoC.get(0).getBillState();
- //点检率数据赋值;
- setMesData(ctx, info, info.getId().toString());
- }
- super.checkHRBillWorkFlowIsEdit(ctx, info, oldBillState);
- }
-
-
-
- private void checkBillExists(Context ctx, BatchSubmitShemeBillInfo info) throws EASBizException, BOSException {
- if (BatchSubmitShemeBillFactory.getLocalInstance(ctx)
- .exists("where number = '" + info.getNumber() + "' and billState > 1")) {
- throw new EASBizException(new NumericExceptionSubItem("002", EASResource
- .getString("com.kingdee.shr.compensation.resource.CommonResource", "label191", ctx.getLocale())));
- }
- }
- }
|