|
@@ -7,7 +7,6 @@ import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
import kd.bos.db.tx.TX;
|
|
import kd.bos.db.tx.TX;
|
|
import kd.bos.db.tx.TXHandle;
|
|
import kd.bos.db.tx.TXHandle;
|
|
import kd.bos.entity.EntityMetadataCache;
|
|
import kd.bos.entity.EntityMetadataCache;
|
|
-import kd.bos.exception.KDBizException;
|
|
|
|
import kd.bos.exception.KDException;
|
|
import kd.bos.exception.KDException;
|
|
import kd.bos.id.ID;
|
|
import kd.bos.id.ID;
|
|
import kd.bos.logging.Log;
|
|
import kd.bos.logging.Log;
|
|
@@ -19,8 +18,6 @@ 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.operation.SaveServiceHelper;
|
|
import kd.bos.servicehelper.operation.SaveServiceHelper;
|
|
-import kd.bos.servicehelper.org.OrgUnitServiceHelper;
|
|
|
|
-import kd.bos.servicehelper.org.OrgViewType;
|
|
|
|
import kd.bos.util.CollectionUtils;
|
|
import kd.bos.util.CollectionUtils;
|
|
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.*;
|
|
@@ -49,7 +46,6 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
logger.info(String.format("期间[%s]已经存在商旅对账确认单,请勿重复创建!", period));
|
|
logger.info(String.format("期间[%s]已经存在商旅对账确认单,请勿重复创建!", period));
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
-
|
|
|
|
try(TXHandle tx = TX.requiresNew(this.getClass().getName())){
|
|
try(TXHandle tx = TX.requiresNew(this.getClass().getName())){
|
|
try {
|
|
try {
|
|
|
|
|
|
@@ -191,7 +187,7 @@ 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 = getBzAmount();
|
|
|
|
|
|
+ BigDecimal bzAmount = CommonUtils.getBzAmount();
|
|
// 获取本月月初
|
|
// 获取本月月初
|
|
LocalDateTime firstDayStart = LocalDate.now().withDayOfMonth(1).atStartOfDay();
|
|
LocalDateTime firstDayStart = LocalDate.now().withDayOfMonth(1).atStartOfDay();
|
|
// 转换为Date对象
|
|
// 转换为Date对象
|
|
@@ -221,19 +217,6 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
createCheckBzEntry(bzEntryCol,draftBillIdList);
|
|
createCheckBzEntry(bzEntryCol,draftBillIdList);
|
|
}
|
|
}
|
|
|
|
|
|
- protected BigDecimal getBzAmount(){
|
|
|
|
- DynamicObject tripExpenseItem = QueryServiceHelper.queryOne("er_tripexpenseitem", "nckd_travelbzstd", new QFilter("longnumber", QCP.equals, "004").toArray());
|
|
|
|
- if(tripExpenseItem == null){
|
|
|
|
- throw new KDBizException("没有配置补助的差旅标准。");
|
|
|
|
- }
|
|
|
|
- BigDecimal bzAmount = tripExpenseItem.getBigDecimal("nckd_travelbzstd");
|
|
|
|
- if(bzAmount == null || bzAmount.compareTo(BigDecimal.ZERO) <= 0){
|
|
|
|
- throw new KDBizException("差旅补助金额不能为0。");
|
|
|
|
- }
|
|
|
|
- return bzAmount;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
protected void createCheckBzEntry(DynamicObjectCollection bzEntryCol,List<Long> draftBillIdList){
|
|
protected void createCheckBzEntry(DynamicObjectCollection bzEntryCol,List<Long> draftBillIdList){
|
|
DynamicObject[] draftBillArray = BusinessDataServiceHelper.load(draftBillIdList.toArray(), EntityMetadataCache.getDataEntityType(TravelFinanDraftConstant.ENTITYID_F7));
|
|
DynamicObject[] draftBillArray = BusinessDataServiceHelper.load(draftBillIdList.toArray(), EntityMetadataCache.getDataEntityType(TravelFinanDraftConstant.ENTITYID_F7));
|
|
|
|
|
|
@@ -254,6 +237,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
DynamicObject applierInfo = BusinessDataServiceHelper.loadSingleFromCache(applierId, "bos_user");
|
|
bzEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER, applierInfo);
|
|
bzEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_TRAVELER, applierInfo);
|
|
bzEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_TRAVELDAYS, sumDays);
|
|
bzEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_TRAVELDAYS, sumDays);
|
|
|
|
+ bzEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_SUMDAYS, sumDays);
|
|
bzEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_AMOUNT, sumAmount);
|
|
bzEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_AMOUNT, sumAmount);
|
|
bzEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_CHECKAMT, sumAmount);
|
|
bzEntry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_CHECKAMT, sumAmount);
|
|
// 设置出差人信息,工号、部门、岗位。 银行账户、开户行
|
|
// 设置出差人信息,工号、部门、岗位。 银行账户、开户行
|
|
@@ -268,9 +252,8 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
DynamicObject userInfo = QueryServiceHelper.queryOne("bos_user", "number,entryentity.dpt,entryentity.orgstructure.fullname,entryentity.post.name",
|
|
DynamicObject userInfo = QueryServiceHelper.queryOne("bos_user", "number,entryentity.dpt,entryentity.orgstructure.fullname,entryentity.post.name",
|
|
new QFilter(FinanceBillConfirmConstant.ID, QCP.equals, traveler.getLong(FinanceBillConfirmConstant.ID)).toArray());
|
|
new QFilter(FinanceBillConfirmConstant.ID, QCP.equals, traveler.getLong(FinanceBillConfirmConstant.ID)).toArray());
|
|
long deptId = userInfo.getLong("entryentity.dpt");
|
|
long deptId = userInfo.getLong("entryentity.dpt");
|
|
- Map<String, Object> companyInfoMap = OrgUnitServiceHelper.getCompanyfromOrg(deptId);
|
|
|
|
- Object companyId = companyInfoMap.get("id");
|
|
|
|
- DynamicObject company = BusinessDataServiceHelper.loadSingleFromCache(companyId, "bos_org");
|
|
|
|
|
|
+ DynamicObject orgRelation = BusinessDataServiceHelper.loadSingle("bos_org_orgrelation_dept", "fromorg", new QFilter("toorg", QCP.equals, deptId).toArray());
|
|
|
|
+ DynamicObject company = Objects.isNull(orgRelation)?null:orgRelation.getDynamicObject("fromorg");
|
|
DynamicObject travelDeptSecretary = getTravelDeptSecretary(traveler.getLong(FinanceBillConfirmConstant.ID), deptId);
|
|
DynamicObject travelDeptSecretary = getTravelDeptSecretary(traveler.getLong(FinanceBillConfirmConstant.ID), deptId);
|
|
if (FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID.equals(entryEntityName)) {
|
|
if (FinanceBillConfirmConstant.NCKD_BZ_ENTRY.ENTITYID.equals(entryEntityName)) {
|
|
entry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_DEPFULLNAME, userInfo.getString("entryentity.orgstructure.fullname"));
|
|
entry.set(FinanceBillConfirmConstant.NCKD_BZ_ENTRY.NCKD_BZ_DEPFULLNAME, userInfo.getString("entryentity.orgstructure.fullname"));
|
|
@@ -358,23 +341,30 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
List<DynamicObject> tripReimInvoiceList = tripReimInvoiceData.get(billno);
|
|
List<DynamicObject> tripReimInvoiceList = tripReimInvoiceData.get(billno);
|
|
tripReimInvoiceList.stream().forEach(tripReimInvoice -> getDraftData(draftEntryCol.addNew(),"7",
|
|
tripReimInvoiceList.stream().forEach(tripReimInvoice -> getDraftData(draftEntryCol.addNew(),"7",
|
|
String.join("-",tripReimInvoice.getString("tripBillno"),tripReimInvoice.getString("invoiceentry.invoiceno")),
|
|
String.join("-",tripReimInvoice.getString("tripBillno"),tripReimInvoice.getString("invoiceentry.invoiceno")),
|
|
- tripReimInvoice.getDate("invoiceentry.carrierdate"),null,
|
|
|
|
|
|
+ tripReimInvoice.getDate("invoiceentry.carrierdate"),tripReimInvoice.getDate("invoiceentry.carrierdate"),
|
|
tripReimInvoice.getString("invoiceentry.istartcity"),tripReimInvoice.getString("invoiceentry.idestcity"),tripReimInvoice.getBigDecimal("invoiceentry.totalamount")));
|
|
tripReimInvoice.getString("invoiceentry.istartcity"),tripReimInvoice.getString("invoiceentry.idestcity"),tripReimInvoice.getBigDecimal("invoiceentry.totalamount")));
|
|
};
|
|
};
|
|
|
|
|
|
- // 获取draftEntryCol中开始时间的额最早时间 和结束时间的最晚时间
|
|
|
|
- Date earliestTime = draftEntryCol.stream()
|
|
|
|
- .filter(d -> d.getDate(TravelFinanDraftConstant.NCKD_DETAILENTITY.NCKD_STARTDATE) != null)
|
|
|
|
- .map(d -> d.getDate(TravelFinanDraftConstant.NCKD_DETAILENTITY.NCKD_STARTDATE))
|
|
|
|
- .min(Comparator.comparing(Date::getTime)).orElse(null);
|
|
|
|
|
|
+ // 获取draftEntryCol所有的开始时间和结束时间,在获取其中的最早时间和最晚时间
|
|
|
|
+ List<Date> allDateList = new ArrayList<>();
|
|
|
|
+ for(DynamicObject draftEntry : draftEntryCol){
|
|
|
|
+ Date startDate = draftEntry.getDate(TravelFinanDraftConstant.NCKD_DETAILENTITY.NCKD_STARTDATE);
|
|
|
|
+ Date endDate = draftEntry.getDate(TravelFinanDraftConstant.NCKD_DETAILENTITY.NCKD_FINISHDATE);
|
|
|
|
+ if(startDate != null){
|
|
|
|
+ allDateList.add(startDate);
|
|
|
|
+ }
|
|
|
|
+ if(endDate != null){
|
|
|
|
+ allDateList.add(endDate);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- Date latestTime = draftEntryCol.stream()
|
|
|
|
- .filter(d -> d.getDate(TravelFinanDraftConstant.NCKD_DETAILENTITY.NCKD_FINISHDATE) != null)
|
|
|
|
- .map(d -> d.getDate(TravelFinanDraftConstant.NCKD_DETAILENTITY.NCKD_FINISHDATE))
|
|
|
|
|
|
+ Date earliestTime = allDateList.stream()
|
|
|
|
+ .min(Comparator.comparing(Date::getTime)).orElse(null);
|
|
|
|
+ Date latestTime = allDateList.stream()
|
|
.max(Comparator.comparing(Date::getTime)).orElse(null);
|
|
.max(Comparator.comparing(Date::getTime)).orElse(null);
|
|
//获取latestTime与earliestTime 的日期相差天数,加上1
|
|
//获取latestTime与earliestTime 的日期相差天数,加上1
|
|
if(earliestTime != null && latestTime != null){
|
|
if(earliestTime != null && latestTime != null){
|
|
- int days = getDays(earliestTime, latestTime, tripReqBill.getDynamicObject(TripReqBillConstant.COMPANY));
|
|
|
|
|
|
+ int days = CommonUtils.getDaysByWorkCalandar(earliestTime, latestTime, tripReqBill.getDynamicObject(TripReqBillConstant.COMPANY));
|
|
travelFinanDraftInfo.set(TravelFinanDraftConstant.NCKD_SUMDAYS, days);
|
|
travelFinanDraftInfo.set(TravelFinanDraftConstant.NCKD_SUMDAYS, days);
|
|
// 查询补助金额
|
|
// 查询补助金额
|
|
travelFinanDraftInfo.set(TravelFinanDraftConstant.NCKD_AMOUNT, bzAmount.multiply(BigDecimal.valueOf(days)));
|
|
travelFinanDraftInfo.set(TravelFinanDraftConstant.NCKD_AMOUNT, bzAmount.multiply(BigDecimal.valueOf(days)));
|
|
@@ -386,42 +376,7 @@ public class TravelFinanConfirmCreateTask extends AbstractTask {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- protected int getDays(Date startTime, Date endTime,DynamicObject org){
|
|
|
|
- // 获取组织下的工作日历
|
|
|
|
- DynamicObject workCalendar = getWorkCalandar(org.getLong("id"));
|
|
|
|
- List<Date> notWorkDayList = new ArrayList<>();
|
|
|
|
- if(workCalendar != null){
|
|
|
|
- notWorkDayList = QueryServiceHelper.query("bd_workcalendar", "dateentry.workdate", new QFilter[]{
|
|
|
|
- new QFilter("dateentry.datetype", QCP.equals, "3"),
|
|
|
|
- new QFilter("dateentry.workdate", QCP.large_equals, startTime),
|
|
|
|
- new QFilter("dateentry.workdate", QCP.less_equals, endTime),
|
|
|
|
- new QFilter("id", QCP.equals, workCalendar.getPkValue())
|
|
|
|
- }).stream().map(r -> r.getDate("dateentry.workdate")).collect(Collectors.toList());
|
|
|
|
- }
|
|
|
|
- startTime = CommonUtils.getStartOfDay(startTime);
|
|
|
|
- endTime = CommonUtils.getStartOfDay(endTime);
|
|
|
|
- // 计算开始日期和结束日期之间总天数,时间转成日期,然后相减
|
|
|
|
- long diffInMillis = endTime.getTime() - startTime.getTime();
|
|
|
|
- int totalDays = (int) (diffInMillis / (24 * 60 * 60 * 1000)) + 1;
|
|
|
|
|
|
|
|
- // 计算工作日天数(总天数减去非工作日天数)
|
|
|
|
- int workDays = totalDays - notWorkDayList.size();
|
|
|
|
-
|
|
|
|
- return workDays;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- protected DynamicObject getWorkCalandar(Long orgId){
|
|
|
|
- DynamicObject workCalendar = QueryServiceHelper.queryOne("bd_workcalendar", "id", new QFilter("org", QCP.equals, orgId).toArray());
|
|
|
|
- if(workCalendar == null){
|
|
|
|
- Map<Long, Long> parentOrgMap = OrgUnitServiceHelper.getDirectSuperiorOrg(OrgViewType.Admin, Collections.singletonList(orgId));
|
|
|
|
- if(!parentOrgMap.containsKey(orgId)){
|
|
|
|
- return null;
|
|
|
|
- }else{
|
|
|
|
- return getWorkCalandar(parentOrgMap.get(orgId));
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return workCalendar;
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
protected DynamicObject getDraftData( DynamicObject draftEntry , String source, String orderNum, Date startTime,
|
|
protected DynamicObject getDraftData( DynamicObject draftEntry , String source, String orderNum, Date startTime,
|