소스 검색

手机押金修改

zqy 4 일 전
부모
커밋
653f044d74

+ 13 - 0
src/com/kingdee/eas/custom/compensation/client/HandMacDepositEditUI.java

@@ -4,6 +4,9 @@
 package com.kingdee.eas.custom.compensation.client;
 
 import java.awt.event.*;
+
+import com.kingdee.eas.framework.client.multiDetail.DetailPanel;
+import com.kingdee.eas.hr.base.client.IHRBillEditUIBiz;
 import org.apache.log4j.Logger;
 import com.kingdee.bos.ui.face.CoreUIObject;
 import com.kingdee.bos.dao.IObjectValue;
@@ -400,6 +403,16 @@ public class HandMacDepositEditUI extends AbstractHandMacDepositEditUI
         super.actionPrintPreview_actionPerformed(e);
     }
 
+    @Override
+    protected IHRBillEditUIBiz getBillBiz() {
+        return null;
+    }
+
+    @Override
+    protected DetailPanel getIgnoredDetailPanel() {
+        return null;
+    }
+
     /**
      * output actionCopy_actionPerformed
      */

+ 7 - 0
src/com/kingdee/eas/custom/compensation/client/HandMacDepositListUI.java

@@ -4,6 +4,8 @@
 package com.kingdee.eas.custom.compensation.client;
 
 import java.awt.event.*;
+
+import com.kingdee.eas.hr.base.client.IHRBillListUIBiz;
 import org.apache.log4j.Logger;
 import com.kingdee.bos.ui.face.CoreUIObject;
 import com.kingdee.bos.dao.IObjectValue;
@@ -24,6 +26,11 @@ public class HandMacDepositListUI extends AbstractHandMacDepositListUI
         super();
     }
 
+    @Override
+    protected IHRBillListUIBiz getBillBiz() {
+        return null;
+    }
+
     /**
      * output storeFields method
      */

+ 105 - 17
src/com/kingdee/eas/custom/compensation/task/DepositTaskFacadeControllerBean.java

@@ -1,26 +1,114 @@
 package com.kingdee.eas.custom.compensation.task;
 
+
+import com.kingdee.bos.metadata.entity.SelectorItemCollection;
+import com.kingdee.bos.metadata.entity.SelectorItemInfo;
+import com.kingdee.shr.base.syssetting.app.osf.OSFAppUtil;
+import com.kingdee.shr.compensation.CalSchemeCollection;
+import com.kingdee.shr.compensation.CalSchemeFactory;
+import com.kingdee.shr.compensation.CalSchemeInfo;
+import com.kingdee.shr.compensation.ICalScheme;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
-import javax.ejb.*;
-import java.rmi.RemoteException;
+
+
 import com.kingdee.bos.*;
-import com.kingdee.bos.util.BOSObjectType;
-import com.kingdee.bos.metadata.IMetaDataPK;
-import com.kingdee.bos.metadata.rule.RuleExecutor;
-import com.kingdee.bos.metadata.MetaDataPK;
-//import com.kingdee.bos.metadata.entity.EntityViewInfo;
-import com.kingdee.bos.framework.ejb.AbstractEntityControllerBean;
-import com.kingdee.bos.framework.ejb.AbstractBizControllerBean;
-//import com.kingdee.bos.dao.IObjectPK;
-import com.kingdee.bos.dao.IObjectValue;
-import com.kingdee.bos.dao.IObjectCollection;
-import com.kingdee.bos.service.ServiceContext;
-import com.kingdee.bos.service.IServiceContext;
+
 
 import java.lang.String;
+import java.text.SimpleDateFormat;
+import java.util.HashMap;
+import java.util.Map;
 
