| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- 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";
- }
- }
|