Explorar o código

1.增加客户未收账款接口
"2.海运进出口增加字段计费重量
装箱货物类型
单据锁
解锁日期"
3.增加模块-业务加解锁
4.业务加解锁基础相关接口修改
5.本周经汉禅道需求-测试及修改

纪新园 hai 11 meses
pai
achega
925d1db38c
Modificáronse 13 ficheiros con 684 adicións e 18 borrados
  1. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/fees/entity/BFees.java
  2. 34 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/locks/dto/BillLocksDTO.java
  3. 218 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/locks/entity/BillLocks.java
  4. 36 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/locks/vo/BillLocksVO.java
  5. 28 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java
  6. 6 0
      blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java
  7. 2 2
      blade-service/blade-los/src/main/java/org/springblade/los/basic/fees/controller/BFeesController.java
  8. 140 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/locks/controller/BillLocksController.java
  9. 42 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/locks/mapper/BillLocksMapper.java
  10. 48 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/locks/mapper/BillLocksMapper.xml
  11. 41 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/locks/service/IBillLocksService.java
  12. 41 0
      blade-service/blade-los/src/main/java/org/springblade/los/business/locks/service/impl/BillLocksServiceImpl.java
  13. 42 16
      blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/basic/fees/entity/BFees.java

@@ -202,5 +202,11 @@ public class BFees implements Serializable {
 	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String feesTypeCode;
 
+	/**
+	 * 是否强制币别
+	 */
+	@ApiModelProperty(value = "是否强制币别")
+	private Integer whetherForceCurNo;
+
 
 }

+ 34 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/locks/dto/BillLocksDTO.java

@@ -0,0 +1,34 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.business.locks.dto;
+
+import org.springblade.los.business.locks.entity.BillLocks;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 业务-业务加解锁明细,各分公司独立数据传输对象实体类
+ *
+ * @author BladeX
+ * @since 2025-06-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class BillLocksDTO extends BillLocks {
+	private static final long serialVersionUID = 1L;
+
+}

+ 218 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/locks/entity/BillLocks.java

