Browse Source

2024年5月10日16:18:55

纪新园 1 year ago
parent
commit
ada71b8885

+ 31 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/release/entity/SeaReleaseBill.java

@@ -16,11 +16,14 @@
  */
 package org.springblade.los.business.release.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -134,6 +137,9 @@ public class SeaReleaseBill implements Serializable {
 	 * 放单时间,yyyyMMdd HH:mm
 	 */
 	@ApiModelProperty(value = "放单时间,yyyyMMdd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date releaseTime;
 	/**
 	 * 客户 id
@@ -174,11 +180,17 @@ public class SeaReleaseBill implements Serializable {
 	 * 协议生效日期,从 los_bs_agreement_price 表取得?
 	 */
 	@ApiModelProperty(value = "协议生效日期,从 los_bs_agreement_price 表取得?")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date effectiveDate;
 	/**
 	 * 协议失效日期,从 los_bs_agreement_price 表取得?
 	 */
 	@ApiModelProperty(value = "协议失效日期,从 los_bs_agreement_price 表取得?")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date expiringDate;
 	/**
 	 * 船公司 id
@@ -239,11 +251,17 @@ public class SeaReleaseBill implements Serializable {
 	 * 开始日期,SE=海运出口时取 ETD, SI=海运进口 时取 ETA
 	 */
 	@ApiModelProperty(value = "开始日期,SE=海运出口时取 ETD, SI=海运进口 时取 ETA")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date dateFrom;
 	/**
 	 * 结束日期,SE=海运出口时取 ETD, SI=海运进口 时取 ETA
 	 */
 	@ApiModelProperty(value = "结束日期,SE=海运出口时取 ETD, SI=海运进口 时取 ETA")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date dateTo;
 	/**
 	 * 装货港 id
@@ -284,11 +302,17 @@ public class SeaReleaseBill implements Serializable {
 	 * 提交时间,yyyy-MM-dd HH:mm
 	 */
 	@ApiModelProperty(value = "提交时间,yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date applyTime;
 	/**
 	 * 要求时间,yyyy-MM-dd HH:mm
 	 */
 	@ApiModelProperty(value = "要求时间,yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date requireTime;
 	/**
 	 * 结算方式(0 票结 1月结)
@@ -453,4 +477,11 @@ public class SeaReleaseBill implements Serializable {
 	private String issueStatus;
 
 
+	/**
+	 * 卸货港 id
+	 */
+	@TableField(exist = false)
+	private Long podId;
+
+
 }

+ 44 - 2
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/release/entity/SeaReleaseBillItems.java

@@ -16,11 +16,14 @@
  */
 package org.springblade.los.business.release.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -138,6 +141,9 @@ public class SeaReleaseBillItems implements Serializable {
 	 * 单据日期
 	 */
 	@ApiModelProperty(value = "单据日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date billDate;
 	/**
 	 * 海运进出口原业务创建人 Id
@@ -303,13 +309,17 @@ public class SeaReleaseBillItems implements Serializable {
 	 * ETD
 	 */
 	@ApiModelProperty(value = "ETD")
-	@TableField("ETD")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(value = "ETD",updateStrategy = FieldStrategy.IGNORED)
 	private Date etd;
 	/**
 	 * ETA
 	 */
 	@ApiModelProperty(value = "ETA")
-	@TableField("ETA")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(value = "ETA",updateStrategy = FieldStrategy.IGNORED)
 	private Date eta;
 	/**
 	 * 装货港 id
@@ -380,11 +390,17 @@ public class SeaReleaseBillItems implements Serializable {
 	 * 签单日期
 	 */
 	@ApiModelProperty(value = "签单日期")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date issueDate;
 	/**
 	 * 签单地点
 	 */
 	@ApiModelProperty(value = "签单地点")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date issueAt;
 	/**
 	 * 放单类型,0=自取,1=送单,2=寄送
@@ -410,36 +426,57 @@ public class SeaReleaseBillItems implements Serializable {
 	 * 要求时间,yyyy-MM-dd HH:mm
 	 */
 	@ApiModelProperty(value = "要求时间,yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date requireTime;
 	/**
 	 * 提交时间,yyyy-MM-dd HH:mm
 	 */
 	@ApiModelProperty(value = "提交时间,yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date applyTime;
 	/**
 	 * 跑单时间,yyyy-MM-dd HH:mm
 	 */
 	@ApiModelProperty(value = "跑单时间,yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date runTime;
 	/**
 	 * 操作确认时间,yyyy-MM-dd HH:mm
 	 */
 	@ApiModelProperty(value = "操作确认时间,yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date confirmTime;
 	/**
 	 * 调度时间,yyyy-MM-dd HH:mm
 	 */
 	@ApiModelProperty(value = "调度时间,yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date dispatchTime;
 	/**
 	 * 放单时间,yyyy-MM-dd HH:mm
 	 */
 	@ApiModelProperty(value = "放单时间,yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date releaseTime;
 	/**
 	 * 退回时间,yyyy-MM-dd HH:mm
 	 */
 	@ApiModelProperty(value = "退回时间,yyyy-MM-dd HH:mm")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private Date returnTime;
 	/**
 	 * 退回原因
@@ -553,5 +590,10 @@ public class SeaReleaseBillItems implements Serializable {
 	@ApiModelProperty(value = "租户")
 	private String tenantId;
 
+	@ApiModelProperty(value = "签收金额CNY")
+	private BigDecimal signForCny;
+	@ApiModelProperty(value = "签收金额USD")
+	private BigDecimal signForUsd;
+
 
 }

+ 34 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/release/controller/SeaReleaseBillController.java

@@ -31,11 +31,14 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.business.release.entity.SeaReleaseBill;
+import org.springblade.los.business.release.entity.SeaReleaseBillItems;
 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.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 业务-海运放单 控制器
@@ -200,5 +203,36 @@ public class SeaReleaseBillController extends BladeController {
 		return seaReleaseBillService.removeDispatch(seaReleaseBill);
 	}
 
+	/**
+	 * 获取放单明细
+	 */
+	@GetMapping("/releaseItemsList")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "获取放单明细", notes = "传入seaReleaseBill")
+	public R<List<SeaReleaseBillItems>> releaseItemsList(SeaReleaseBill seaReleaseBill) {
+		List<SeaReleaseBillItems> detail = seaReleaseBillService.releaseItemsList(seaReleaseBill);
+		return R.data(detail);
+	}
+
+	/**
+	 * 放单完成
+	 */
+	@PostMapping("/releaseComplete")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入seaReleaseBill")
+	public R releaseComplete(@Valid @RequestBody SeaReleaseBill seaReleaseBill){
+		return seaReleaseBillService.releaseComplete(seaReleaseBill);
+	}
+
+	/**
+	 * 后续有货
+	 */
+	@GetMapping("/subsequentAvailability")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "后续有货", notes = "传入seaReleaseBill")
+	public R subsequentAvailability(SeaReleaseBill seaReleaseBill) {
+		return seaReleaseBillService.subsequentAvailability(seaReleaseBill);
+	}
+
 
 }

+ 9 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/release/service/ISeaReleaseBillService.java

@@ -18,10 +18,13 @@ package org.springblade.los.business.release.service;
 
 import org.springblade.core.tool.api.R;
 import org.springblade.los.business.release.entity.SeaReleaseBill;
+import org.springblade.los.business.release.entity.SeaReleaseBillItems;
 import org.springblade.los.business.release.vo.SeaReleaseBillVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.List;
+
 /**
  * 业务-海运放单 服务类
  *
@@ -56,4 +59,10 @@ public interface ISeaReleaseBillService extends IService<SeaReleaseBill> {
 	R dispatchComplete(SeaReleaseBill seaReleaseBill);
 
 	R removeDispatch(SeaReleaseBill seaReleaseBill);
+
+	List<SeaReleaseBillItems> releaseItemsList(SeaReleaseBill seaReleaseBill);
+
+	R releaseComplete(SeaReleaseBill seaReleaseBill);
+
+	R subsequentAvailability(SeaReleaseBill seaReleaseBill);
 }

+ 198 - 5
blade-service/blade-los/src/main/java/org/springblade/los/business/release/service/impl/SeaReleaseBillServiceImpl.java

@@ -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);
+	}
+
 }

+ 0 - 1
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/controller/BillsController.java

@@ -412,6 +412,5 @@ public class BillsController extends BladeController {
 		List<Bills> detail = billsService.releaseApplication(bills);
 		return R.data(detail);
 	}
-
 }
 

+ 1 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/IBillsService.java

@@ -143,4 +143,5 @@ public interface IBillsService extends IService<Bills> {
 	List<Bills> getDetail(Bills bills);
 
 	List<Bills> releaseApplication(Bills bills);
+
 }

+ 5 - 36
blade-service/blade-los/src/main/java/org/springblade/los/business/sea/service/impl/BillsServiceImpl.java

@@ -65,10 +65,7 @@ import java.math.MathContext;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -686,9 +683,13 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		amountProfitUsd = amountDrUsd.subtract(amountCrUsd);
 		if (amountDrUsd.compareTo(new BigDecimal("0.00")) != 0) {
 			amountDrLoc = amountDrLoc.add(bCurrencyService.converterCny("USD", amountDrUsd, "D", "1")).add(amountDr);
+		}else{
+			amountDrLoc = amountDrLoc.add(amountDr);
 		}
 		if (amountCrUsd.compareTo(new BigDecimal("0.00")) != 0) {
 			amountCrLoc = amountCrLoc.add(bCurrencyService.converterCny("USD", amountCrUsd, "C", "1")).add(amountCr);
+		}else{
+			amountCrLoc = amountCrLoc.add(amountCr);
 		}
 		amountProfitLoc = amountDrLoc.subtract(amountCrLoc);
 		bills.setAmountDr(amountDr);
@@ -1687,39 +1688,7 @@ public class BillsServiceImpl extends ServiceImpl<BillsMapper, Bills> implements
 		if (billsList.isEmpty()) {
 			throw new RuntimeException("未查到单据信息");
 		}
-		for (Bills detail : billsList) {
-			List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
-				.eq(FeeCenter::getIsDeleted, 0)
-				.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
-				.eq(FeeCenter::getBillType, detail.getBillType())
-				.eq(FeeCenter::getPid, detail.getId())
-				.eq(FeeCenter::getDc, "D")
-				.eq(FeeCenter::getAccStatus, 1)
-				.eq(FeeCenter::getBillNo, detail.getBillNo()
-				));
-			BigDecimal receivableCNY = feeCenterList.stream().filter(e -> "CNY".equals(e.getCurCode()))
-				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal receivableUSD = feeCenterList.stream().filter(e -> "USD".equals(e.getCurCode()))
-				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal unreceivedCNY = feeCenterList.stream().filter(e -> "CNY".equals(e.getCurCode()))
-				.map(FeeCenter::getUnsettledAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal unreceivedUSD = feeCenterList.stream().filter(e -> "USD".equals(e.getCurCode()))
-				.map(FeeCenter::getUnsettledAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal signForCNY = feeCenterList.stream().filter(e -> "CNY".equals(e.getCurCode()) && 1 == e.getIsSignfor())
-				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			BigDecimal signForUSD = feeCenterList.stream().filter(e -> "USD".equals(e.getCurCode()) && 1 == e.getIsSignfor())
-				.map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-			detail.setAmountDr(receivableCNY);
-			detail.setAmountDrUsd(receivableUSD);
-			detail.setAmountDrLoc(receivableCNY.add(bCurrencyService.converterCny("USD", receivableUSD, "D", "1")));
-			detail.setUnreceivedAmountDr(unreceivedCNY);
-			detail.setUnreceivedAmountDrUsd(unreceivedUSD);
-			detail.setUnreceivedAmountDrLoc(unreceivedCNY.add(bCurrencyService.converterCny("USD", unreceivedUSD, "D", "1")));
-			detail.setSignForCNY(signForCNY);
-			detail.setSignForUSD(signForUSD);
-		}
 		return billsList;
 	}
 
-
 }