|
|
@@ -29,6 +29,7 @@ import org.springblade.los.Util.IDeptUtils;
|
|
|
import org.springblade.los.Util.StringTools;
|
|
|
import org.springblade.los.basic.business.entity.BusinessType;
|
|
|
import org.springblade.los.basic.business.service.IBusinessTypeService;
|
|
|
+import org.springblade.los.basic.cur.service.IBCurrencyService;
|
|
|
import org.springblade.los.billno.entity.BusinessBillNo;
|
|
|
import org.springblade.los.billno.service.IBusinessBillNoService;
|
|
|
import org.springblade.los.business.release.entity.SeaReleaseBill;
|
|
|
@@ -39,13 +40,15 @@ import org.springblade.los.business.release.service.ISeaReleaseBillService;
|
|
|
import org.springblade.los.business.release.vo.SeaReleaseBillVO;
|
|
|
import org.springblade.los.business.sea.entity.Bills;
|
|
|
import org.springblade.los.business.sea.mapper.BillsMapper;
|
|
|
+import org.springblade.los.finance.fee.entity.FeeCenter;
|
|
|
+import org.springblade.los.finance.fee.service.IFeeCenterService;
|
|
|
import org.springblade.system.feign.ISysClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -71,6 +74,10 @@ public class SeaReleaseBillServiceImpl extends ServiceImpl<SeaReleaseBillMapper,
|
|
|
|
|
|
private final BillsMapper billsMapper;
|
|
|
|
|
|
+ private final IFeeCenterService feeCenterService;
|
|
|
+
|
|
|
+ private final IBCurrencyService bCurrencyService;
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<SeaReleaseBillVO> selectSeaReleaseBillPage(IPage<SeaReleaseBillVO> page, SeaReleaseBillVO seaReleaseBill) {
|
|
|
return page.setRecords(baseMapper.selectSeaReleaseBillPage(page, seaReleaseBill));
|
|
|
@@ -441,9 +448,7 @@ public class SeaReleaseBillServiceImpl extends ServiceImpl<SeaReleaseBillMapper,
|
|
|
if (!seaReleaseBill.getDispatchList().isEmpty()) {
|
|
|
for (SeaReleaseBillItems item : seaReleaseBill.getDispatchList()) {
|
|
|
item.setIssueStatus("I");
|
|
|
- item.setIssueDate(new Date());
|
|
|
- item.setRunnerId(seaReleaseBill.getRunnerId());
|
|
|
- item.setRunnerName(seaReleaseBill.getRunnerName());
|
|
|
+ item.setDispatchTime(new Date());
|
|
|
item.setUpdateUser(AuthUtil.getUserId());
|
|
|
item.setUpdateTime(new Date());
|
|
|
}
|
|
|
@@ -488,4 +493,192 @@ public class SeaReleaseBillServiceImpl extends ServiceImpl<SeaReleaseBillMapper,
|
|
|
return R.data(seaReleaseBill);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<SeaReleaseBillItems> releaseItemsList(SeaReleaseBill releaseBill) {
|
|
|
+ LambdaQueryWrapper<SeaReleaseBillItems> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(SeaReleaseBillItems::getTenantId,AuthUtil.getTenantId())
|
|
|
+ .eq(SeaReleaseBillItems::getIsDeleted,0)
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getCorpId()),SeaReleaseBillItems::getCorpId,releaseBill.getCorpId())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getBusinessType()),SeaReleaseBillItems::getSeaType,releaseBill.getBusinessType())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getMblno()),SeaReleaseBillItems::getMblno,releaseBill.getMblno())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getCarrierId()),SeaReleaseBillItems::getCarrierId,releaseBill.getCarrierId())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getVesselId()),SeaReleaseBillItems::getVesselId,releaseBill.getVesselId())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getVoyageNo()),SeaReleaseBillItems::getVoyageNo,releaseBill.getVoyageNo())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getPolId()),SeaReleaseBillItems::getPolId,releaseBill.getPolId())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getPodId()),SeaReleaseBillItems::getPodId,releaseBill.getPodId())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getIssueStatus()),SeaReleaseBillItems::getIssueStatus,releaseBill.getIssueStatus())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getIsSwtich()),SeaReleaseBillItems::getIsSwtich,releaseBill.getIsSwtich())
|
|
|
+ .eq(ObjectUtils.isNotNull(releaseBill.getReleaseType()),SeaReleaseBillItems::getReleaseType,releaseBill.getReleaseType())
|
|
|
+ ;
|
|
|
+ if ("SE".equals(releaseBill.getBusinessType())){
|
|
|
+ lambdaQueryWrapper.gt(ObjectUtils.isNotNull(releaseBill.getDateFrom()),SeaReleaseBillItems::getEtd,releaseBill.getDateFrom())
|
|
|
+ .lt(ObjectUtils.isNotNull(releaseBill.getDateTo()),SeaReleaseBillItems::getEtd,releaseBill.getDateTo());
|
|
|
+ }else{
|
|
|
+ lambdaQueryWrapper.gt(ObjectUtils.isNotNull(releaseBill.getDateFrom()),SeaReleaseBillItems::getEta,releaseBill.getDateFrom())
|
|
|
+ .lt(ObjectUtils.isNotNull(releaseBill.getDateTo()),SeaReleaseBillItems::getEta,releaseBill.getDateTo());
|
|
|
+ }
|
|
|
+ List<SeaReleaseBillItems> seaReleaseBillItems = seaReleaseBillItemsService.list(lambdaQueryWrapper);
|
|
|
+ //调度明细
|
|
|
+ if (!seaReleaseBillItems.isEmpty()) {
|
|
|
+ List<Long> ids = seaReleaseBillItems.stream().map(SeaReleaseBillItems::getBillId).collect(Collectors.toList());
|
|
|
+ List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .in(FeeCenter::getBillType, releaseBill.getBusinessType())
|
|
|
+ .eq(FeeCenter::getPid, ids)
|
|
|
+ .eq(FeeCenter::getDc, "D")
|
|
|
+ .eq(FeeCenter::getAccStatus, 1)
|
|
|
+ );
|
|
|
+ for (SeaReleaseBillItems item : seaReleaseBillItems) {
|
|
|
+ List<FeeCenter> finAccBills = feeCenterList.stream().filter(e->e.getPid().equals(item.getBillId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (!finAccBills.isEmpty()){
|
|
|
+ BigDecimal receivableCNY = finAccBills.stream().filter(e -> "CNY".equals(e.getCurCode()))
|
|
|
+ .map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal receivableUSD = finAccBills.stream().filter(e -> "USD".equals(e.getCurCode()))
|
|
|
+ .map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal unreceivedCNY = finAccBills.stream().filter(e -> "CNY".equals(e.getCurCode()))
|
|
|
+ .map(FeeCenter::getUnsettledAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal unreceivedUSD = finAccBills.stream().filter(e -> "USD".equals(e.getCurCode()))
|
|
|
+ .map(FeeCenter::getUnsettledAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal signForCNY = finAccBills.stream().filter(e -> "CNY".equals(e.getCurCode()) && 1 == e.getIsSignfor())
|
|
|
+ .map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal signForUSD = finAccBills.stream().filter(e -> "USD".equals(e.getCurCode()) && 1 == e.getIsSignfor())
|
|
|
+ .map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ item.setAmountDrCny(receivableCNY);
|
|
|
+ item.setAmountDrUsd(receivableUSD);
|
|
|
+ item.setAmountDrTotal(receivableCNY.add(bCurrencyService.converterCny("USD", receivableUSD, "D", "1")));
|
|
|
+ item.setUnstlDrCny(unreceivedCNY);
|
|
|
+ item.setUnstlDrUsd(unreceivedUSD);
|
|
|
+ item.setUnstlDrTotal(unreceivedCNY.add(bCurrencyService.converterCny("USD", unreceivedUSD, "D", "1")));
|
|
|
+ item.setSignForCny(signForCNY);
|
|
|
+ item.setSignForUsd(signForUSD);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return seaReleaseBillItems;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
|
|
|
+ public R releaseComplete(SeaReleaseBill seaReleaseBill) {
|
|
|
+ if (null == seaReleaseBill.getId()) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ seaReleaseBill.setIssueStatus("T");
|
|
|
+ seaReleaseBill.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ seaReleaseBill.setUpdateTime(new Date());
|
|
|
+ baseMapper.updateById(seaReleaseBill);
|
|
|
+ //调度
|
|
|
+ if (!seaReleaseBill.getDispatchList().isEmpty()) {
|
|
|
+ for (SeaReleaseBillItems item : seaReleaseBill.getDispatchList()) {
|
|
|
+ item.setIssueStatus("T");
|
|
|
+ item.setPReleaseId(seaReleaseBill.getId());
|
|
|
+ item.setReleaseTime(new Date());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ }
|
|
|
+ seaReleaseBillItemsService.updateBatchById(seaReleaseBill.getDispatchList());
|
|
|
+ List<Long> ids = seaReleaseBill.getDispatchList().stream().map(SeaReleaseBillItems::getBillId).collect(Collectors.toList());
|
|
|
+ if (!ids.isEmpty()) {
|
|
|
+ List<Bills> billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
|
|
|
+ .eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted, 0)
|
|
|
+ .eq(Bills::getBranchId, deptUtils.getDeptPid())
|
|
|
+ .in(Bills::getId, ids));
|
|
|
+ for (Bills item : billsList) {
|
|
|
+ item.setIssueStatus("T");
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ billsMapper.updateById(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return R.data(seaReleaseBill);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R subsequentAvailability(SeaReleaseBill releaseBill) {
|
|
|
+ Date date = new Date();
|
|
|
+ // 获取当前日期和时间
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
+
|
|
|
+ // 将当前日期减去30天
|
|
|
+ calendar.add(Calendar.DAY_OF_MONTH, -30);
|
|
|
+
|
|
|
+ // 获取修改后的日期
|
|
|
+ Date newDate = calendar.getTime();
|
|
|
+
|
|
|
+ LambdaQueryWrapper<Bills> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(Bills::getTenantId,AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted,0)
|
|
|
+ .eq(Bills::getBusinessType,releaseBill.getBusinessType())
|
|
|
+ .eq(Bills::getCorpId,releaseBill.getCorpId())
|
|
|
+ ;
|
|
|
+ if (!AuthUtil.getUserRole().contains("admin") && !AuthUtil.getUserRole().contains("财务")) {
|
|
|
+ lambdaQueryWrapper.apply("find_in_set(team_id,'" + AuthUtil.getPostId() + "')");
|
|
|
+ }
|
|
|
+ if (!AuthUtil.getUserRole().contains("admin")) {
|
|
|
+ lambdaQueryWrapper.eq(Bills::getBranchId, deptUtils.getDeptPid());
|
|
|
+ }
|
|
|
+ if ("SE".equals(releaseBill.getBusinessType())){
|
|
|
+ lambdaQueryWrapper.gt(Bills::getEtd,newDate)
|
|
|
+ .lt(Bills::getEtd,date);
|
|
|
+ }else{
|
|
|
+ lambdaQueryWrapper.gt(Bills::getEta,newDate)
|
|
|
+ .lt(Bills::getEta,date);
|
|
|
+ }
|
|
|
+ List<Bills> billsList = billsMapper.selectList(lambdaQueryWrapper);
|
|
|
+ List<Bills> billsList1 = new ArrayList<>();
|
|
|
+ if (!billsList.isEmpty()){
|
|
|
+ List<SeaReleaseBillItems> applicationList = releaseBill.getApplicationList();
|
|
|
+ List<Long> billList = new ArrayList<>();
|
|
|
+ if (!applicationList.isEmpty()){
|
|
|
+ List<Long> applicationIds = applicationList.stream().map(SeaReleaseBillItems::getBillId).collect(Collectors.toList());
|
|
|
+ if (!applicationIds.isEmpty()){
|
|
|
+ billList.addAll(applicationIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<SeaReleaseBillItems> releaseBillList = releaseBill.getReleaseBillList();
|
|
|
+ if (!releaseBillList.isEmpty()){
|
|
|
+ List<Long> releaseBillIds = releaseBillList.stream().map(SeaReleaseBillItems::getBillId).collect(Collectors.toList());
|
|
|
+ if (!releaseBillIds.isEmpty()){
|
|
|
+ billList.addAll(releaseBillIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Bills> bills = billsList.stream().filter(e-> !billList.contains(e.getId())).collect(Collectors.toList());
|
|
|
+ if (!bills.isEmpty()){
|
|
|
+ List<Long> billIds = bills.stream().map(Bills::getId).collect(Collectors.toList());
|
|
|
+ List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getTenantId,AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted,0)
|
|
|
+ .eq(FeeCenter::getDc,"D")
|
|
|
+ .in(FeeCenter::getPid,billIds)
|
|
|
+ .eq(FeeCenter::getAccStatus,1));
|
|
|
+ for (Bills item :bills){
|
|
|
+ if (feeCenterList.stream().anyMatch(e -> e.getPid().equals(item.getId()))){
|
|
|
+ billsList1.add(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<String,String> map = new HashMap<>();
|
|
|
+ if (!billsList1.isEmpty()){
|
|
|
+ map.put("number",billsList1.size()+"");
|
|
|
+ StringBuilder text = new StringBuilder();
|
|
|
+ for (Bills item : billsList1){
|
|
|
+ if ("SE".equals(item.getBusinessType())){
|
|
|
+ text.append(item.getEtd()).append(" ");
|
|
|
+ }else{
|
|
|
+ text.append(item.getEta()).append(" ");
|
|
|
+ }
|
|
|
+ text.append(item.getMblno()).append(" ").append(item.getIssueType()).append("\n");
|
|
|
+ }
|
|
|
+ map.put("text", text.toString());
|
|
|
+ }
|
|
|
+ return R.data(map);
|
|
|
+ }
|
|
|
+
|
|
|
}
|