@@ -0,0 +1,218 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.business.locks.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 业务-业务加解锁明细,各分公司独立实体类
+ *
+ * @author BladeX
+ * @since 2025-06-06
+ */
+@Data
+@TableName("los_bill_locks")
+@ApiModel(value = "BillLocks对象", description = "业务-业务加解锁明细,各分公司独立")
+public class BillLocks implements Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 主键
+	 */
+	@ApiModelProperty(value = "主键")
+	private Long id;
+	/**
+	 * 分公司 Id
+	 */
+	@ApiModelProperty(value = "分公司 Id")
+	private String branchId;
+	/**
+	 * 创建人 Id
+	 */
+	@ApiModelProperty(value = "创建人 Id")
+	private Long createUser;
+	/**
+	 * 创建人
+	 */
+	@ApiModelProperty(value = "创建人")
+	private String createUserName;
+	/**
+	 * 创建部门 Id
+	 */
+	@ApiModelProperty(value = "创建部门 Id")
+	private String createDept;
+	/**
+	 * 创建部门
+	 */
+	@ApiModelProperty(value = "创建部门")
+	private String createDeptName;
+	/**
+	 * 创建时间
+	 */
+	@ApiModelProperty(value = "创建时间")
+	private Date createTime;
+	/**
+	 * 修改人 Id
+	 */
+	@ApiModelProperty(value = "修改人 Id")
+	private Long updateUser;
+	/**
+	 * 修改人
+	 */
+	@ApiModelProperty(value = "修改人")
+	private String updateUserName;
+	/**
+	 * 修改时间
+	 */
+	@ApiModelProperty(value = "修改时间")
+	private Date updateTime;
+	/**
+	 * 单据编号,los_bill_locks.bill_no
+	 */
+	@ApiModelProperty(value = "单据编号,los_bill_locks.bill_no")
+	private String billNo;
+	/**
+	 * 单据日期
+	 */
+	@ApiModelProperty(value = "单据日期")
+	private Date billDate;
+	/**
+	 * 业务类型编码, 海运进出口 空运运进出口 等
+	 */
+	@ApiModelProperty(value = "业务类型编码, 海运进出口 空运运进出口 等")
+	private String businessType;
+	/**
+	 * 业务类型名称, 海运进出口 空运运进出口 等
+	 */
+	@ApiModelProperty(value = "业务类型名称, 海运进出口 空运运进出口 等")
+	private String businessTypeName;
+	/**
+	 * 源业务 id,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务 id,根据主表检索条件检出")
+	private Long srcId;
+	/**
+	 * 源业务单据编号,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务单据编号,根据主表检索条件检出")
+	private String srcBillNo;
+	/**
+	 * 源业务船名 id,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务船名 id,根据主表检索条件检出")
+	private Long srcVesselId;
+	/**
+	 * 源业务中文船名,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务中文船名,根据主表检索条件检出")
+	private String srcVesselCnName;
+	/**
+	 * 源业务英文船名,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务英文船名,根据主表检索条件检出")
+	private String srcVesselEnName;
+	/**
+	 * 源业务航次,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务航次,根据主表检索条件检出")
+	private String srcVoyageNo;
+	/**
+	 * 源业务MBLNO,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务MBLNO,根据主表检索条件检出")
+	private String srcMblno;
+	/**
+	 * 源业务Reference NO,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务Reference NO,根据主表检索条件检出")
+	private String srcRefno;
+	/**
+	 * 源业务团队id,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务团队id,根据主表检索条件检出")
+	private Long srcTeamId;
+	/**
+	 * 源业务团队名,根据主表检索条件检出
+	 */
+	@ApiModelProperty(value = "源业务团队名,根据主表检索条件检出")
+	private String srcTeamName;
+	/**
+	 * 原业务描述,用于添加原业务主要信息
+	 */
+	@ApiModelProperty(value = "原业务描述,用于添加原业务主要信息")
+	private String srcDescr;
+	/**
+	 * 加解锁操作(0 加锁 1解锁)
+	 */
+	@ApiModelProperty(value = "加解锁操作(0 加锁 1解锁)")
+	private Integer locked;
+	/**
+	 * 加解锁操作时间
+	 */
+	@ApiModelProperty(value = "加解锁操作时间")
+	private Date lockedTime;
+	/**
+	 * 源业务累计已解锁次数,包括本次
+	 */
+	@ApiModelProperty(value = "源业务累计已解锁次数,包括本次")
+	private Integer unlockedCount;
+	/**
+	 * 操作 Id,直接取当前操作员,执行加解锁操作时赋值
+	 */
+	@ApiModelProperty(value = "操作 Id,直接取当前操作员,执行加解锁操作时赋值")
+	private Long operatorId;
+	/**
+	 * 操作,直接取当前操作员,执行加解锁操作时赋值
+	 */
+	@ApiModelProperty(value = "操作,直接取当前操作员,执行加解锁操作时赋值")
+	private String operatorName;
+	/**
+	 * 版本
+	 */
+	@ApiModelProperty(value = "版本")
+	private String version;
+	/**
+	 * 状态(0 正常 1停用)
+	 */
+	@ApiModelProperty(value = "状态(0 正常 1停用)")
+	private Integer status;
+	/**
+	 * 是否已删除(0 否 1是)
+	 */
+	@ApiModelProperty(value = "是否已删除(0 否 1是)")
+	private Integer isDeleted;
+	/**
+	 * 备注
+	 */
+	@ApiModelProperty(value = "备注")
+	private String remarks;
+
+	/**
+	 * 租户
+	 */
+	@ApiModelProperty(value = "租户")
+	private String tenantId;
+
+
+}

+ 36 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/locks/vo/BillLocksVO.java

@@ -0,0 +1,36 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.business.locks.vo;
+
+import org.springblade.los.business.locks.entity.BillLocks;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+
+/**
+ * 业务-业务加解锁明细,各分公司独立视图实体类
+ *
+ * @author BladeX
+ * @since 2025-06-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "BillLocksVO对象", description = "业务-业务加解锁明细,各分公司独立")
+public class BillLocksVO extends BillLocks {
+	private static final long serialVersionUID = 1L;
+
+}

+ 28 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/business/sea/entity/Bills.java

@@ -1944,14 +1944,42 @@ public class Bills implements Serializable {
 	 * 报价方式
 	 */
 	@ApiModelProperty(value = "报价方式")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String quotationMethod;
 	/**
 	 * 结算方式
 	 */
 	@ApiModelProperty(value = "结算方式")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
 	private String accountPeriodType;
 
 	/**
+	 * 计费重量   默认方,选项为方/吨
+	 */
+	@ApiModelProperty(value = "计费重量")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String chargeableWeight;
+
+	/**
+	 * 装箱货物类型  滚装(RO/RO)/散货(BULK)
+	 */
+	@ApiModelProperty(value = "装箱货物类型")
+	@TableField(updateStrategy = FieldStrategy.IGNORED)
+	private String cntrGoodType;
+
+	/**
+	 * 单据锁
+	 */
+	@ApiModelProperty(value = "单据锁")
+	private Integer locked;
+
+	/**
+	 * 解锁日期
+	 */
+	@ApiModelProperty(value = "解锁日期")
+	private String lockedDate;
+
+	/**
 	 * 临时来源id
 	 */
 	@TableField(exist = false)

