|
@@ -17,16 +17,17 @@ import kd.bos.orm.query.QFilter;
|
|
import kd.bos.schedule.executor.AbstractTask;
|
|
import kd.bos.schedule.executor.AbstractTask;
|
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
import kd.bos.servicehelper.QueryServiceHelper;
|
|
import kd.bos.servicehelper.QueryServiceHelper;
|
|
|
|
+import kd.bos.servicehelper.coderule.CodeRuleServiceHelper;
|
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
import kd.bos.util.CollectionUtils;
|
|
import kd.bos.util.CollectionUtils;
|
|
|
|
+import kd.bos.util.StringUtils;
|
|
import nckd.jimin.jyyy.fi.common.constant.BillTypeConstants;
|
|
import nckd.jimin.jyyy.fi.common.constant.BillTypeConstants;
|
|
import nckd.jimin.jyyy.fi.common.constant.travelcheck.*;
|
|
import nckd.jimin.jyyy.fi.common.constant.travelcheck.*;
|
|
import nckd.jimin.jyyy.fi.common.util.CommonUtils;
|
|
import nckd.jimin.jyyy.fi.common.util.CommonUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
-import java.time.LocalDate;
|
|
|
|
-import java.time.LocalDateTime;
|
|
|
|
-import java.time.ZoneId;
|
|
|
|
|
|
+import java.text.ParseException;
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -36,25 +37,45 @@ import java.util.stream.Collectors;
|
|
public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
|
|
|
|
private static final Log logger = LogFactory.getLog(TravelFinanConfirmCreateTask.class);
|
|
private static final Log logger = LogFactory.getLog(TravelFinanConfirmCreateTask.class);
|
|
|
|
+
|
|
|
|
+ private Date startDate;
|
|
|
|
+
|
|
@Override
|
|
@Override
|
|
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
|
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
|
|
logger.info("TravelFinanConfirmCreateTask begin");
|
|
logger.info("TravelFinanConfirmCreateTask begin");
|
|
|
|
+ startDate = new Date();
|
|
// 创建当月的财务底稿确认单
|
|
// 创建当月的财务底稿确认单
|
|
- String period = CommonUtils.parsePeriod(new Date());
|
|
|
|
- if(ORM.create().exists(FinanceBillConfirmConstant.ENTITYID,
|
|
|
|
- new QFilter(FinanceBillConfirmConstant.NCKD_CHECKMONTH, QCP.equals, period).toArray())){
|
|
|
|
- logger.info(String.format("期间[%s]已经存在商旅对账确认单,请勿重复创建!", period));
|
|
|
|
- return;
|
|
|
|
|
|
+ if(map.containsKey("startDate")){
|
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
|
|
|
|
+ try {
|
|
|
|
+ startDate = sdf.parse((String)map.get("startDate"));
|
|
|
|
+ } catch (ParseException e) {
|
|
|
|
+ throw new RuntimeException(e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 开始日期取当月第一天
|
|
|
|
+ startDate = getFirstDayOfMonth(startDate);
|
|
|
|
+ String period = CommonUtils.parsePeriod(getFirstDayOfPreviousMonth(startDate));
|
|
|
|
+ DynamicObject financeConfirmInfo = BusinessDataServiceHelper.loadSingle(FinanceBillConfirmConstant.ENTITYID,
|
|
|
|
+ FinanceBillConfirmConstant.ID,
|
|
|
|
+ new QFilter(FinanceBillConfirmConstant.NCKD_CHECKMONTH, QCP.equals, period).toArray());
|
|
|
|
+ if(financeConfirmInfo != null){
|
|
|
|
+// logger.info(String.format("期间[%s]已经存在商旅对账确认单,请勿重复创建!", period));
|
|
|
|
+// return;
|
|
|
|
+ financeConfirmInfo = BusinessDataServiceHelper.loadSingle(financeConfirmInfo.getPkValue(),financeConfirmInfo.getDynamicObjectType().getName());
|
|
|
|
+ }else{
|
|
|
|
+ financeConfirmInfo = BusinessDataServiceHelper.newDynamicObject(FinanceBillConfirmConstant.ENTITYID);
|
|
|
|
+ // 创建ID,用ID来清除已创建的数据
|
|
|
|
+ long financeConfirmId = ID.genLongId();
|
|
|
|
+ String number = CodeRuleServiceHelper.getNumber(FinanceBillConfirmConstant.ENTITYID, financeConfirmInfo, null);
|
|
|
|
+ financeConfirmInfo.set(FinanceBillConfirmConstant.KEY_BILLNO, number);
|
|
|
|
+ financeConfirmInfo.set(FinanceBillConfirmConstant.ID, financeConfirmId);
|
|
|
|
+ financeConfirmInfo.set(FinanceBillConfirmConstant.NCKD_CHECKMONTH, period);
|
|
|
|
+ financeConfirmInfo.set(FinanceBillConfirmConstant.KEY_BILLSTATUS, "A");
|
|
}
|
|
}
|
|
try(TXHandle tx = TX.requiresNew(this.getClass().getName())){
|
|
try(TXHandle tx = TX.requiresNew(this.getClass().getName())){
|
|
try {
|
|
try {
|
|
|
|
|
|
- DynamicObject financeConfirmInfo = BusinessDataServiceHelper.newDynamicObject(FinanceBillConfirmConstant.ENTITYID);
|
|
|
|
- // 创建ID,用ID来清除已创建的数据
|
|
|
|
- long financeConfirmId = ID.genLongId();
|
|
|
|
- financeConfirmInfo.set(FinanceBillConfirmConstant.ID, financeConfirmId);
|
|
|
|
- financeConfirmInfo.set(FinanceBillConfirmConstant.NCKD_CHECKMONTH, period);
|
|
|
|
- financeConfirmInfo.set(FinanceBillConfirmConstant.KEY_BILLSTATUS, "A");
|
|
|
|
// 创建差旅补助
|
|
// 创建差旅补助
|
|
createBzEntry(financeConfirmInfo);
|
|
createBzEntry(financeConfirmInfo);
|
|
// 创建商旅费用
|
|
// 创建商旅费用
|
|
@@ -62,10 +83,11 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
// 创建用车汇总
|
|
// 创建用车汇总
|
|
createYcEntry(financeConfirmInfo);
|
|
createYcEntry(financeConfirmInfo);
|
|
// 创建超标明细
|
|
// 创建超标明细
|
|
-
|
|
|
|
|
|
+ createCbEntry(financeConfirmInfo);
|
|
// 创建退改明细
|
|
// 创建退改明细
|
|
-
|
|
|
|
|
|
+ createTgEntry(financeConfirmInfo);
|
|
// 创建同性别未同住
|
|
// 创建同性别未同住
|
|
|
|
+ createZsEntry(financeConfirmInfo);
|
|
SaveServiceHelper.save(new DynamicObject[]{financeConfirmInfo});
|
|
SaveServiceHelper.save(new DynamicObject[]{financeConfirmInfo});
|
|
|
|
|
|
}catch (Exception e){
|
|
}catch (Exception e){
|
|
@@ -75,6 +97,535 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
}
|
|
}
|
|
logger.info("TravelFinanConfirmCreateTask end");
|
|
logger.info("TravelFinanConfirmCreateTask end");
|
|
}
|
|
}
|
|
|
|
+ protected void createZsEntry(DynamicObject financeConfirmInfo) {
|
|
|
|
+ // 查询酒店订单中,相同部门、性别、酒店城市中,入住时间存在交集的数据,按照部门、性别、酒店城市进行排序
|
|
|
|
+ DynamicObjectCollection queryHotelCol = QueryServiceHelper.query("er_hotelcheckingbill",
|
|
|
|
+ "id,org.id,oabillnum,sourcebookedid.id applierId,sourcebookedid.gender applierGender,totalamount,cityname,checkindate,checkoutdate," +
|
|
|
|
+ "hotelname,roomstylename,ordernum", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
|
|
+ QFilter.isNotNull("sourcebookedid"),
|
|
|
|
+ new QFilter(FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, QFilter.equals, 0)
|
|
|
|
+ .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM)),
|
|
|
|
+ new QFilter("ordertype", QCP.in, Arrays.asList("O","G")),
|
|
|
|
+ new QFilter("orderstatus", QCP.not_in, Arrays.asList("14","10")),
|
|
|
|
+ });
|
|
|
|
+
|
|
|
|
+ // 按照部门、性别、酒店城市进行分组
|
|
|
|
+ Map<String, List<DynamicObject>> applierGroupMap = queryHotelCol.stream()
|
|
|
|
+ .filter(dyx -> StringUtils.isNotEmpty(dyx.getString("org.id")) && StringUtils.isNotEmpty(dyx.getString("applierGender"))
|
|
|
|
+ && StringUtils.isNotEmpty(dyx.getString("cityname")))
|
|
|
|
+ .collect(Collectors.groupingBy(dyx -> String.join("_", dyx.getString("org.id"), dyx.getString("applierGender"), dyx.getString("cityname"))));
|
|
|
|
+ // 创建分录
|
|
|
|
+ Map<String, List<DynamicObject>> filterSameDateHotel = filterSameDateHotel(applierGroupMap);
|
|
|
|
+
|
|
|
|
+ long confirmBillId = financeConfirmInfo.getLong("id");
|
|
|
|
+ DynamicObjectCollection zsEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.ENTITYID);
|
|
|
|
+ zsEntryCol.clear();
|
|
|
|
+ List<Long> updateHotelBillIdList = new ArrayList<>();
|
|
|
|
+ for(Map.Entry<String, List<DynamicObject>> sameDeptRow : filterSameDateHotel.entrySet()){
|
|
|
|
+ String sameDeptRowKey = sameDeptRow.getKey();
|
|
|
|
+ List<DynamicObject> hotelList = sameDeptRow.getValue();
|
|
|
|
+ for(DynamicObject hotel : hotelList){
|
|
|
|
+ DynamicObject zsEntry = zsEntryCol.addNew();
|
|
|
|
+ Long applierId = hotel.getLong("applierId");
|
|
|
|
+ DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_SOURCEBOOKEDID, applierInfo);
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_ORDERNUM, hotel.getString("ordernum"));
|
|
|
|
+
|
|
|
|
+ createApplierInfo(zsEntry,applierInfo);
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_GENDER, hotel.getString("applierGender"));
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_CHECKINDATE, hotel.getDate("checkindate"));
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_CHECKOUTDATE, hotel.getDate("checkoutdate"));
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_CITYNAME, hotel.getString("cityname"));
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_HOTELNAME, hotel.getString("hotelname"));
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_ROOMTYPE, hotel.getString("roomstylename"));
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_LIVEDAYS, CommonUtils.getDays(hotel.getDate("checkindate"), hotel.getDate("checkoutdate")));
|
|
|
|
+ zsEntry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_TOTALAMOUNT, hotel.getBigDecimal("totalamount"));
|
|
|
|
+ updateHotelBillIdList.add(hotel.getLong("id"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ DynamicObject[] updateHotelBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, new QFilter("id", QCP.in, updateHotelBillIdList).toArray());
|
|
|
|
+ for(DynamicObject hotel : updateHotelBillArray){
|
|
|
|
+ hotel.set(FinanceBillConfirmConstant.NCKD_ZS_FINANCONFIRM, confirmBillId);
|
|
|
|
+ }
|
|
|
|
+ SaveServiceHelper.save(updateHotelBillArray);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取指定日期所在月份的第一天
|
|
|
|
+ * @param stardDate 指定日期
|
|
|
|
+ * @return 该日期所在月份第一天的日期对象,时间为当月1日00:00:00
|
|
|
|
+ */
|
|
|
|
+ public Date getFirstDayOfMonth(Date stardDate) {
|
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
|
+ calendar.setTime(stardDate); // 设置为指定日期
|
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置为该月第一天
|
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
|
+ return calendar.getTime();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取指定日期的上个月第一天
|
|
|
|
+ * @param stardDate 指定日期
|
|
|
|
+ * @return 上个月第一天的日期对象,时间为当月1日00:00:00
|
|
|
|
+ */
|
|
|
|
+ public Date getFirstDayOfPreviousMonth(Date stardDate) {
|
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
|
+ calendar.setTime(stardDate); // 设置为指定日期
|
|
|
|
+ calendar.add(Calendar.MONTH, -1); // 回退一个月
|
|
|
|
+ calendar.set(Calendar.DAY_OF_MONTH, 1); // 设置为该月第一天
|
|
|
|
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
|
|
|
|
+ calendar.set(Calendar.MINUTE, 0);
|
|
|
|
+ calendar.set(Calendar.SECOND, 0);
|
|
|
|
+ calendar.set(Calendar.MILLISECOND, 0);
|
|
|
|
+ return calendar.getTime();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ protected Map<String, List<DynamicObject>> filterSameDateHotel(Map<String, List<DynamicObject>> applierGroupMap){
|
|
|
|
+ // 过滤出入住时间存在交集的数据
|
|
|
|
+ Map<String, List<DynamicObject>> filteredApplierGroupMap = new HashMap<>();
|
|
|
|
+
|
|
|
|
+ // 遍历每个分组,查找有时间重叠的记录
|
|
|
|
+ for (Map.Entry<String, List<DynamicObject>> group : applierGroupMap.entrySet()) {
|
|
|
|
+ List<DynamicObject> recordsWithOverlappingDates = new ArrayList<>();
|
|
|
|
+ List<DynamicObject> recordsInGroup = group.getValue();
|
|
|
|
+
|
|
|
|
+ // 对于分组中的每条记录,检查是否与其他记录的入住/离店时间有重叠
|
|
|
|
+ for (DynamicObject currentRecord : recordsInGroup) {
|
|
|
|
+ Date currentCheckin = currentRecord.getDate("checkindate");
|
|
|
|
+ Date currentCheckout = currentRecord.getDate("checkoutdate");
|
|
|
|
+
|
|
|
|
+ // 检查当前记录是否与分组中的其他记录存在时间重叠
|
|
|
|
+ boolean hasOverlapping = false;
|
|
|
|
+ for (DynamicObject otherRecord : recordsInGroup) {
|
|
|
|
+ // 不与自己比较
|
|
|
|
+ if (currentRecord == otherRecord) {
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 不与同一预定人比较
|
|
|
|
+ if(currentRecord.getLong("applierId") == otherRecord.getLong("applierId")){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ Date otherCheckin = otherRecord.getDate("checkindate");
|
|
|
|
+ Date otherCheckout = otherRecord.getDate("checkoutdate");
|
|
|
|
+
|
|
|
|
+ // 判断两个时间段是否有重叠:
|
|
|
|
+ // 当前记录入住日期早于其他记录离店日期
|
|
|
|
+ // 且 当前记录离店日期晚于其他记录入住日期
|
|
|
|
+ if (currentCheckin.before(otherCheckout) && currentCheckout.after(otherCheckin)) {
|
|
|
|
+ hasOverlapping = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 如果存在时间重叠,则添加到结果列表中
|
|
|
|
+ if (hasOverlapping) {
|
|
|
|
+ recordsWithOverlappingDates.add(currentRecord);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 只有当分组中存在有时间重叠的记录时,才添加到最终结果中
|
|
|
|
+ if (!recordsWithOverlappingDates.isEmpty()) {
|
|
|
|
+ filteredApplierGroupMap.put(group.getKey(), recordsWithOverlappingDates);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return filteredApplierGroupMap;
|
|
|
|
+ }
|
|
|
|
+ protected void createTgEntry(DynamicObject financeConfirmInfo) {
|
|
|
|
+ // 通过全部结算单,查询关联的订单号,再通过订单号查询指定状态的订单数据
|
|
|
|
+
|
|
|
|
+ long confirmBillId = financeConfirmInfo.getLong("id");
|
|
|
|
+
|
|
|
|
+ DynamicObjectCollection tgEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_TG_ENTRY.ENTITYID);
|
|
|
|
+ tgEntryCol.clear();
|
|
|
|
+ createTgEntryTrain(confirmBillId , tgEntryCol);
|
|
|
|
+ createTgEntryPlain(confirmBillId , tgEntryCol);
|
|
|
|
+ createTgEntryHotel(confirmBillId , tgEntryCol);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected void createTgEntryTrain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
|
|
|
|
+ //火车订单,订单状态=已退票、已改签;
|
|
|
|
+ DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_traincheckingbill",
|
|
|
|
+ "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate,departtime,arrivecity,departcity" +
|
|
|
|
+ ",refundamount", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
|
|
+ new QFilter(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, QFilter.equals, 0)
|
|
|
|
+ .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM)),
|
|
|
|
+ new QFilter("orderstatus", QFilter.in, Arrays.asList("2","3")),
|
|
|
|
+ new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
|
|
|
|
+ });
|
|
|
|
+ for(DynamicObject trainTgEntry : trainTgEntryCol){
|
|
|
|
+ DynamicObject tgEntry = tgEntryCol.addNew();
|
|
|
|
+ long applierId = trainTgEntry.getLong("applierId");
|
|
|
|
+ DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRAVELER, applierInfo);
|
|
|
|
+ createApplierInfo(tgEntry,applierInfo);
|
|
|
|
+
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERTYPE, "train");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TYPE, trainTgEntry.getString("ordertype"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERNUM, trainTgEntry.getString("ordernum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_HAPPENDDATE, trainTgEntry.getDate("happenddate"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPARTIME, trainTgEntry.getDate("departtime"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPCITY, String.join("-", trainTgEntry.getString("departcity"), trainTgEntry.getString("arrivecity")));
|
|
|
|
+ // 退改金额
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_MODIFYAMT, trainTgEntry.getBigDecimal("refundamount"));
|
|
|
|
+ //tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_SUMAMT, trainTgEntry.getBigDecimal("totalamount"));
|
|
|
|
+ }
|
|
|
|
+ List<Long> idList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
|
|
|
|
+ DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, new QFilter("id", QCP.in, idList).toArray());
|
|
|
|
+ for(DynamicObject updateBill : updateBillArray){
|
|
|
|
+ updateBill.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, confirmBillId);
|
|
|
|
+ }
|
|
|
|
+ SaveServiceHelper.save(updateBillArray);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected void createTgEntryPlain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
|
|
|
|
+ // 机票订单,订单状态=已退票、已改签;
|
|
|
|
+ DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_planecheckingbill",
|
|
|
|
+ "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate,takeofftime,fromcityname,tocityname," +
|
|
|
|
+ "refundamount,endorsementamount", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
|
|
+ new QFilter(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, QFilter.equals, 0)
|
|
|
|
+ .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM)),
|
|
|
|
+ new QFilter("orderstatus", QFilter.in, Arrays.asList("50202","50302")),
|
|
|
|
+ new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
|
|
|
|
+ });
|
|
|
|
+ for(DynamicObject trainTgEntry : trainTgEntryCol){
|
|
|
|
+ DynamicObject tgEntry = tgEntryCol.addNew();
|
|
|
|
+ long applierId = trainTgEntry.getLong("applierId");
|
|
|
|
+ DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRAVELER, applierInfo);
|
|
|
|
+ createApplierInfo(tgEntry,applierInfo);
|
|
|
|
+
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERTYPE, "air");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TYPE, trainTgEntry.getString("ordertype"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERNUM, trainTgEntry.getString("ordernum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_HAPPENDDATE, trainTgEntry.getDate("happenddate"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPARTIME, trainTgEntry.getDate("takeofftime"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPCITY, String.join("-", trainTgEntry.getString("fromcityname"), trainTgEntry.getString("tocityname")));
|
|
|
|
+ // 退改金额
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_MODIFYAMT, CommonUtils.add(trainTgEntry.getBigDecimal("refundamount"), trainTgEntry.getBigDecimal("endorsementamount")));
|
|
|
|
+ //tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_SUMAMT, trainTgEntry.getBigDecimal("totalamount"));
|
|
|
|
+ }
|
|
|
|
+ List<Long> idList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
|
|
|
|
+ DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_planecheckingbill", FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, new QFilter("id", QCP.in, idList).toArray());
|
|
|
|
+ for(DynamicObject updateBill : updateBillArray){
|
|
|
|
+ updateBill.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, confirmBillId);
|
|
|
|
+ }
|
|
|
|
+ SaveServiceHelper.save(updateBillArray);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected void createTgEntryHotel(Long confirmBillId , DynamicObjectCollection tgEntryCol){
|
|
|
|
+ // 酒店订单,订单状态=已退订;
|
|
|
|
+ DynamicObjectCollection hotelTgEntryCol = QueryServiceHelper.query("er_hotelcheckingbill",
|
|
|
|
+ "id,oabillnum,server,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate," +
|
|
|
|
+ "unbookfee,checkindate", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
|
|
+ new QFilter(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, QFilter.equals, 0)
|
|
|
|
+ .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM)),
|
|
|
|
+ new QFilter("orderstatus", QFilter.equals, "10"),
|
|
|
|
+ new QFilter("ordertype", QFilter.in, Arrays.asList("G","T"))
|
|
|
|
+ });
|
|
|
|
+ for(DynamicObject trainTgEntry : hotelTgEntryCol){
|
|
|
|
+ DynamicObject tgEntry = tgEntryCol.addNew();
|
|
|
|
+ long applierId = trainTgEntry.getLong("applierId");
|
|
|
|
+ DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRAVELER, applierInfo);
|
|
|
|
+ createApplierInfo(tgEntry,applierInfo);
|
|
|
|
+
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERTYPE, "hotal");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TYPE, trainTgEntry.getString("ordertype"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_ORDERNUM, trainTgEntry.getString("ordernum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_HAPPENDDATE, trainTgEntry.getDate("happenddate"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPARTIME, trainTgEntry.getDate("checkindate"));
|
|
|
|
+ //tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_TRIPCTY, trainTgEntry.getString("arrivecity"));
|
|
|
|
+ // 退改金额
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_MODIFYAMT, trainTgEntry.getBigDecimal("unbookfee"));
|
|
|
|
+ }
|
|
|
|
+ List<Long> idList = hotelTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
|
|
|
|
+ DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_hotelcheckingbill", FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, new QFilter("id", QCP.in, idList).toArray());
|
|
|
|
+ for(DynamicObject updateBill : updateBillArray){
|
|
|
|
+ updateBill.set(FinanceBillConfirmConstant.NCKD_TG_FINANCONFIRM, confirmBillId);
|
|
|
|
+ }
|
|
|
|
+ SaveServiceHelper.save(updateBillArray);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected void createCbEntry(DynamicObject financeConfirmInfo) {
|
|
|
|
+ long confirmBillId = financeConfirmInfo.getLong("id");
|
|
|
|
+ DynamicObjectCollection cbEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_CB_ENTRY.ENTITYID);
|
|
|
|
+ cbEntryCol.clear();
|
|
|
|
+ createCbEntryTrain(confirmBillId , cbEntryCol);
|
|
|
|
+ createCbEntryPlain(confirmBillId , cbEntryCol);
|
|
|
|
+ createCbEntryHotel(confirmBillId , cbEntryCol);
|
|
|
|
+ createCbEntryVehicle(confirmBillId , cbEntryCol);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected void createCbEntryTrain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
|
|
|
|
+ DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_traincheckingbill",
|
|
|
|
+ "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
|
|
+ new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QFilter.equals, 0)
|
|
|
|
+ .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM)),
|
|
|
|
+ });
|
|
|
|
+ // 通过火车订单过滤出超标的订单
|
|
|
|
+ List<String> parentOrderList = trainTgEntryCol.stream().map(r -> r.getString("ordernum")).collect(Collectors.toList());
|
|
|
|
+ Map<String, String> orderOverDescMap = QueryServiceHelper.query("er_trainbill", "ordernum,overdesc", new QFilter[]{
|
|
|
|
+ new QFilter("ordernum", QCP.in, parentOrderList),
|
|
|
|
+ QFilter.isNotNull("overdesc")
|
|
|
|
+ }).stream()
|
|
|
|
+ .filter(r -> StringUtils.isNotEmpty(r.getString("overdesc")))
|
|
|
|
+ .collect(Collectors.toMap(r -> r.getString("ordernum"), r -> r.getString("overdesc")));
|
|
|
|
+ for(DynamicObject trainTgEntry : trainTgEntryCol){
|
|
|
|
+ if(orderOverDescMap.containsKey(trainTgEntry.getString("ordernum"))){
|
|
|
|
+ DynamicObject tgEntry = tgEntryCol.addNew();
|
|
|
|
+ long applierId = trainTgEntry.getLong("applierId");
|
|
|
|
+ DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRAVELER, applierInfo);
|
|
|
|
+ createApplierInfo(tgEntry,applierInfo);
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERBILLNO, trainTgEntry.getString("ordernum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERAMT, trainTgEntry.getBigDecimal("totalamount"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "train");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, BigDecimal.ZERO);
|
|
|
|
+ String standardInfo = "";
|
|
|
|
+ // 通过员工的岗位,查询对应的报销级别
|
|
|
|
+ DynamicObject reimLeverSettingInfo = QueryServiceHelper.queryOne("er_reimbursesetting_rel", "reimburselevel.id", new QFilter("user", QCP.equals, applierInfo.getLong("id")).toArray());
|
|
|
|
+ if(reimLeverSettingInfo != null && reimLeverSettingInfo.getLong("reimburselevel.id") != 0L){
|
|
|
|
+ // 通过差旅报销级别,查询对应的报销标准
|
|
|
|
+ DynamicObject tripStandard = BusinessDataServiceHelper.loadSingle("er_tripstandard_vehicle","seats",new QFilter[]{
|
|
|
|
+ new QFilter("reimburselevel.fbasedataid.id", QCP.equals, reimLeverSettingInfo.getLong("reimburselevel.id")),
|
|
|
|
+ new QFilter("standardtype", QCP.equals, "train")
|
|
|
|
+ });
|
|
|
|
+ if(tripStandard != null){
|
|
|
|
+ standardInfo = tripStandard.getDynamicObjectCollection("seats")
|
|
|
|
+ .stream()
|
|
|
|
+ .map(r -> r.getDynamicObject("fbasedataid").getString("name"))
|
|
|
|
+ .collect(Collectors.joining(";"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_STANDARD_INFO, standardInfo);
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_OVERREASON, orderOverDescMap.get(trainTgEntry.getString("ordernum")));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ List<Long> updateIdList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
|
|
|
|
+ DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter("id", QCP.in, updateIdList).toArray());
|
|
|
|
+ for(DynamicObject updateBill : updateBillArray){
|
|
|
|
+ updateBill.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, confirmBillId);
|
|
|
|
+ }
|
|
|
|
+ SaveServiceHelper.save(updateBillArray);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ protected void createCbEntryPlain(Long confirmBillId , DynamicObjectCollection tgEntryCol){
|
|
|
|
+ DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_planecheckingbill",
|
|
|
|
+ "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate," +
|
|
|
|
+ "ticketprice,refundamount,endorsementamount,discount", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
|
|
+ new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QFilter.equals, 0)
|
|
|
|
+ .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM)),
|
|
|
|
+ });
|
|
|
|
+ // 通过火车订单过滤出超标的订单
|
|
|
|
+ List<String> parentOrderList = trainTgEntryCol.stream().map(r -> r.getString("ordernum")).collect(Collectors.toList());
|
|
|
|
+ Map<String, DynamicObject> orderOverDescMap = QueryServiceHelper.query("er_planebill", "ordernum,overdesc,standprice", new QFilter[]{
|
|
|
|
+ new QFilter("ordernum", QCP.in, parentOrderList)
|
|
|
|
+ }).stream()
|
|
|
|
+ .collect(Collectors.toMap(r -> r.getString("ordernum"), r -> r));
|
|
|
|
+ for(DynamicObject trainTgEntry : trainTgEntryCol){
|
|
|
|
+ // 机票超标的或者折扣额度大于60%
|
|
|
|
+ BigDecimal discount = Optional.ofNullable(trainTgEntry.getBigDecimal("discount")).orElse(BigDecimal.ZERO);
|
|
|
|
+ // 额度超标
|
|
|
|
+ Boolean isOverDiscount = discount.compareTo(new BigDecimal(60)) > 0?true:false;
|
|
|
|
+
|
|
|
|
+ if(orderOverDescMap.containsKey(trainTgEntry.getString("ordernum"))){
|
|
|
|
+
|
|
|
|
+ DynamicObject planOrderInfo = orderOverDescMap.get(trainTgEntry.getString("ordernum"));
|
|
|
|
+
|
|
|
|
+ if(StringUtils.isEmpty(planOrderInfo.getString("overdesc")) || !isOverDiscount){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ DynamicObject tgEntry = tgEntryCol.addNew();
|
|
|
|
+
|
|
|
|
+ long applierId = trainTgEntry.getLong("applierId");
|
|
|
|
+ // 机票价格
|
|
|
|
+ BigDecimal ticketPrice = Optional.ofNullable(trainTgEntry.getBigDecimal("ticketprice")).orElse(BigDecimal.ZERO);
|
|
|
|
+
|
|
|
|
+ BigDecimal standPrice = Optional.ofNullable(planOrderInfo.getBigDecimal("standprice")).orElse(BigDecimal.ZERO);
|
|
|
|
+
|
|
|
|
+ DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRAVELER, applierInfo);
|
|
|
|
+ createApplierInfo(tgEntry,applierInfo);
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERBILLNO, trainTgEntry.getString("ordernum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERAMT, ticketPrice);
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "air");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, BigDecimal.ZERO);
|
|
|
|
+
|
|
|
|
+ if(isOverDiscount){
|
|
|
|
+ // 机票价格-标准价格*0.6
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_EXCSTAMT, standPrice.subtract(standPrice.multiply(new BigDecimal(0.6))));
|
|
|
|
+ }
|
|
|
|
+ String standardInfo = "";
|
|
|
|
+ // 通过员工的岗位,查询对应的报销级别
|
|
|
|
+ DynamicObject reimLeverSettingInfo = QueryServiceHelper.queryOne("er_reimbursesetting_rel", "reimburselevel.id", new QFilter("user", QCP.equals, applierInfo.getLong("id")).toArray());
|
|
|
|
+ if(reimLeverSettingInfo != null && reimLeverSettingInfo.getLong("reimburselevel.id") != 0L){
|
|
|
|
+ // 通过差旅报销级别,查询对应的报销标准
|
|
|
|
+ DynamicObject tripStandard = BusinessDataServiceHelper.loadSingle("er_tripstandard_vehicle","seats",new QFilter[]{
|
|
|
|
+ new QFilter("reimburselevel.fbasedataid.id", QCP.equals, reimLeverSettingInfo.getLong("reimburselevel.id")),
|
|
|
|
+ new QFilter("standardtype", QCP.equals, "air")
|
|
|
|
+ });
|
|
|
|
+ if(tripStandard != null){
|
|
|
|
+ standardInfo = tripStandard.getDynamicObjectCollection("seats")
|
|
|
|
+ .stream()
|
|
|
|
+ .map(r -> r.getDynamicObject("fbasedataid").getString("name"))
|
|
|
|
+ .collect(Collectors.joining(";"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_STANDARD_INFO, standardInfo);
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_OVERREASON, planOrderInfo.getString("overdesc"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ List<Long> updateIdList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
|
|
|
|
+ DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_planecheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter("id", QCP.in, updateIdList).toArray());
|
|
|
|
+ for(DynamicObject updateBill : updateBillArray){
|
|
|
|
+ updateBill.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, confirmBillId);
|
|
|
|
+ }
|
|
|
|
+ SaveServiceHelper.save(updateBillArray);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected void createCbEntryHotel(Long confirmBillId , DynamicObjectCollection tgEntryCol){
|
|
|
|
+ DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_hotelcheckingbill",
|
|
|
|
+ "id,oabillnum,server,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate" +
|
|
|
|
+ ",unbookfee,checkindate,hotelname,cityname", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
|
|
+ new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QFilter.equals, 0)
|
|
|
|
+ .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM)),
|
|
|
|
+ });
|
|
|
|
+ // 通过火车订单过滤出超标的订单
|
|
|
|
+ List<String> parentOrderList = trainTgEntryCol.stream().map(r -> r.getString("ordernum")).collect(Collectors.toList());
|
|
|
|
+ Map<String, String> orderOverDescMap = QueryServiceHelper.query("er_hotelbill", "ordernum,overdesc", new QFilter[]{
|
|
|
|
+ new QFilter("ordernum", QCP.in, parentOrderList),
|
|
|
|
+ QFilter.isNotNull("overdesc")
|
|
|
|
+ }).stream()
|
|
|
|
+ .filter(r -> StringUtils.isNotEmpty(r.getString("overdesc")))
|
|
|
|
+ .collect(Collectors.toMap(r -> r.getString("ordernum"), r -> r.getString("overdesc")));
|
|
|
|
+ for(DynamicObject trainTgEntry : trainTgEntryCol){
|
|
|
|
+ if(orderOverDescMap.containsKey(trainTgEntry.getString("ordernum"))){
|
|
|
|
+ DynamicObject tgEntry = tgEntryCol.addNew();
|
|
|
|
+
|
|
|
|
+ long applierId = trainTgEntry.getLong("applierId");
|
|
|
|
+ DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRAVELER, applierInfo);
|
|
|
|
+ createApplierInfo(tgEntry,applierInfo);
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERBILLNO, trainTgEntry.getString("ordernum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERAMT, trainTgEntry.getBigDecimal("totalamount"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "hotal");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, BigDecimal.ZERO);
|
|
|
|
+ // 通过员工的岗位,查询对应的报销级别
|
|
|
|
+ DynamicObject reimLeverSettingInfo = QueryServiceHelper.queryOne("er_reimbursesetting_rel", "reimburselevel.id", new QFilter("user", QCP.equals, applierInfo.getLong("id")).toArray());
|
|
|
|
+ if(reimLeverSettingInfo != null && reimLeverSettingInfo.getLong("reimburselevel.id") != 0L){
|
|
|
|
+ // 通过差旅报销级别,查询报销标准金额
|
|
|
|
+ String cityName = trainTgEntry.getString("cityname");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_CITYNAME, cityName);
|
|
|
|
+ // 查询行政区划
|
|
|
|
+ DynamicObject cityInfo = QueryServiceHelper.queryOne("bd_admindivision", "id", new QFilter("name", QCP.like, cityName + "%").toArray());
|
|
|
|
+ if(cityInfo != null){
|
|
|
|
+ // 查询出差地域
|
|
|
|
+ DynamicObject tripArea = QueryServiceHelper.queryOne("er_triparea", "id", new QFilter("citysf7.fbasedataid", QCP.equals, cityInfo.getLong("id")).toArray());
|
|
|
|
+ if(tripArea != null){
|
|
|
|
+ // 住宿补助标准
|
|
|
|
+ DynamicObject hotelStandard = QueryServiceHelper.queryOne("er_tripstand_accmodation", "entryentity.standardamount", new QFilter[]{
|
|
|
|
+ new QFilter("reimburselevel.fbasedataid", QCP.equals, reimLeverSettingInfo.getLong("reimburselevel.id")),
|
|
|
|
+ new QFilter("entryentity.triparea", QCP.equals, tripArea.getLong("id")),
|
|
|
|
+ new QFilter("entryentity.tripstandardtype.number", QCP.equals, "002"),
|
|
|
|
+ });
|
|
|
|
+ if(hotelStandard != null){
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, hotelStandard.getBigDecimal("entryentity.standardamount"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_STANDARD_INFO, trainTgEntry.getString("hotelname"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_OVERREASON, orderOverDescMap.get(trainTgEntry.getString("ordernum")));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ List<Long> updateIdList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
|
|
|
|
+ DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter("id", QCP.in, updateIdList).toArray());
|
|
|
|
+ for(DynamicObject updateBill : updateBillArray){
|
|
|
|
+ updateBill.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, confirmBillId);
|
|
|
|
+ }
|
|
|
|
+ SaveServiceHelper.save(updateBillArray);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ protected void createCbEntryVehicle(Long confirmBillId , DynamicObjectCollection tgEntryCol){
|
|
|
|
+ DynamicObjectCollection trainTgEntryCol = QueryServiceHelper.query("er_vehiclecheckingbill",
|
|
|
|
+ "id,oabillnum,sourcebookedid.id applierId,totalamount,orderstatus,ordertype,ordernum,happenddate", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
|
|
+ new QFilter(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, QFilter.equals, 0)
|
|
|
|
+ .or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM)),
|
|
|
|
+ });
|
|
|
|
+ for(DynamicObject trainTgEntry : trainTgEntryCol){
|
|
|
|
+ long applierId = trainTgEntry.getLong("applierId");
|
|
|
|
+ DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
|
|
+ BigDecimal orderPrice = Optional.ofNullable(trainTgEntry.getBigDecimal("totalamount")).orElse(BigDecimal.ZERO);
|
|
|
|
+
|
|
|
|
+ BigDecimal standardAmount = null;
|
|
|
|
+ // 通过员工的岗位,查询对应的报销级别
|
|
|
|
+ DynamicObject jobLeverInfo = QueryServiceHelper.queryOne(BillTypeConstants.HRPI_EMPJOBREL, "joblevel.id", new QFilter[]{
|
|
|
|
+ new QFilter("businessstatus", QCP.equals, "1"),
|
|
|
|
+ new QFilter("datastatus", QCP.equals, "1"),
|
|
|
|
+ new QFilter("iscurrentversion", QCP.equals, "1"),
|
|
|
|
+ new QFilter("person.number", QCP.equals, applierInfo.getString("number"))
|
|
|
|
+ });
|
|
|
|
+ if(jobLeverInfo != null){
|
|
|
|
+ DynamicObject checkStandard = QueryServiceHelper.queryOne("nckd_checkstandard", "nckd_amount", new QFilter[]{
|
|
|
|
+ new QFilter("nckd_type", QCP.equals, "001"),
|
|
|
|
+ new QFilter("nckd_multi_joblever.fbasedataid", QCP.equals, jobLeverInfo.getLong("joblevel.id"))
|
|
|
|
+ });
|
|
|
|
+ if(checkStandard != null){
|
|
|
|
+ standardAmount = checkStandard.getBigDecimal("nckd_amount");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ BigDecimal cbAmount = BigDecimal.ZERO;
|
|
|
|
+ if(standardAmount != null){
|
|
|
|
+ cbAmount = orderPrice.subtract(standardAmount);
|
|
|
|
+ if(cbAmount.compareTo(BigDecimal.ZERO) <= 0){
|
|
|
|
+ // 超标金额没有大于0,则没有超标
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ DynamicObject tgEntry = tgEntryCol.addNew();
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, standardAmount);
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_EXCSTAMT, cbAmount);
|
|
|
|
+
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRAVELER, applierInfo);
|
|
|
|
+ createApplierInfo(tgEntry,applierInfo);
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TRIPREQBILLNO, trainTgEntry.getString("oabillnum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERBILLNO, trainTgEntry.getString("ordernum"));
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_ORDERAMT, orderPrice);
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_TYPE, "train");
|
|
|
|
+ tgEntry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_STANDARD, BigDecimal.ZERO);
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ List<Long> updateIdList = trainTgEntryCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
|
|
|
|
+ DynamicObject[] updateBillArray = BusinessDataServiceHelper.load("er_traincheckingbill", FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, new QFilter("id", QCP.in, updateIdList).toArray());
|
|
|
|
+ for(DynamicObject updateBill : updateBillArray){
|
|
|
|
+ updateBill.set(FinanceBillConfirmConstant.NCKD_CB_FINANCONFIRM, confirmBillId);
|
|
|
|
+ }
|
|
|
|
+ SaveServiceHelper.save(updateBillArray);
|
|
|
|
+ }
|
|
protected void createYcEntry(DynamicObject financeConfirmInfo) {
|
|
protected void createYcEntry(DynamicObject financeConfirmInfo) {
|
|
|
|
|
|
DynamicObjectCollection ycEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID);
|
|
DynamicObjectCollection ycEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_YC_ENTRY.ENTITYID);
|
|
@@ -82,8 +633,9 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
long confirmBillId = financeConfirmInfo.getLong("id");
|
|
long confirmBillId = financeConfirmInfo.getLong("id");
|
|
|
|
|
|
// 查询用车结算单
|
|
// 查询用车结算单
|
|
- DynamicObjectCollection vehicleCheckCol = QueryServiceHelper.query("er_vehiclecheckingbill", "id,oabillnum,server,sourcebookedid.id applierId,totalamount", new QFilter[]{
|
|
|
|
- new QFilter("happenddate", QCP.less_equals, new Date()),
|
|
|
|
|
|
+ DynamicObjectCollection vehicleCheckCol = QueryServiceHelper.query("er_vehiclecheckingbill",
|
|
|
|
+ "id,oabillnum,server,sourcebookedid.id applierId,totalamount,vehicletype", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
new QFilter(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, QFilter.equals, 0)
|
|
new QFilter(FinanceBillConfirmConstant.NCKD_YC_CONFRMID, QFilter.equals, 0)
|
|
.or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_YC_CONFRMID)),
|
|
.or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_YC_CONFRMID)),
|
|
});
|
|
});
|
|
@@ -91,17 +643,20 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- Map<Long, List<DynamicObject>> applierGroupList = vehicleCheckCol.stream().collect(Collectors.groupingBy(r -> r.getLong("applierId")));
|
|
|
|
- for (Map.Entry<Long, List<DynamicObject>> applierRow : applierGroupList.entrySet()) {
|
|
|
|
- Long applierId = applierRow.getKey();
|
|
|
|
|
|
+ Map<String, List<DynamicObject>> applierGroupList = vehicleCheckCol.stream()
|
|
|
|
+ .collect(Collectors.groupingBy(r -> r.getLong("applierId") + "_" + r.getString("vehicletype")));
|
|
|
|
+ for (Map.Entry<String, List<DynamicObject>> applierRow : applierGroupList.entrySet()) {
|
|
|
|
+ String applierId = applierRow.getKey().split("_")[0];
|
|
|
|
+ String vehicletype = applierRow.getKey().split("_")[1];
|
|
List<DynamicObject> dataList = applierRow.getValue();
|
|
List<DynamicObject> dataList = applierRow.getValue();
|
|
DynamicObject ycEntry = ycEntryCol.addNew();
|
|
DynamicObject ycEntry = ycEntryCol.addNew();
|
|
- DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
|
|
|
|
+ DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(Long.valueOf(applierId), "bos_user");
|
|
ycEntry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_TRAVELER, applierInfo);
|
|
ycEntry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_TRAVELER, applierInfo);
|
|
createApplierInfo(ycEntry,applierInfo);
|
|
createApplierInfo(ycEntry,applierInfo);
|
|
BigDecimal totalAmount = dataList.stream()
|
|
BigDecimal totalAmount = dataList.stream()
|
|
.map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
.map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
ycEntry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_AMOUNT, totalAmount);
|
|
ycEntry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_AMOUNT, totalAmount);
|
|
|
|
+ ycEntry.set("nckd_yc_vehicletype", vehicletype);
|
|
}
|
|
}
|
|
|
|
|
|
List<Long> vehicleBillIdList = vehicleCheckCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
|
|
List<Long> vehicleBillIdList = vehicleCheckCol.stream().map(r -> r.getLong("id")).collect(Collectors.toList());
|
|
@@ -115,12 +670,15 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
protected void createSlEntry(DynamicObject financeConfirmInfo) {
|
|
protected void createSlEntry(DynamicObject financeConfirmInfo) {
|
|
// 该方法从各个明细中查询,注释掉,改成从全部订单上查询
|
|
// 该方法从各个明细中查询,注释掉,改成从全部订单上查询
|
|
//DynamicObjectCollection slOrderDataCol = getSlOrderDataCol();
|
|
//DynamicObjectCollection slOrderDataCol = getSlOrderDataCol();
|
|
- DynamicObjectCollection slOrderDataCol = QueryServiceHelper.query("er_allcheckingbill", "id,oabillnum,server,sourcebookedid.id applierId,totalamount,operationtype", new QFilter[]{
|
|
|
|
- new QFilter("happenddate", QCP.less_equals, new Date()),
|
|
|
|
|
|
+ DynamicObjectCollection slOrderDataCol = QueryServiceHelper.query("er_allcheckingbill",
|
|
|
|
+ "id,oabillnum,server,sourcebookedid.id applierId,totalamount,operationtype,ordernum", new QFilter[]{
|
|
|
|
+ new QFilter("happenddate", QCP.less_equals, startDate),
|
|
new QFilter(FinanceBillConfirmConstant.NCKD_SL_CONFRMID, QFilter.equals, 0)
|
|
new QFilter(FinanceBillConfirmConstant.NCKD_SL_CONFRMID, QFilter.equals, 0)
|
|
.or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_SL_CONFRMID)),
|
|
.or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_SL_CONFRMID)),
|
|
new QFilter("operationtype", QFilter.in, Arrays.asList("1","2","4","5","6")),
|
|
new QFilter("operationtype", QFilter.in, Arrays.asList("1","2","4","5","6")),
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+
|
|
long confirmBillId = financeConfirmInfo.getLong("id");
|
|
long confirmBillId = financeConfirmInfo.getLong("id");
|
|
DynamicObjectCollection slEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
|
|
DynamicObjectCollection slEntryCol = financeConfirmInfo.getDynamicObjectCollection(FinanceBillConfirmConstant.NCKD_SL_ENTRY.ENTITYID);
|
|
slEntryCol.clear();
|
|
slEntryCol.clear();
|
|
@@ -136,16 +694,39 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
// 服务商已经和实施沟通,取第一个就行,按理只会出现同城
|
|
// 服务商已经和实施沟通,取第一个就行,按理只会出现同城
|
|
slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_SERVER,dataList.get(0).getString("server"));
|
|
slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_SERVER,dataList.get(0).getString("server"));
|
|
// 对火车订单金额合计
|
|
// 对火车订单金额合计
|
|
|
|
+ List<String> trainNoList = dataList.stream()
|
|
|
|
+ .filter(r -> "6".equals(r.getString("operationtype")))
|
|
|
|
+ .map(r -> r.getString("ordernum")).collect(Collectors.toList());
|
|
|
|
+ BigDecimal trainServiceAmount = QueryServiceHelper.query("er_traincheckingbill", "id,servicefee", new QFilter[]{
|
|
|
|
+ new QFilter("ordernum", QCP.in, trainNoList)
|
|
|
|
+ }).stream().map(r -> r.getBigDecimal("servicefee")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_TRAINSERVICEFEE, trainServiceAmount);
|
|
BigDecimal trainTotalAmount = dataList.stream()
|
|
BigDecimal trainTotalAmount = dataList.stream()
|
|
.filter(r -> "6".equals(r.getString("operationtype")))
|
|
.filter(r -> "6".equals(r.getString("operationtype")))
|
|
.map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
.map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_TRAINPAYAMT, trainTotalAmount);
|
|
slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_TRAINPAYAMT, trainTotalAmount);
|
|
// 对机票订单金额合计
|
|
// 对机票订单金额合计
|
|
|
|
+ List<String> planNoList = dataList.stream()
|
|
|
|
+ .filter(r -> "2".equals(r.getString("operationtype")) || "4".equals(r.getString("operationtype")))
|
|
|
|
+ .map(r -> r.getString("ordernum")).collect(Collectors.toList());
|
|
|
|
+ BigDecimal planeServiceAmount = QueryServiceHelper.query("er_planecheckingbill", "id,servicefee", new QFilter[]{
|
|
|
|
+ new QFilter("ordernum", QCP.in, planNoList)
|
|
|
|
+ }).stream().map(r -> r.getBigDecimal("servicefee")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_PLANSERVICEFEE, planeServiceAmount);
|
|
|
|
+
|
|
BigDecimal planeTotalAmount = dataList.stream()
|
|
BigDecimal planeTotalAmount = dataList.stream()
|
|
.filter(r -> "2".equals(r.getString("operationtype")) || "4".equals(r.getString("operationtype")))
|
|
.filter(r -> "2".equals(r.getString("operationtype")) || "4".equals(r.getString("operationtype")))
|
|
.map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
.map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
- slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_PLANPAYAMT, planeTotalAmount);
|
|
|
|
|
|
+ slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_PLANSERVICEFEE, planeTotalAmount);
|
|
// 对酒店订单金额合计
|
|
// 对酒店订单金额合计
|
|
|
|
+ List<String> hotelNoList = dataList.stream()
|
|
|
|
+ .filter(r ->"1".equals(r.getString("operationtype")) || "5".equals(r.getString("operationtype")))
|
|
|
|
+ .map(r -> r.getString("ordernum")).collect(Collectors.toList());
|
|
|
|
+ BigDecimal hotelServiceAmount = QueryServiceHelper.query("er_hotelcheckingbill", "id,servicefee", new QFilter[]{
|
|
|
|
+ new QFilter("ordernum", QCP.in, hotelNoList)
|
|
|
|
+ }).stream().map(r -> r.getBigDecimal("servicefee")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
|
+ slEntry.set(FinanceBillConfirmConstant.NCKD_SL_ENTRY.NCKD_SL_HOTELSERVICEFEEJD, hotelServiceAmount);
|
|
|
|
+
|
|
BigDecimal hotelTotalAmount = dataList.stream()
|
|
BigDecimal hotelTotalAmount = dataList.stream()
|
|
.filter(r ->"1".equals(r.getString("operationtype")) || "5".equals(r.getString("operationtype")))
|
|
.filter(r ->"1".equals(r.getString("operationtype")) || "5".equals(r.getString("operationtype")))
|
|
.map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
.map(r -> r.getBigDecimal("totalamount")).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
@@ -188,18 +769,13 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
protected void createBzEntry(DynamicObject financeConfirmInfo){
|
|
protected void createBzEntry(DynamicObject financeConfirmInfo){
|
|
long confirmBillId = financeConfirmInfo.getLong(FinanceBillConfirmConstant.ID);
|
|
long confirmBillId = financeConfirmInfo.getLong(FinanceBillConfirmConstant.ID);
|
|
BigDecimal bzAmount = CommonUtils.getBzAmount();
|
|
BigDecimal bzAmount = CommonUtils.getBzAmount();
|
|
- // 获取本月月初
|
|
|
|
- LocalDateTime firstDayStart = LocalDate.now().withDayOfMonth(1).atStartOfDay();
|
|
|
|
- // 转换为Date对象
|
|
|
|
- Date firstDay = Date.from(firstDayStart.atZone(ZoneId.systemDefault()).toInstant());
|
|
|
|
-
|
|
|
|
// 查询出差申请单
|
|
// 查询出差申请单
|
|
DynamicObjectCollection tripReqBillCol = QueryServiceHelper.query(TripReqBillConstant.ENTITYID, String.join(",",TripReqBillConstant.ID,TripReqBillConstant.BILLNO), new QFilter[]{
|
|
DynamicObjectCollection tripReqBillCol = QueryServiceHelper.query(TripReqBillConstant.ENTITYID, String.join(",",TripReqBillConstant.ID,TripReqBillConstant.BILLNO), new QFilter[]{
|
|
// 状态为审核通过、已付款、关闭
|
|
// 状态为审核通过、已付款、关闭
|
|
new QFilter(TripReqBillConstant.KEY_BILLSTATUS, QFilter.in, Arrays.asList("E", "G", "I")),
|
|
new QFilter(TripReqBillConstant.KEY_BILLSTATUS, QFilter.in, Arrays.asList("E", "G", "I")),
|
|
new QFilter(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, QFilter.equals, 0)
|
|
new QFilter(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID, QFilter.equals, 0)
|
|
.or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID)),
|
|
.or(QFilter.isNull(FinanceBillConfirmConstant.NCKD_BZ_CONFRMID)),
|
|
- new QFilter(TripReqBillConstant.RENDDATE, QFilter.less_than, firstDay),
|
|
|
|
|
|
+ new QFilter(TripReqBillConstant.RENDDATE, QFilter.less_than, startDate),
|
|
},"createtime desc" );
|
|
},"createtime desc" );
|
|
if(tripReqBillCol == null || tripReqBillCol.size() == 0){
|
|
if(tripReqBillCol == null || tripReqBillCol.size() == 0){
|
|
return ;
|
|
return ;
|
|
@@ -285,6 +861,24 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
entry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_COMPANY, company);
|
|
entry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_COMPANY, company);
|
|
entry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY, travelDeptSecretary);
|
|
entry.set(FinanceBillConfirmConstant.NCKD_YC_ENTRY.NCKD_YC_DEPSECRETARY, travelDeptSecretary);
|
|
}
|
|
}
|
|
|
|
+ if(FinanceBillConfirmConstant.NCKD_CB_ENTRY.ENTITYID.equals(entryEntityName)){
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_DEPFULLNAME, userInfo.getString("entryentity.orgstructure.fullname"));
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_POST, userInfo.getString("entryentity.post.name"));
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_COMPANY, company);
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_CB_ENTRY.NCKD_CB_DEPSECRETARY, travelDeptSecretary);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(FinanceBillConfirmConstant.NCKD_TG_ENTRY.ENTITYID.equals(entryEntityName)){
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPFULLNAME, userInfo.getString("entryentity.orgstructure.fullname"));
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_POST, userInfo.getString("entryentity.post.name"));
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_TG_ENTRY.NCKD_TG_DEPSECRETARY, travelDeptSecretary);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.ENTITYID.equals(entryEntityName)){
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_DEPFULLNAME, userInfo.getString("entryentity.orgstructure.fullname"));
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_POST, userInfo.getString("entryentity.post.name"));
|
|
|
|
+ entry.set(FinanceBillConfirmConstant.NCKD_ZS_ENTRY.NCKD_ZS_DEPSECRETARY, travelDeptSecretary);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|