-public class DepositTaskFacadeControllerBean extends AbstractDepositTaskFacadeControllerBean
-{
+/**
+ * 后台任务定时生成
+ */
+public class DepositTaskFacadeControllerBean extends AbstractDepositTaskFacadeControllerBean {
     private static Logger logger =
-        Logger.getLogger("com.kingdee.eas.custom.compensation.task.DepositTaskFacadeControllerBean");
+            Logger.getLogger("com.kingdee.eas.custom.compensation.task.DepositTaskFacadeControllerBean");
+
+    @Override
+    protected String _exceDeposit(Context ctx, String calSchemeID, String beginDate, String endDate, String personIds) throws BOSException {
+        String result = null;
+
+        try {
+            if (StringUtils.isBlank(calSchemeID)) {
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                ICalScheme scheme = CalSchemeFactory.getLocalInstance(ctx);
+                CalSchemeCollection calSchemeCon = scheme.getCalSchemeCollection("where state=1 ");
+                SelectorItemCollection selcon = new SelectorItemCollection();
+                selcon.add(new SelectorItemInfo("simpleName"));
+                for (int i = 0; null != calSchemeCon && i < calSchemeCon.size(); i++) {
+                    CalSchemeInfo calSchemeInfo = (CalSchemeInfo) calSchemeCon.get(i);
+                    //获取处理标记(上次执行时记录的开始日期、结束日期、计薪次数,逗号分隔)
+                    String desc = calSchemeInfo.getSimpleName();
+                    String beginDateStr = sdf.format(calSchemeInfo.getBeginDate());
+                    String endDateStr = sdf.format(calSchemeInfo.getEndDate());
+                    int calTime = calSchemeInfo.getCalTime();
+                    String desc1 = beginDateStr + "," + endDateStr + "," + calTime;
+
+                    Map<String, Object> map = new HashMap<String, Object>();
+                    map.put("personIds", personIds);
+                    map.put("calSchemeId", calSchemeInfo.getId());
+
+                    //由于可能存在跨月份没有同步,在首次处理跨月份时需要先处理一遍上月的数据,再处理本月的数据。
+                    //手动指定开始日期,结束日期除外
+                    if (null != desc && desc.indexOf(",") > 0) {
+                        String[] descArr = desc.split(",");
+                        if (descArr.length < 3 || desc.equals(desc1)) {
+                            // 历史标记格式不完整或与当前方案一致,跳过补算
+                        } else {
+                            Map<String, Object> map1 = new HashMap<String, Object>();
+                            map1.put("personIds", personIds);
+                            map1.put("calSchemeId", calSchemeInfo.getId());
+
+                            if (beginDate != null) {
+                                map1.put("beginDate", beginDate);
+                            } else {
+                                map1.put("beginDate", descArr[0]);
+                            }
+                            if (endDate != null) {
+                                map1.put("endDate", endDate);
+                            } else {
+                                map1.put("endDate", descArr[1]);
+                            }
+                            // 补算使用上次记录的calTime
+                            map1.put("calTime", descArr[2]);
+
+                            OSFAppUtil.callService(ctx, "handMacDepositOSFService", map1);
+                        }
+                    }
+                    if (beginDate != null) {
+                        map.put("beginDate", beginDate);
+                    } else {
+                        map.put("beginDate", sdf.format(calSchemeInfo.getBeginDate()));
+                        map.put("calTime", calSchemeInfo.getCalTime());
+                    }
+                    if (endDate != null) {
+                        map.put("endDate", endDate);
+                    } else {
+                        map.put("endDate", sdf.format(calSchemeInfo.getEndDate()));
+                        map.put("calTime", calSchemeInfo.getCalTime());
+                    }
+
+                    Object obj = OSFAppUtil.callService(ctx, "handMacDepositOSFService", map);
+                    result = (null != obj) ? obj.toString() : null;
+                    calSchemeInfo.setSimpleName(desc1);
+                    scheme.updatePartial(calSchemeInfo, selcon);
+                }
+            } else {
+                Map<String, Object> map = new HashMap<String, Object>();
+                map.put("personIds", personIds);
+                map.put("calSchemeId", calSchemeID);
+                map.put("beginDate", beginDate);
+                map.put("endDate", endDate);
+                Object obj = OSFAppUtil.callService(ctx, "handMacDepositOSFService", map);
+                result = (null != obj) ? obj.toString() : null;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            result = e.getMessage();
+        }
+        return result;
+    }
 }

+ 11 - 0
websrc/com/kingdee/eas/custom/compensation/handler/HandMacDepositListHandler.java

@@ -0,0 +1,11 @@
+package com.kingdee.eas.custom.compensation.handler;
+
+import com.kingdee.shr.base.syssetting.web.handler.ListHandler;
+
+public class HandMacDepositListHandler extends ListHandler {
+
+
+    public  HandMacDepositListHandler()
+    {}
+
+}

+ 262 - 0
websrc/com/kingdee/eas/custom/compensation/osf/HandMacDepositOSFService.java

@@ -0,0 +1,262 @@
+package com.kingdee.eas.custom.compensation.osf;
+
+import com.kingdee.bos.BOSException;
+import com.kingdee.bos.Context;
+import com.kingdee.bos.bsf.service.app.IHRMsfService;
+import com.kingdee.bos.dao.ormapping.ObjectUuidPK;
+import com.kingdee.bos.util.BOSUuid;
+import com.kingdee.eas.basedata.org.AdminOrgUnitInfo;
+import com.kingdee.eas.basedata.person.PersonInfo;
+import com.kingdee.eas.common.EASBizException;
+import com.kingdee.eas.custom.compensation.*;
+import com.kingdee.eas.framework.CoreBaseCollection;
+import com.kingdee.eas.util.app.DbUtil;
+import com.kingdee.jdbc.rowset.IRowSet;
+import com.kingdee.shr.compensation.CalSchemeCollection;
+import com.kingdee.shr.compensation.CalSchemeFactory;
+import com.kingdee.shr.compensation.CalSchemeInfo;
+import com.kingdee.shr.compensation.ICalScheme;
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 处理生成手机押金单据
+ */
+public class HandMacDepositOSFService implements IHRMsfService {
+    @Override
+    public Object process(Context context, Map map) throws EASBizException, BOSException {
+        IHandMacDeposit handMacDeposit = HandMacDepositFactory.getLocalInstance(context);
+        String calSchemeID = (String) map.get("calSchemeID");
+        String beginDate = (String) map.get("beginDate");
+        String endDate = (String) map.get("endDate");
+        String calTime = (String) map.get("calTime");
+        String s204 = (String) map.get("s204");
+        String s205 = (String) map.get("s205");
+        try {
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+            if(null==calSchemeID){
+                return "calSchemeID为空";
+            }
+            if(null==s204){
+                return "s204为空";
+            }
+            if(null==s205){
+                return "s205为空";
+            }
+            String personIds = (String) map.get("personIds");
+            StringBuilder sql = new StringBuilder();
+            List<Object> sqlParams = new ArrayList<Object>();
+            sql.append(" select ");
+            sql.append(" b.fid, ");
+            sql.append(" b.fnumber, ");
+            sql.append(" b.FAdminOrgUnitID, ");
+            sql.append(" b.FCostBearOrgID, ");
+            sql.append(" b.fpersonid, ");
+            sql.append(" costBearOrg.Fname_l2 costBearOrgName, ");
+            sql.append(" b.FBeginDate, ");
+            sql.append(" b." + s204 + ", ");
+            sql.append(" b." + s205 + " ");
+            sql.append(" from T_HR_SCMPCALTABLE b ");
+            sql.append(" left join t_org_admin costBearOrg on b.FCostBearOrgID = costBearOrg.FAdminOrgUnitID ");
+            sql.append(" where b.FCalSchemeID=? and b.FCalState in(12,20) and (b." + s204 + " is not null or b." + s205 + " is not null) ");
+            sqlParams.add(calSchemeID);
+            // 修复3:personIds 改用参数化查询,防止SQL注入
+            if (StringUtils.isNotBlank(personIds)) {
+                String[] ids = personIds.split(",");
+                sql.append(" and b.fpersonid in (");
+                for (int i = 0; i < ids.length; i++) {
+                    if (i > 0) {
+                        sql.append(",");
+                    }
+                    sql.append("?");
+                    sqlParams.add(ids[i].trim());
+                }
+                sql.append(") ");
+            }
+            if(null==beginDate || null==endDate){
+                ICalScheme scheme = CalSchemeFactory.getLocalInstance(context);
+                CalSchemeInfo calSchemeCon = scheme.getCalSchemeInfo(new ObjectUuidPK(calSchemeID));
+                beginDate= sdf.format(calSchemeCon.getBeginDate());
+                endDate = sdf.format(calSchemeCon.getEndDate());
+            }
+            sql.append(" and b.FBeginDate >= ? ");
+            sqlParams.add(beginDate);
+            sql.append(" and b.FEndDate <= ? ");
+            sqlParams.add(endDate);
+
+            if(null!=calTime) {
+                sql.append(" and b.FcalTime = ? ");
+                sqlParams.add(calTime);
+            }
+            sql.append(" order by b.FPeriodYear,b.FPeriodMonth,b.FCalTime ");
+            IRowSet rs = DbUtil.executeQuery(context, sql.toString(), sqlParams.toArray());
+            while (rs.next()) {
+                String id = rs.getString("fid");
+                String fnumber = rs.getString("fnumber");
+                String FAdminOrgUnitID = rs.getString("FAdminOrgUnitID");
+                String FCostBearOrgID = rs.getString("FCostBearOrgID");
+                String costBearOrgName = rs.getString("costBearOrgName");
+                String personId = rs.getString("fpersonid");
+
+                Date FBeginDate = rs.getDate("FBeginDate");
+                BigDecimal Fs204 = rs.getBigDecimal(s204);
+                BigDecimal Fs205 = rs.getBigDecimal(s205);
+
+                // 查询该人员所有生效的押金单据
+                HandMacDepositCollection existingDocs = handMacDeposit.getHandMacDepositCollection(
+                        "where person.id ='" + personId + "' and isEffected=1 ");
+                CoreBaseCollection docsToSave = new CoreBaseCollection();
+
+                HandMacDepositInfo oldDoc = null;
+                if (existingDocs != null && !existingDocs.isEmpty()) {
+                    // 修复1:只取第一条作为有效历史单据,多余的置为失效(清理脏数据)
+                    oldDoc = existingDocs.get(0);
+                    for (int i = 1; i < existingDocs.size(); i++) {
+                        HandMacDepositInfo extraDoc = existingDocs.get(i);
+                        extraDoc.setIsEffected(false);
+                        docsToSave.add(extraDoc);
+                    }
+
+                    // 修复2:判断是否可以直接更新已有单据
+                    // 收取押金场景:用 sourceBillId 匹配
+                    // 仅退回押金场景:用 sourceFunction 匹配
+                    boolean matched = false;
+                    if (null != Fs204 && id.equals(oldDoc.getSourceBillId())) {
+                        matched = true;
+                    } else if (null == Fs204 && null != Fs205 && id.equals(oldDoc.getSourceFunction())) {
+                        matched = true;
+                    }
+
+                    if (matched) {
+                        // 同一来源,直接更新已有单据
+                        if (null != Fs204) {
+                            AdminOrgUnitInfo CostBearOrg = new AdminOrgUnitInfo();
+                            CostBearOrg.setId(BOSUuid.read(FCostBearOrgID));
+                            oldDoc.setCollectUnit(CostBearOrg);
+                            oldDoc.setDepositCollectUnit(costBearOrgName);
+                            oldDoc.setDepositCollectCycle(FBeginDate);
+                            oldDoc.setDepositAmount(Fs204);
+                            oldDoc.setSourceBillId(id);
+                            oldDoc.setIsEffected(true);
+                        }
+                        if (null != Fs205) {
+                            AdminOrgUnitInfo CostBearOrg = new AdminOrgUnitInfo();
+                            CostBearOrg.setId(BOSUuid.read(FCostBearOrgID));
+                            oldDoc.setRefundUnit(CostBearOrg);
+                            oldDoc.setDepositRefundUnit(costBearOrgName);
+                            oldDoc.setDepositRefundCycle(FBeginDate);
+                            oldDoc.setDepositRefundAmount(Fs205);
+                            oldDoc.setSourceFunction(id);
+                        }
+                        docsToSave.add(oldDoc);
+                    } else {
+                        // 来源不匹配:旧单据失效,创建新单据,合并旧数据防止丢失
+                        oldDoc.setIsEffected(false);
+                        docsToSave.add(oldDoc);
+
+                        HandMacDepositInfo newDoc = new HandMacDepositInfo();
+                        newDoc.setIsEffected(true);
+                        // 设置表头信息
+                        AdminOrgUnitInfo adminOrgUnitInfo = new AdminOrgUnitInfo();
+                        adminOrgUnitInfo.setId(BOSUuid.read(FAdminOrgUnitID));
+                        newDoc.setAdminOrgUnit(adminOrgUnitInfo);
+                        newDoc.setAdminOrg(adminOrgUnitInfo);
+                        PersonInfo personInfo = new PersonInfo();
+                        personInfo.setId(BOSUuid.read(personId));
+                        newDoc.setPerson(personInfo);
+                        newDoc.setPersonNumber(fnumber);
+                        newDoc.setNumber(id);
+                        newDoc.setDescription(calSchemeID);
+
+                        // 设置收取押金字段
+                        if (null != Fs204) {
+                            AdminOrgUnitInfo CostBearOrg = new AdminOrgUnitInfo();
+                            CostBearOrg.setId(BOSUuid.read(FCostBearOrgID));
+                            newDoc.setCollectUnit(CostBearOrg);
+                            newDoc.setDepositCollectUnit(costBearOrgName);
+                            newDoc.setDepositCollectCycle(FBeginDate);
+                            newDoc.setDepositAmount(Fs204);
+                            newDoc.setSourceBillId(id);
+                        } else {
+                            // 修复1:当前行没有收取押金,从旧单据继承,防止数据丢失
+                            if (oldDoc.getDepositAmount() != null) {
+                                newDoc.setDepositAmount(oldDoc.getDepositAmount());
+                                newDoc.setDepositCollectCycle(oldDoc.getDepositCollectCycle());
+                                newDoc.setDepositCollectUnit(oldDoc.getDepositCollectUnit());
+                                newDoc.setCollectUnit(oldDoc.getCollectUnit());
+                                newDoc.setSourceBillId(oldDoc.getSourceBillId());
+                            }
+                        }
+
+                        // 设置退回押金字段
+                        if (null != Fs205) {
+                            AdminOrgUnitInfo CostBearOrg = new AdminOrgUnitInfo();
+                            CostBearOrg.setId(BOSUuid.read(FCostBearOrgID));
+                            newDoc.setRefundUnit(CostBearOrg);
+                            newDoc.setDepositRefundUnit(costBearOrgName);
+                            newDoc.setDepositRefundCycle(FBeginDate);
+                            newDoc.setDepositRefundAmount(Fs205);
+                            newDoc.setSourceFunction(id);
+                        } else {
+                            // 修复1:当前行没有退回押金,从旧单据继承,防止数据丢失
+                            if (oldDoc.getDepositRefundAmount() != null) {
+                                newDoc.setDepositRefundAmount(oldDoc.getDepositRefundAmount());
+                                newDoc.setDepositRefundCycle(oldDoc.getDepositRefundCycle());
+                                newDoc.setDepositRefundUnit(oldDoc.getDepositRefundUnit());
+                                newDoc.setRefundUnit(oldDoc.getRefundUnit());
+                                newDoc.setSourceFunction(oldDoc.getSourceFunction());
+                            }
+                        }
+                        docsToSave.add(newDoc);
+                    }
+                }
+                else {
+                    // 无历史单据:直接创建新单据
+                    HandMacDepositInfo newDoc = new HandMacDepositInfo();
+                    newDoc.setIsEffected(true);
+                    AdminOrgUnitInfo adminOrgUnitInfo = new AdminOrgUnitInfo();
+                    adminOrgUnitInfo.setId(BOSUuid.read(FAdminOrgUnitID));
+                    newDoc.setAdminOrgUnit(adminOrgUnitInfo);
+                    newDoc.setAdminOrg(adminOrgUnitInfo);
+                    PersonInfo personInfo = new PersonInfo();
+                    personInfo.setId(BOSUuid.read(personId));
+                    newDoc.setPerson(personInfo);
+                    newDoc.setPersonNumber(fnumber);
+                    newDoc.setNumber(id);
+                    newDoc.setDescription(calSchemeID);
+
+                    if (null != Fs204) {
+                        AdminOrgUnitInfo CostBearOrg = new AdminOrgUnitInfo();
+                        CostBearOrg.setId(BOSUuid.read(FCostBearOrgID));
+                        newDoc.setCollectUnit(CostBearOrg);
+                        newDoc.setDepositCollectUnit(costBearOrgName);
+                        newDoc.setDepositCollectCycle(FBeginDate);
+                        newDoc.setDepositAmount(Fs204);
+                        newDoc.setSourceBillId(id);
+                    }
+                    if (null != Fs205) {
+                        AdminOrgUnitInfo CostBearOrg = new AdminOrgUnitInfo();
+                        CostBearOrg.setId(BOSUuid.read(FCostBearOrgID));
+                        newDoc.setRefundUnit(CostBearOrg);
+                        newDoc.setDepositRefundUnit(costBearOrgName);
+                        newDoc.setDepositRefundCycle(FBeginDate);
+                        newDoc.setDepositRefundAmount(Fs205);
+                        newDoc.setSourceFunction(id);
+                    }
+                    docsToSave.add(newDoc);
+                }
+                handMacDeposit.save(docsToSave);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "err";
+        }
+        return "ok";
+    }
+}