+ 6 - 0
blade-service-api/blade-los-api/src/main/java/org/springblade/los/finance/fee/entity/FeeCenter.java

@@ -993,5 +993,11 @@ public class FeeCenter implements Serializable {
 	@ApiModelProperty(value = "扣款时间")
 	private Date deductionTime;
 
+	/**
+	 * 是否强制币别
+	 */
+	@ApiModelProperty(value = "是否强制币别")
+	private Integer whetherForceCurNo;
+
 }
 

+ 2 - 2
blade-service/blade-los/src/main/java/org/springblade/los/basic/fees/controller/BFeesController.java

@@ -86,7 +86,7 @@ public class BFeesController extends BladeController {
 			.and(ObjectUtils.isNotNull(bFees.getCnName()), i -> i.like(BFees::getCnName, bFees.getCnName()).or()
 				.like(BFees::getEnName, bFees.getCnName()).or().like(BFees::getCode, bFees.getCnName()))
 			.like(ObjectUtils.isNotNull(bFees.getStatus()), BFees::getStatus, bFees.getStatus())
-			.and(i -> i.like(ObjectUtils.isNotNull(bFees.getFeesTypeCode()), BFees::getFeesTypeCode, bFees.getFeesTypeCode()).or()
+			.and(ObjectUtils.isNotNull(bFees.getFeesTypeCode()),i -> i.like( BFees::getFeesTypeCode, bFees.getFeesTypeCode()).or()
 				.isNull(BFees::getFeesTypeCode))
 			.like(ObjectUtils.isNotNull(bFees.getCode()), BFees::getCode, bFees.getCode())
 			.like(ObjectUtils.isNotNull(bFees.getEnName()), BFees::getEnName, bFees.getEnName())
@@ -217,7 +217,7 @@ public class BFeesController extends BladeController {
 			.and(ObjectUtils.isNotNull(bFees.getCnName()), i -> i.like(BFees::getCnName, bFees.getCnName()).or()
 				.like(BFees::getEnName, bFees.getCnName()).or().like(BFees::getCode, bFees.getCnName()))
 			.like(ObjectUtils.isNotNull(bFees.getStatus()), BFees::getStatus, bFees.getStatus())
-			.and(i -> i.like(ObjectUtils.isNotNull(bFees.getFeesTypeCode()), BFees::getFeesTypeCode, bFees.getFeesTypeCode()).or()
+			.and(ObjectUtils.isNotNull(bFees.getFeesTypeCode()),i -> i.like( BFees::getFeesTypeCode, bFees.getFeesTypeCode()).or()
 				.isNull(BFees::getFeesTypeCode))
 			.like(ObjectUtils.isNotNull(bFees.getCode()), BFees::getCode, bFees.getCode())
 			.like(ObjectUtils.isNotNull(bFees.getEnName()), BFees::getEnName, bFees.getEnName())

+ 140 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/locks/controller/BillLocksController.java

@@ -0,0 +1,140 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.business.locks.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.AllArgsConstructor;
+import org.springblade.core.boot.ctrl.BladeController;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+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.locks.entity.BillLocks;
+import org.springblade.los.business.locks.service.IBillLocksService;
+import org.springblade.los.business.locks.vo.BillLocksVO;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+/**
+ * 业务-业务加解锁明细,各分公司独立 控制器
+ *
+ * @author BladeX
+ * @since 2025-06-06
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/billlocks")
+@Api(value = "业务-业务加解锁明细,各分公司独立", tags = "业务-业务加解锁明细,各分公司独立接口")
+public class BillLocksController extends BladeController {
+
+	private final IBillLocksService billLocksService;
+
+	/**
+	 * 详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "详情", notes = "传入billLocks")
+	public R<BillLocks> detail(BillLocks billLocks) {
+		BillLocks detail = billLocksService.getOne(Condition.getQueryWrapper(billLocks));
+		return R.data(detail);
+	}
+
+	/**
+	 * 分页 业务-业务加解锁明细,各分公司独立
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入billLocks")
+	public R<IPage<BillLocks>> list(BillLocks billLocks, Query query) {
+		LambdaQueryWrapper<BillLocks> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+		lambdaQueryWrapper.eq(BillLocks::getIsDeleted, 0)
+			.eq(BillLocks::getTenantId, AuthUtil.getTenantId())
+			.like(ObjectUtils.isNotNull(billLocks.getSrcMblno()), BillLocks::getSrcMblno, billLocks.getSrcMblno())
+			.like(ObjectUtils.isNotNull(billLocks.getSrcBillNo()), BillLocks::getSrcBillNo, billLocks.getSrcBillNo())
+			.eq(ObjectUtils.isNotNull(billLocks.getBusinessType()), BillLocks::getBusinessType, billLocks.getBusinessType())
+			.like(ObjectUtils.isNotNull(billLocks.getStatus()), BillLocks::getStatus, billLocks.getStatus())
+			.like(ObjectUtils.isNotNull(billLocks.getLocked()), BillLocks::getLocked, billLocks.getLocked())
+			.eq(ObjectUtils.isNotNull(billLocks.getSrcVesselId()), BillLocks::getSrcVesselId, billLocks.getSrcVesselId())
+			.like(ObjectUtils.isNotNull(billLocks.getSrcVoyageNo()), BillLocks::getSrcVoyageNo, billLocks.getSrcVoyageNo())
+			.orderByDesc(BillLocks::getCreateTime);
+		IPage<BillLocks> pages = billLocksService.page(Condition.getPage(query), lambdaQueryWrapper);
+		return R.data(pages);
+	}
+
+	/**
+	 * 自定义分页 业务-业务加解锁明细,各分公司独立
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "分页", notes = "传入billLocks")
+	public R<IPage<BillLocksVO>> page(BillLocksVO billLocks, Query query) {
+		IPage<BillLocksVO> pages = billLocksService.selectBillLocksPage(Condition.getPage(query), billLocks);
+		return R.data(pages);
+	}
+
+	/**
+	 * 新增 业务-业务加解锁明细,各分公司独立
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "新增", notes = "传入billLocks")
+	public R save(@Valid @RequestBody BillLocks billLocks) {
+		return R.status(billLocksService.save(billLocks));
+	}
+
+	/**
+	 * 修改 业务-业务加解锁明细,各分公司独立
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "修改", notes = "传入billLocks")
+	public R update(@Valid @RequestBody BillLocks billLocks) {
+		return R.status(billLocksService.updateById(billLocks));
+	}
+
+	/**
+	 * 新增或修改 业务-业务加解锁明细,各分公司独立
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "新增或修改", notes = "传入billLocks")
+	public R submit(@Valid @RequestBody BillLocks billLocks) {
+		return R.status(billLocksService.saveOrUpdate(billLocks));
+	}
+
+
+	/**
+	 * 删除 业务-业务加解锁明细,各分公司独立
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "删除", notes = "传入ids")
+	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		return R.status(billLocksService.removeByIds(Func.toLongList(ids)));
+	}
+
+
+}

+ 42 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/locks/mapper/BillLocksMapper.java

@@ -0,0 +1,42 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.business.locks.mapper;
+
+import org.springblade.los.business.locks.entity.BillLocks;
+import org.springblade.los.business.locks.vo.BillLocksVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.List;
+
+/**
+ * 业务-业务加解锁明细,各分公司独立 Mapper 接口
+ *
+ * @author BladeX
+ * @since 2025-06-06
+ */
+public interface BillLocksMapper extends BaseMapper<BillLocks> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param billLocks
+	 * @return
+	 */
+	List<BillLocksVO> selectBillLocksPage(IPage page, BillLocksVO billLocks);
+
+}

+ 48 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/locks/mapper/BillLocksMapper.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.los.business.locks.mapper.BillLocksMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="billLocksResultMap" type="org.springblade.los.business.locks.entity.BillLocks">
+        <id column="id" property="id"/>
+        <result column="branch_id" property="branchId"/>
+        <result column="create_user" property="createUser"/>
+        <result column="create_user_name" property="createUserName"/>
+        <result column="create_dept" property="createDept"/>
+        <result column="create_dept_name" property="createDeptName"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_user" property="updateUser"/>
+        <result column="update_user_name" property="updateUserName"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="bill_no" property="billNo"/>
+        <result column="bill_date" property="billDate"/>
+        <result column="business_type" property="businessType"/>
+        <result column="business_type_name" property="businessTypeName"/>
+        <result column="src_id" property="srcId"/>
+        <result column="src_bill_no" property="srcBillNo"/>
+        <result column="src_vessel_id" property="srcVesselId"/>
+        <result column="src_vessel_cn_name" property="srcVesselCnName"/>
+        <result column="src_vessel_en_name" property="srcVesselEnName"/>
+        <result column="src_voyage_no" property="srcVoyageNo"/>
+        <result column="src_mblno" property="srcMblno"/>
+        <result column="src_refno" property="srcRefno"/>
+        <result column="src_team_id" property="srcTeamId"/>
+        <result column="src_team_name" property="srcTeamName"/>
+        <result column="src_descr" property="srcDescr"/>
+        <result column="locked" property="locked"/>
+        <result column="locked_time" property="lockedTime"/>
+        <result column="unlocked_count" property="unlockedCount"/>
+        <result column="operator_id" property="operatorId"/>
+        <result column="operator_name" property="operatorName"/>
+        <result column="version" property="version"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="remarks" property="remarks"/>
+    </resultMap>
+
+
+    <select id="selectBillLocksPage" resultMap="billLocksResultMap">
+        select * from los_bill_locks where is_deleted = 0
+    </select>
+
+</mapper>

+ 41 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/locks/service/IBillLocksService.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.business.locks.service;
+
+import org.springblade.los.business.locks.entity.BillLocks;
+import org.springblade.los.business.locks.vo.BillLocksVO;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 业务-业务加解锁明细,各分公司独立 服务类
+ *
+ * @author BladeX
+ * @since 2025-06-06
+ */
+public interface IBillLocksService extends IService<BillLocks> {
+
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param billLocks
+	 * @return
+	 */
+	IPage<BillLocksVO> selectBillLocksPage(IPage<BillLocksVO> page, BillLocksVO billLocks);
+
+}

+ 41 - 0
blade-service/blade-los/src/main/java/org/springblade/los/business/locks/service/impl/BillLocksServiceImpl.java

@@ -0,0 +1,41 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.los.business.locks.service.impl;
+
+import org.springblade.los.business.locks.entity.BillLocks;
+import org.springblade.los.business.locks.vo.BillLocksVO;
+import org.springblade.los.business.locks.mapper.BillLocksMapper;
+import org.springblade.los.business.locks.service.IBillLocksService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+/**
+ * 业务-业务加解锁明细,各分公司独立 服务实现类
+ *
+ * @author BladeX
+ * @since 2025-06-06
+ */
+@Service
+public class BillLocksServiceImpl extends ServiceImpl<BillLocksMapper, BillLocks> implements IBillLocksService {
+
+	@Override
+	public IPage<BillLocksVO> selectBillLocksPage(IPage<BillLocksVO> page, BillLocksVO billLocks) {
+		return page.setRecords(baseMapper.selectBillLocksPage(page, billLocks));
+	}
+
+}

+ 42 - 16
blade-service/blade-los/src/main/java/org/springblade/los/finance/fee/controller/FinAccBillsController.java

@@ -35,26 +35,20 @@ import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.los.basic.corps.entity.BCorps;
 import org.springblade.los.basic.corps.service.IBCorpsService;
-import org.springblade.los.business.sea.entity.Bills;
-import org.springblade.los.excel.BCorpsExcel;
 import org.springblade.los.excel.FeeCountByCorpCExcel;
 import org.springblade.los.excel.FeeCountByCorpDExcel;
 import org.springblade.los.excel.FeeCountByCorpExcel;
-import org.springblade.los.finance.fee.entity.FeeCenter;
 import org.springblade.los.finance.fee.entity.FinAccBills;
 import org.springblade.los.finance.fee.entity.ListAccBillVO;
-import org.springblade.los.finance.fee.service.IFeeCenterService;
 import org.springblade.los.finance.fee.service.IFinAccBillsService;
 import org.springblade.los.finance.fee.vo.FinAccBillsVO;
-import org.springblade.los.finance.stl.entity.FinStlBillsItems;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -73,6 +67,8 @@ public class FinAccBillsController extends BladeController {
 
 	private final IBCorpsService bCorpsService;
 
+	private final ISysClient sysClient;
+
 	/**
 	 * 详情
 	 */
@@ -348,10 +344,10 @@ public class FinAccBillsController extends BladeController {
 		List<FinAccBillsVO> list = finAccBillsService.listAccBill(listAccBillVO);
 		for (FinAccBillsVO item : list) {
 			item.setQuantityCntrTypesDescr(item.getQuantityCntrDescr());
-			if("C".equals(listAccBillVO.getDc())){
+			if ("C".equals(listAccBillVO.getDc())) {
 				BigDecimal amount = item.getAppliedAmount().subtract(item.getAppliedAmountStl());
 				item.setAppliedCurrentStlAmount(item.getAmount().subtract(amount).subtract(item.getStlTtlAmount()));
-			}else{
+			} else {
 				item.setAppliedCurrentStlAmount(item.getAmount().subtract(item.getStlTtlAmount()));
 			}
 			item.setAppliedInvoiceCurrentStlAmount(item.getAmount().subtract(item.getStlTtlAmount()));
@@ -477,22 +473,52 @@ public class FinAccBillsController extends BladeController {
 	@GetMapping("/listFeeCountByCorp")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "类别", notes = "传入finAccBills")
-	public R<List<Map<String,Object>>> listFeeCountByCorp(String dc,Long corpId) {
-		List<Map<String,Object>> mapList = finAccBillsService.listFeeCountByCorp(dc,corpId);
+	public R<List<Map<String, Object>>> listFeeCountByCorp(String dc, Long corpId) {
+		List<Map<String, Object>> mapList = finAccBillsService.listFeeCountByCorp(dc, corpId);
 		return R.data(mapList);
 	}
 
 	@GetMapping("/listFeeCountByCorpExport")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "类别", notes = "传入finAccBills")
-	public void listFeeCountByCorpExport(String dc,Long corpId, HttpServletResponse response) {
-		List<FeeCountByCorpExcel> mapList = finAccBillsService.listFeeCountByCorpExport(dc,corpId);
-		if ("D".equals(dc)){
+	public void listFeeCountByCorpExport(String dc, Long corpId, HttpServletResponse response) {
+		List<FeeCountByCorpExcel> mapList = finAccBillsService.listFeeCountByCorpExport(dc, corpId);
+		if ("D".equals(dc)) {
 			ExcelUtil.export(response, "客户应收明细", "客户应收明细", BeanUtil.copy(mapList, FeeCountByCorpDExcel.class), FeeCountByCorpDExcel.class);
-		}else if ("C".equals(dc)){
+		} else if ("C".equals(dc)) {
 			ExcelUtil.export(response, "客户应付明细", "客户应付明细", BeanUtil.copy(mapList, FeeCountByCorpCExcel.class), FeeCountByCorpCExcel.class);
 		}
 	}
 
 
+	/**
+	 * 客户未收账款
+	 */
+	@GetMapping("/accountsReceivable")
+	public R<Map<String, BigDecimal>> accountsReceivable(Long corpId) {
+		List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
+			.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
+			.eq(FinAccBills::getIsDeleted, 0)
+			.eq(FinAccBills::getAccountDc, "D")
+			.eq(FinAccBills::getCorpId, corpId));
+		Map<String, BigDecimal> map = new HashMap<>();
+		String amountLimit = sysClient.getParamServiceByDept("accounts.receivable.limit", AuthUtil.getTenantId(), AuthUtil.getDeptId());
+		if (ObjectUtils.isNotNull(amountLimit)) {
+			map.put("amountLimit", new BigDecimal(amountLimit));
+		} else {
+			map.put("amountLimit", new BigDecimal("0"));
+		}
+		if (!finAccBillsList.isEmpty()) {
+			BigDecimal amountDrLoc = finAccBillsList.stream().map(FinAccBills::getAmountDrLoc).filter(Objects::nonNull)
+				.reduce(BigDecimal.ZERO, BigDecimal::add);
+			BigDecimal stlAmountDrLoc = finAccBillsList.stream().map(FinAccBills::getStlAmountDrLoc).filter(Objects::nonNull)
+				.reduce(BigDecimal.ZERO, BigDecimal::add);
+			map.put("amount", amountDrLoc.subtract(stlAmountDrLoc));
+		} else {
+			map.put("amount", new BigDecimal("0"));
+		}
+		return R.data(map);
+	}
+
+
 }