供应商账单相关接口
This commit is contained in:
parent
046259c8da
commit
68042f21d2
|
|
@ -1,9 +1,10 @@
|
||||||
package com.czg.controller;
|
package com.czg.controller.admin;
|
||||||
|
|
||||||
import com.czg.enums.CrudEnum;
|
import com.czg.enums.CrudEnum;
|
||||||
import com.czg.log.annotation.OperationLog;
|
import com.czg.log.annotation.OperationLog;
|
||||||
import com.czg.product.dto.ConsInfoDTO;
|
import com.czg.product.dto.ConsInfoDTO;
|
||||||
import com.czg.product.param.ConsInfoParam;
|
import com.czg.product.param.ConsInfoParam;
|
||||||
|
import com.czg.product.param.ConsReportDamageParam;
|
||||||
import com.czg.product.param.ConsSubUnitParam;
|
import com.czg.product.param.ConsSubUnitParam;
|
||||||
import com.czg.product.service.ConsInfoService;
|
import com.czg.product.service.ConsInfoService;
|
||||||
import com.czg.product.vo.ConsStatisticsVo;
|
import com.czg.product.vo.ConsStatisticsVo;
|
||||||
|
|
@ -181,4 +182,5 @@ public class ConsInfoController {
|
||||||
ConsStatisticsVo data = consInfoService.statistics(param);
|
ConsStatisticsVo data = consInfoService.statistics(param);
|
||||||
return CzgResult.success(data);
|
return CzgResult.success(data);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,15 @@
|
||||||
package com.czg.controller.admin;
|
package com.czg.controller.admin;
|
||||||
|
|
||||||
import com.czg.log.annotation.OperationLog;
|
import com.czg.log.annotation.OperationLog;
|
||||||
|
import com.czg.product.dto.ShopVendorBillPayDTO;
|
||||||
import com.czg.product.dto.ShopVendorDTO;
|
import com.czg.product.dto.ShopVendorDTO;
|
||||||
import com.czg.product.service.ShopVendorService;
|
import com.czg.product.service.ShopVendorService;
|
||||||
|
import com.czg.product.vo.ShopVendorBillPayRecordVO;
|
||||||
|
import com.czg.product.vo.ShopVendorBillRecordVO;
|
||||||
|
import com.czg.product.vo.ShopVendorBillVO;
|
||||||
|
import com.czg.product.vo.ShopVendorSummaryVO;
|
||||||
import com.czg.resp.CzgResult;
|
import com.czg.resp.CzgResult;
|
||||||
|
import com.czg.sa.StpKit;
|
||||||
import com.czg.utils.AssertUtil;
|
import com.czg.utils.AssertUtil;
|
||||||
import com.czg.validator.group.DefaultGroup;
|
import com.czg.validator.group.DefaultGroup;
|
||||||
import com.czg.validator.group.InsertGroup;
|
import com.czg.validator.group.InsertGroup;
|
||||||
|
|
@ -98,4 +104,57 @@ public class ShopVendorController {
|
||||||
shopVendorService.deleteShopVendor(id);
|
shopVendorService.deleteShopVendor(id);
|
||||||
return CzgResult.success();
|
return CzgResult.success();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* 供应商账单统计
|
||||||
|
* @return 统计信息
|
||||||
|
*/
|
||||||
|
@GetMapping("summary")
|
||||||
|
@OperationLog("供应商账单-统计")
|
||||||
|
public CzgResult<ShopVendorSummaryVO> summary() {
|
||||||
|
return CzgResult.success(shopVendorService.summary(StpKit.USER.getShopId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账单列表
|
||||||
|
* @return 账单列表
|
||||||
|
*/
|
||||||
|
@GetMapping("/bill")
|
||||||
|
@OperationLog("供应商账单-列表")
|
||||||
|
public CzgResult<Page<ShopVendorBillVO>> bill() {
|
||||||
|
return CzgResult.success(shopVendorService.billList(StpKit.USER.getShopId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账单记录
|
||||||
|
* @return 记录list
|
||||||
|
*/
|
||||||
|
@GetMapping("/bill/record")
|
||||||
|
@OperationLog("供应商账单-列表")
|
||||||
|
public CzgResult<Page<ShopVendorBillRecordVO>> bill(@RequestParam Integer vendorId) {
|
||||||
|
return CzgResult.success(shopVendorService.billRecord(StpKit.USER.getShopId(), vendorId));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账单支付
|
||||||
|
* @return 记录list
|
||||||
|
*/
|
||||||
|
@PostMapping("/bill/pay")
|
||||||
|
@OperationLog("供应商账单-付款")
|
||||||
|
public CzgResult<Boolean> pay(@RequestBody @Validated ShopVendorBillPayDTO payDTO) {
|
||||||
|
return CzgResult.success(shopVendorService.pay(StpKit.USER.getShopId(), payDTO));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账单支付记录
|
||||||
|
* @return 记录list
|
||||||
|
*/
|
||||||
|
@GetMapping("/bill/pay/record")
|
||||||
|
@OperationLog("供应商账单-付款记录")
|
||||||
|
public CzgResult<Page<ShopVendorBillPayRecordVO>> payRecord(@RequestParam Long flowId) {
|
||||||
|
return CzgResult.success(shopVendorService.payRecord(StpKit.USER.getShopId(), flowId));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,70 @@
|
||||||
|
|
||||||
|
package com.czg.product.dto;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import com.alibaba.fastjson2.annotation.JSONField;
|
||||||
|
import java.io.Serial;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 耗材付款记录 实体类。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-04-03
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class ConsPayRecordDTO implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 店铺id
|
||||||
|
*/
|
||||||
|
private Long shopId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供应商id
|
||||||
|
*/
|
||||||
|
private Long vendorId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出入库id
|
||||||
|
*/
|
||||||
|
private Long flowId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 付款金额
|
||||||
|
*/
|
||||||
|
private BigDecimal amount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 付款方式 支付宝 微信 银行卡 现金
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 付款备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作员工id
|
||||||
|
*/
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
package com.czg.product.dto;
|
||||||
|
|
||||||
|
import jakarta.validation.constraints.DecimalMin;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供应商
|
||||||
|
*
|
||||||
|
* @author Tankaikai tankaikai@aliyun.com
|
||||||
|
* @since 1.0 2025-02-20
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ShopVendorBillPayDTO {
|
||||||
|
/**
|
||||||
|
* 账单记录id
|
||||||
|
*/
|
||||||
|
@NotEmpty(message = "账单记录id不能为空")
|
||||||
|
private List<Long> flowIdList;
|
||||||
|
/**
|
||||||
|
* 付款金额
|
||||||
|
*/
|
||||||
|
@DecimalMin(value = "0.01", message = "付款金额不能小于0.01")
|
||||||
|
private BigDecimal amount;
|
||||||
|
/**
|
||||||
|
* 付款类型
|
||||||
|
*/
|
||||||
|
@NotBlank(message = "付款类型不能为空")
|
||||||
|
private String type;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,80 @@
|
||||||
|
package com.czg.product.entity;
|
||||||
|
|
||||||
|
import com.mybatisflex.annotation.Column;
|
||||||
|
import com.mybatisflex.annotation.Id;
|
||||||
|
import com.mybatisflex.annotation.KeyType;
|
||||||
|
import com.mybatisflex.annotation.Table;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 耗材付款记录 实体类。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-04-03
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Table("tb_cons_pay_record")
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class ConsPayRecord implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Id(keyType = KeyType.Auto)
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 店铺id
|
||||||
|
*/
|
||||||
|
private Long shopId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 供应商id
|
||||||
|
*/
|
||||||
|
private Long vendorId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 出入库id
|
||||||
|
*/
|
||||||
|
private Long flowId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 付款金额
|
||||||
|
*/
|
||||||
|
private BigDecimal amount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 付款方式 支付宝 微信 银行卡 现金
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 付款备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 操作员工id
|
||||||
|
*/
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@Column(onInsertValue = "now()")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.czg.product.service;
|
||||||
|
|
||||||
|
import com.czg.product.vo.ShopVendorBillPayRecordVO;
|
||||||
|
import com.mybatisflex.core.paginate.Page;
|
||||||
|
import com.mybatisflex.core.service.IService;
|
||||||
|
import com.czg.product.entity.ConsPayRecord;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 耗材付款记录 服务层。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-04-03
|
||||||
|
*/
|
||||||
|
public interface ConsPayRecordService extends IService<ConsPayRecord> {
|
||||||
|
|
||||||
|
Page<ShopVendorBillPayRecordVO> getByFlowId(Long shopId, Long flowId);
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,12 @@
|
||||||
package com.czg.product.service;
|
package com.czg.product.service;
|
||||||
|
|
||||||
|
import com.czg.product.dto.ShopVendorBillPayDTO;
|
||||||
import com.czg.product.dto.ShopVendorDTO;
|
import com.czg.product.dto.ShopVendorDTO;
|
||||||
import com.czg.product.entity.ShopVendor;
|
import com.czg.product.entity.ShopVendor;
|
||||||
|
import com.czg.product.vo.ShopVendorBillPayRecordVO;
|
||||||
|
import com.czg.product.vo.ShopVendorBillRecordVO;
|
||||||
|
import com.czg.product.vo.ShopVendorBillVO;
|
||||||
|
import com.czg.product.vo.ShopVendorSummaryVO;
|
||||||
import com.mybatisflex.core.paginate.Page;
|
import com.mybatisflex.core.paginate.Page;
|
||||||
import com.mybatisflex.core.service.IService;
|
import com.mybatisflex.core.service.IService;
|
||||||
|
|
||||||
|
|
@ -57,4 +62,33 @@ public interface ShopVendorService extends IService<ShopVendor> {
|
||||||
*/
|
*/
|
||||||
void deleteShopVendor(Long id);
|
void deleteShopVendor(Long id);
|
||||||
|
|
||||||
}
|
ShopVendorSummaryVO summary(Long shopId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账单列表
|
||||||
|
*
|
||||||
|
* @param shopId 店铺id
|
||||||
|
* @return 账单
|
||||||
|
*/
|
||||||
|
Page<ShopVendorBillVO> billList(Long shopId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账单记录明细
|
||||||
|
*
|
||||||
|
* @param shopId 店铺id
|
||||||
|
* @param vendorId 供应商id
|
||||||
|
* @return 分页
|
||||||
|
*/
|
||||||
|
Page<ShopVendorBillRecordVO> billRecord(Long shopId, Integer vendorId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 账单付款
|
||||||
|
* @param shopId 店铺id
|
||||||
|
* @param payDTO 数据
|
||||||
|
* @return 是否成功
|
||||||
|
*/
|
||||||
|
Boolean pay(Long shopId, ShopVendorBillPayDTO payDTO);
|
||||||
|
|
||||||
|
Page<ShopVendorBillPayRecordVO> payRecord(Long shopId, Long flowId);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
package com.czg.product.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Administrator
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ShopVendorBillPayRecordVO {
|
||||||
|
/**
|
||||||
|
* 付款id
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 耗材名称
|
||||||
|
*/
|
||||||
|
private String conName;
|
||||||
|
/**
|
||||||
|
* 单价
|
||||||
|
*/
|
||||||
|
private BigDecimal purchasePrice;
|
||||||
|
/**
|
||||||
|
* 数量
|
||||||
|
*/
|
||||||
|
private BigDecimal inOutNumber;
|
||||||
|
/**
|
||||||
|
* 付款金额
|
||||||
|
*/
|
||||||
|
private BigDecimal amount;
|
||||||
|
/**
|
||||||
|
* 付款方式
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
/**
|
||||||
|
* 操作账号
|
||||||
|
*/
|
||||||
|
private String account;
|
||||||
|
/**
|
||||||
|
* 账号昵称
|
||||||
|
*/
|
||||||
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 编码
|
||||||
|
*/
|
||||||
|
private String code;
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,50 @@
|
||||||
|
package com.czg.product.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Administrator
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ShopVendorBillRecordVO {
|
||||||
|
/**
|
||||||
|
* 记录id
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
/**
|
||||||
|
* 耗材名称
|
||||||
|
*/
|
||||||
|
private String conName;
|
||||||
|
/**
|
||||||
|
* 单价
|
||||||
|
*/
|
||||||
|
private BigDecimal purchasePrice;
|
||||||
|
/**
|
||||||
|
* 数量
|
||||||
|
*/
|
||||||
|
private BigDecimal inOutNumber;
|
||||||
|
/**
|
||||||
|
* 应付
|
||||||
|
*/
|
||||||
|
private BigDecimal amountPayable;
|
||||||
|
/**
|
||||||
|
* 已付
|
||||||
|
*/
|
||||||
|
private BigDecimal actualPaymentAmount;
|
||||||
|
/**
|
||||||
|
* 待付
|
||||||
|
*/
|
||||||
|
private BigDecimal unPaidAmount;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.czg.product.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Administrator
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ShopVendorBillVO {
|
||||||
|
/**
|
||||||
|
* 供应商名称
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
/**
|
||||||
|
* 供应商id
|
||||||
|
*/
|
||||||
|
private Long vendorId;
|
||||||
|
/**
|
||||||
|
* 账单金额
|
||||||
|
*/
|
||||||
|
private BigDecimal amountPayable;
|
||||||
|
/**
|
||||||
|
* 已付款金额
|
||||||
|
*/
|
||||||
|
private BigDecimal actualPaymentAmount;
|
||||||
|
/**
|
||||||
|
* 未付款金额
|
||||||
|
*/
|
||||||
|
private BigDecimal unPaidAmount;
|
||||||
|
/**
|
||||||
|
* 备注
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
package com.czg.product.vo;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Administrator
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class ShopVendorSummaryVO {
|
||||||
|
/**
|
||||||
|
* 全部总金额
|
||||||
|
*/
|
||||||
|
private BigDecimal amountPayable = BigDecimal.ZERO;
|
||||||
|
/**
|
||||||
|
* 当月总金额
|
||||||
|
*/
|
||||||
|
private BigDecimal mouthAmountPayable = BigDecimal.ZERO;
|
||||||
|
/**
|
||||||
|
* 全部支付金额
|
||||||
|
*/
|
||||||
|
private BigDecimal actualPaymentAmount = BigDecimal.ZERO;
|
||||||
|
/**
|
||||||
|
* 当月支付金额
|
||||||
|
*/
|
||||||
|
private BigDecimal mouthActualPaymentAmount = BigDecimal.ZERO;
|
||||||
|
/**
|
||||||
|
* 待支付金额
|
||||||
|
*/
|
||||||
|
private BigDecimal unPaidAmount = BigDecimal.ZERO;
|
||||||
|
/**
|
||||||
|
* 本月待支付金额
|
||||||
|
*/
|
||||||
|
private BigDecimal mouthUnPaidAmount = BigDecimal.ZERO;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package com.czg.service.product.mapper;
|
||||||
|
|
||||||
|
import com.czg.product.vo.ShopVendorBillPayRecordVO;
|
||||||
|
import com.mybatisflex.core.BaseMapper;
|
||||||
|
import com.czg.product.entity.ConsPayRecord;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 耗材付款记录 映射层。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-04-03
|
||||||
|
*/
|
||||||
|
public interface ConsPayRecordMapper extends BaseMapper<ConsPayRecord> {
|
||||||
|
|
||||||
|
List<ShopVendorBillPayRecordVO> selectByFlowId(Long shopId, Long flowId);
|
||||||
|
}
|
||||||
|
|
@ -3,8 +3,13 @@ package com.czg.service.product.mapper;
|
||||||
import com.czg.product.entity.ConsStockFlow;
|
import com.czg.product.entity.ConsStockFlow;
|
||||||
import com.czg.product.param.ConsInfoParam;
|
import com.czg.product.param.ConsInfoParam;
|
||||||
import com.czg.product.vo.ConsStatisticsVo;
|
import com.czg.product.vo.ConsStatisticsVo;
|
||||||
|
import com.czg.product.vo.ShopVendorBillRecordVO;
|
||||||
import com.mybatisflex.core.BaseMapper;
|
import com.mybatisflex.core.BaseMapper;
|
||||||
|
import jakarta.validation.constraints.NotEmpty;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 耗材库存变动记录
|
* 耗材库存变动记录
|
||||||
|
|
@ -15,4 +20,8 @@ import org.apache.ibatis.annotations.Mapper;
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface ConsStockFlowMapper extends BaseMapper<ConsStockFlow> {
|
public interface ConsStockFlowMapper extends BaseMapper<ConsStockFlow> {
|
||||||
ConsStatisticsVo getConsStatistics(ConsInfoParam param);
|
ConsStatisticsVo getConsStatistics(ConsInfoParam param);
|
||||||
}
|
|
||||||
|
List<ShopVendorBillRecordVO> selectByVendorId(@Param("shopId") Long shopId, @Param("vendorId") Integer vendorId);
|
||||||
|
|
||||||
|
List<ConsStockFlow> selectUnPaid(@Param("shopId") Long shopId, @Param("vendorIds") @NotEmpty List<Long> vendorIds);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,13 @@
|
||||||
package com.czg.service.product.mapper;
|
package com.czg.service.product.mapper;
|
||||||
|
|
||||||
import com.czg.product.entity.ShopVendor;
|
import com.czg.product.entity.ShopVendor;
|
||||||
|
import com.czg.product.vo.ShopVendorBillVO;
|
||||||
|
import com.czg.product.vo.ShopVendorSummaryVO;
|
||||||
import com.mybatisflex.core.BaseMapper;
|
import com.mybatisflex.core.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 供应商
|
* 供应商
|
||||||
|
|
@ -13,4 +18,8 @@ import org.apache.ibatis.annotations.Mapper;
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface ShopVendorMapper extends BaseMapper<ShopVendor> {
|
public interface ShopVendorMapper extends BaseMapper<ShopVendor> {
|
||||||
|
|
||||||
}
|
ShopVendorSummaryVO summary(@Param("shopId") Long shopId);
|
||||||
|
|
||||||
|
|
||||||
|
List<ShopVendorBillVO> bill(@Param("shopId") Long shopId);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
package com.czg.service.product.service.impl;
|
||||||
|
|
||||||
|
import com.czg.product.vo.ShopVendorBillPayRecordVO;
|
||||||
|
import com.czg.utils.PageUtil;
|
||||||
|
import com.github.pagehelper.PageHelper;
|
||||||
|
import com.github.pagehelper.PageInfo;
|
||||||
|
import com.mybatisflex.core.paginate.Page;
|
||||||
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
|
import com.czg.product.entity.ConsPayRecord;
|
||||||
|
import com.czg.product.service.ConsPayRecordService;
|
||||||
|
import com.czg.service.product.mapper.ConsPayRecordMapper;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 耗材付款记录 服务层实现。
|
||||||
|
*
|
||||||
|
* @author zs
|
||||||
|
* @since 2025-04-03
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class ConsPayRecordServiceImpl extends ServiceImpl<ConsPayRecordMapper, ConsPayRecord> implements ConsPayRecordService{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<ShopVendorBillPayRecordVO> getByFlowId(Long shopId, Long flowId) {
|
||||||
|
PageHelper.startPage(PageUtil.buildPageHelp());
|
||||||
|
return PageUtil.convert(new PageInfo<>(mapper.selectByFlowId(shopId, flowId)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,21 +1,38 @@
|
||||||
package com.czg.service.product.service.impl;
|
package com.czg.service.product.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.czg.enums.DeleteEnum;
|
import com.czg.enums.DeleteEnum;
|
||||||
|
import com.czg.exception.ApiNotPrintException;
|
||||||
import com.czg.exception.CzgException;
|
import com.czg.exception.CzgException;
|
||||||
|
import com.czg.product.dto.ShopVendorBillPayDTO;
|
||||||
import com.czg.product.dto.ShopVendorDTO;
|
import com.czg.product.dto.ShopVendorDTO;
|
||||||
|
import com.czg.product.entity.ConsPayRecord;
|
||||||
|
import com.czg.product.entity.ConsStockFlow;
|
||||||
import com.czg.product.entity.ShopVendor;
|
import com.czg.product.entity.ShopVendor;
|
||||||
|
import com.czg.product.service.ConsPayRecordService;
|
||||||
|
import com.czg.product.service.ConsStockFlowService;
|
||||||
import com.czg.product.service.ShopVendorService;
|
import com.czg.product.service.ShopVendorService;
|
||||||
|
import com.czg.product.vo.ShopVendorBillPayRecordVO;
|
||||||
|
import com.czg.product.vo.ShopVendorBillRecordVO;
|
||||||
|
import com.czg.product.vo.ShopVendorBillVO;
|
||||||
|
import com.czg.product.vo.ShopVendorSummaryVO;
|
||||||
import com.czg.sa.StpKit;
|
import com.czg.sa.StpKit;
|
||||||
|
import com.czg.service.product.mapper.ConsStockFlowMapper;
|
||||||
import com.czg.service.product.mapper.ShopVendorMapper;
|
import com.czg.service.product.mapper.ShopVendorMapper;
|
||||||
import com.czg.utils.PageUtil;
|
import com.czg.utils.PageUtil;
|
||||||
|
import com.github.pagehelper.PageHelper;
|
||||||
|
import com.github.pagehelper.PageInfo;
|
||||||
import com.mybatisflex.core.paginate.Page;
|
import com.mybatisflex.core.paginate.Page;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import com.mybatisflex.core.update.UpdateChain;
|
import com.mybatisflex.core.update.UpdateChain;
|
||||||
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
import com.mybatisflex.spring.service.impl.ServiceImpl;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -26,6 +43,12 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
public class ShopVendorServiceImpl extends ServiceImpl<ShopVendorMapper, ShopVendor> implements ShopVendorService {
|
public class ShopVendorServiceImpl extends ServiceImpl<ShopVendorMapper, ShopVendor> implements ShopVendorService {
|
||||||
|
@Resource
|
||||||
|
private ConsStockFlowMapper consStockFlowMapper;
|
||||||
|
@Resource
|
||||||
|
private ConsStockFlowService consStockFlowService;
|
||||||
|
@Resource
|
||||||
|
private ConsPayRecordService consPayRecordService;
|
||||||
|
|
||||||
private QueryWrapper buildQueryWrapper(ShopVendorDTO param) {
|
private QueryWrapper buildQueryWrapper(ShopVendorDTO param) {
|
||||||
QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper();
|
QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper();
|
||||||
|
|
@ -93,4 +116,73 @@ public class ShopVendorServiceImpl extends ServiceImpl<ShopVendorMapper, ShopVen
|
||||||
.update();
|
.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
@Override
|
||||||
|
public ShopVendorSummaryVO summary(Long shopId) {
|
||||||
|
return mapper.summary(shopId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<ShopVendorBillVO> billList(Long shopId) {
|
||||||
|
PageHelper.startPage(PageUtil.buildPageHelp());
|
||||||
|
return PageUtil.convert(new PageInfo<>(mapper.bill(shopId)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<ShopVendorBillRecordVO> billRecord(Long shopId, Integer vendorId) {
|
||||||
|
PageHelper.startPage(PageUtil.buildPageHelp());
|
||||||
|
return PageUtil.convert(new PageInfo<>(consStockFlowMapper.selectByVendorId(shopId, vendorId)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean pay(Long shopId, ShopVendorBillPayDTO payDTO) {
|
||||||
|
// 批量付款
|
||||||
|
if (payDTO.getFlowIdList().size() > 1) {
|
||||||
|
List<ConsStockFlow> stockFlows = consStockFlowMapper.selectUnPaid(shopId, payDTO.getFlowIdList());
|
||||||
|
|
||||||
|
BigDecimal unPaidAmount = BigDecimal.ZERO;
|
||||||
|
ArrayList<ConsPayRecord> records = new ArrayList<>();
|
||||||
|
for (ConsStockFlow item : stockFlows) {
|
||||||
|
unPaidAmount = unPaidAmount.add(item.getAmountPayable().subtract(item.getActualPaymentAmount()));
|
||||||
|
item.setActualPaymentAmount(item.getAmountPayable());
|
||||||
|
records.add(new ConsPayRecord().setShopId(shopId).setVendorId(item.getVendorId()).setType(payDTO.getType())
|
||||||
|
.setAmount(item.getAmountPayable().subtract(item.getActualPaymentAmount()))
|
||||||
|
.setFlowId(item.getId()).setUserId(StpKit.USER.getLoginIdAsLong()).setCreateTime(DateUtil.date().toLocalDateTime()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (unPaidAmount.compareTo(payDTO.getAmount()) != 0) {
|
||||||
|
throw new ApiNotPrintException("批量付款应全部付款");
|
||||||
|
}
|
||||||
|
|
||||||
|
consPayRecordService.saveBatch(records);
|
||||||
|
return consStockFlowService.updateBatch(stockFlows);
|
||||||
|
}else {
|
||||||
|
ConsStockFlow stockFlow = consStockFlowMapper.selectOneByQuery(new QueryWrapper().eq(ConsStockFlow::getShopId, shopId).eq(ConsStockFlow::getId, payDTO.getFlowIdList().getFirst()));
|
||||||
|
if (stockFlow == null) {
|
||||||
|
throw new ApiNotPrintException("付款账单不存在");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stockFlow.getAmountPayable().compareTo(stockFlow.getActualPaymentAmount()) <= 0) {
|
||||||
|
throw new ApiNotPrintException("次账单已付款完成");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (payDTO.getAmount().compareTo(stockFlow.getAmountPayable().subtract(stockFlow.getActualPaymentAmount())) > 0) {
|
||||||
|
throw new ApiNotPrintException("付款金额不应超过待付款金额");
|
||||||
|
}
|
||||||
|
|
||||||
|
ConsPayRecord consPayRecord = BeanUtil.copyProperties(payDTO, ConsPayRecord.class);
|
||||||
|
consPayRecord.setShopId(shopId);
|
||||||
|
consPayRecord.setVendorId(stockFlow.getVendorId());
|
||||||
|
consPayRecord.setFlowId(payDTO.getFlowIdList().getFirst());
|
||||||
|
consPayRecord.setUserId(StpKit.USER.getLoginIdAsLong());
|
||||||
|
consPayRecordService.save(consPayRecord);
|
||||||
|
stockFlow.setActualPaymentAmount(stockFlow.getActualPaymentAmount().add(payDTO.getAmount()));
|
||||||
|
return consStockFlowMapper.update(stockFlow) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Page<ShopVendorBillPayRecordVO> payRecord(Long shopId, Long flowId) {
|
||||||
|
return consPayRecordService.getByFlowId(shopId, flowId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
<?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="com.czg.service.product.mapper.ConsPayRecordMapper">
|
||||||
|
|
||||||
|
<select id="selectByFlowId" resultType="com.czg.product.vo.ShopVendorBillPayRecordVO">
|
||||||
|
select a.*, b.con_name, b.purchase_price, b.in_out_number, c.account, c.nick_name, c.id
|
||||||
|
from tb_cons_pay_record as a
|
||||||
|
left join tb_cons_stock_flow as b on a.flow_id = b.id
|
||||||
|
left join sys_user as c on c.id = a.user_id
|
||||||
|
where a.flow_id = #{flowId} and a.shop_id=#{shopId}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
|
|
@ -5,16 +5,16 @@
|
||||||
|
|
||||||
<select id="getConsStatistics" resultType="com.czg.product.vo.ConsStatisticsVo">
|
<select id="getConsStatistics" resultType="com.czg.product.vo.ConsStatisticsVo">
|
||||||
SELECT
|
SELECT
|
||||||
sum( CASE WHEN t1.in_out_type = 'in' then t1.in_out_number end) AS inSumTotal,
|
sum( CASE WHEN t1.in_out_type = 'in' then t1.in_out_number end) AS inSumTotal,
|
||||||
sum( CASE WHEN t1.in_out_item = 'win-in' THEN t1.in_out_number END ) AS winInNum,
|
sum( CASE WHEN t1.in_out_item = 'win-in' THEN t1.in_out_number END ) AS winInNum,
|
||||||
sum( CASE WHEN t1.in_out_item = 'manual-in' THEN t1.in_out_number END ) AS stockInNum,
|
sum( CASE WHEN t1.in_out_item = 'manual-in' THEN t1.in_out_number END ) AS stockInNum,
|
||||||
sum( CASE WHEN t1.in_out_type = 'out' then abs(t1.in_out_number) end) AS outSumTotal,
|
sum( CASE WHEN t1.in_out_type = 'out' then abs(t1.in_out_number) end) AS outSumTotal,
|
||||||
sum( CASE WHEN t1.in_out_item = 'loss-out' THEN abs(t1.in_out_number) END ) AS lossOutNum,
|
sum( CASE WHEN t1.in_out_item = 'loss-out' THEN abs(t1.in_out_number) END ) AS lossOutNum,
|
||||||
abs(sum( CASE WHEN t1.in_out_item = 'order-out' THEN t1.in_out_number END )) AS consumeNum,
|
abs(sum( CASE WHEN t1.in_out_item = 'order-out' THEN t1.in_out_number END )) AS consumeNum,
|
||||||
sum( CASE WHEN t1.in_out_item = 'damage-out' THEN abs(t1.in_out_number) END ) AS damageNum,
|
sum( CASE WHEN t1.in_out_item = 'damage-out' THEN abs(t1.in_out_number) END ) AS damageNum,
|
||||||
sum( CASE WHEN t1.in_out_item = 'manual-out' THEN abs(t1.in_out_number) END ) AS stockOutNum
|
sum( CASE WHEN t1.in_out_item = 'manual-out' THEN abs(t1.in_out_number) END ) AS stockOutNum
|
||||||
FROM
|
FROM
|
||||||
tb_cons_stock_flow t1
|
tb_cons_stock_flow t1
|
||||||
LEFT JOIN tb_cons_info t2 on t1.con_id = t2.id
|
LEFT JOIN tb_cons_info t2 on t1.con_id = t2.id
|
||||||
where t1.shop_id = #{shopId}
|
where t1.shop_id = #{shopId}
|
||||||
<if test="id != null">
|
<if test="id != null">
|
||||||
|
|
@ -35,4 +35,25 @@
|
||||||
]]>
|
]]>
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
</mapper>
|
<select id="selectByVendorId" resultType="com.czg.product.vo.ShopVendorBillRecordVO">
|
||||||
|
SELECT id,
|
||||||
|
con_name,
|
||||||
|
purchase_price,
|
||||||
|
in_out_number,
|
||||||
|
amount_payable,
|
||||||
|
actual_payment_amount,
|
||||||
|
remark,
|
||||||
|
create_time,
|
||||||
|
(amount_payable - actual_payment_amount) as unPaidAmount
|
||||||
|
FROM tb_cons_stock_flow
|
||||||
|
WHERE shop_id = #{shopId}
|
||||||
|
and vendor_id = #{vendorId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectUnPaid" resultType="com.czg.product.entity.ConsStockFlow">
|
||||||
|
select * from tb_cons_stock_flow where amount_payable > actual_payment_amount and shop_id=#{shopId}
|
||||||
|
<foreach collection="vendorIds" item="id" open="and vendor_id in (" separator=",">
|
||||||
|
#{id}
|
||||||
|
</foreach>
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,34 @@
|
||||||
|
|
||||||
<mapper namespace="com.czg.service.product.mapper.ShopVendorMapper">
|
<mapper namespace="com.czg.service.product.mapper.ShopVendorMapper">
|
||||||
|
|
||||||
</mapper>
|
<select id="summary" resultType="com.czg.product.vo.ShopVendorSummaryVO">
|
||||||
|
SELECT vendor_id,
|
||||||
|
sum(amount_payable) AS amountPayable,
|
||||||
|
sum(CASE
|
||||||
|
WHEN create_time BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01') AND LAST_DAY(NOW())
|
||||||
|
THEN amount_payable END) AS mouthAmountPayable,
|
||||||
|
sum(actual_payment_amount) AS actualPaymentAmount,
|
||||||
|
sum(CASE
|
||||||
|
WHEN create_time BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01') AND LAST_DAY(NOW())
|
||||||
|
THEN actual_payment_amount END) AS mouthActualPaymentAmount,
|
||||||
|
sum(amount_payable - actual_payment_amount) AS unPaidAmount,
|
||||||
|
sum(CASE
|
||||||
|
WHEN create_time BETWEEN DATE_FORMAT(NOW(), '%Y-%m-01') AND LAST_DAY(NOW())
|
||||||
|
THEN amount_payable - actual_payment_amount END) AS mouthUnPaidAmount,
|
||||||
|
remark
|
||||||
|
FROM tb_cons_stock_flow
|
||||||
|
WHERE shop_id = #{shopId}
|
||||||
|
</select>
|
||||||
|
<select id="bill" resultType="com.czg.product.vo.ShopVendorBillVO">
|
||||||
|
select tb_cons_stock_flow.vendor_id as vendorId,
|
||||||
|
tb_shop_vendor.`name`,
|
||||||
|
sum(tb_cons_stock_flow.amount_payable) as amountPayable,
|
||||||
|
sum(tb_cons_stock_flow.actual_payment_amount) as actualPaymentAmount,
|
||||||
|
sum(tb_cons_stock_flow.amount_payable) - sum(tb_cons_stock_flow.actual_payment_amount) as unPaidAmount,
|
||||||
|
tb_cons_stock_flow.remark
|
||||||
|
from tb_cons_stock_flow
|
||||||
|
left join tb_shop_vendor on tb_cons_stock_flow.vendor_id = tb_shop_vendor.id
|
||||||
|
where tb_cons_stock_flow.shop_id = #{shopId}
|
||||||
|
GROUP BY tb_cons_stock_flow.vendor_id
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue