diff --git a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopPagePermissionController.java b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopPagePermissionController.java index 32bf9561..f822423f 100644 --- a/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopPagePermissionController.java +++ b/cash-api/account-server/src/main/java/com/czg/controller/admin/ShopPagePermissionController.java @@ -56,12 +56,10 @@ public class ShopPagePermissionController { */ @GetMapping("/detail") public CzgResult> detail(@RequestParam Long staffId) { - Set pageIdList = shopStaffPagePermissionService.list(new QueryWrapper().eq(ShopStaffPagePermission::getShopId, - StpKit.USER.getShopId()).eq(ShopStaffPagePermission::getStaffId, staffId)).stream().map(ShopStaffPagePermission::getPagePathId).collect(Collectors.toSet()); - if (pageIdList.isEmpty()) { - return CzgResult.success(new ArrayList<>()); + if (StpKit.USER.isStaff() && StpKit.USER.getLoginIdAsLong() != staffId) { + return CzgResult.failure("员工无权限"); } - return CzgResult.success(shopPagePathService.list(new QueryWrapper().in(ShopPagePath::getId, pageIdList))); + return CzgResult.success(shopPagePathService.detail(staffId)); } /** @@ -69,7 +67,8 @@ public class ShopPagePermissionController { */ @GetMapping("/mine") public CzgResult> mine() { - Set pageIdList = shopStaffPagePermissionService.list(new QueryWrapper().eq(ShopStaffPagePermission::getShopId, StpKit.USER.getShopId()).eq(ShopStaffPagePermission::getStaffId, StpKit.USER.getLoginIdAsLong())).stream().map(ShopStaffPagePermission::getPagePathId).collect(Collectors.toSet()); + Set pageIdList = shopStaffPagePermissionService.list(new QueryWrapper().eq(ShopStaffPagePermission::getShopId, StpKit.USER.getShopId()).eq(ShopStaffPagePermission::getIsUse, 1) + .eq(ShopStaffPagePermission::getStaffId, StpKit.USER.getLoginIdAsLong())).stream().map(ShopStaffPagePermission::getPagePathId).collect(Collectors.toSet()); if (pageIdList.isEmpty()) { return CzgResult.success(new ArrayList<>()); } diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java index 6a063861..8b86a7ba 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ConsInfoController.java @@ -1,9 +1,10 @@ -package com.czg.controller; +package com.czg.controller.admin; import com.czg.enums.CrudEnum; import com.czg.log.annotation.OperationLog; import com.czg.product.dto.ConsInfoDTO; import com.czg.product.param.ConsInfoParam; +import com.czg.product.param.ConsReportDamageParam; import com.czg.product.param.ConsSubUnitParam; import com.czg.product.service.ConsInfoService; import com.czg.product.vo.ConsStatisticsVo; @@ -181,4 +182,5 @@ public class ConsInfoController { ConsStatisticsVo data = consInfoService.statistics(param); return CzgResult.success(data); } -} \ No newline at end of file + +} diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopVendorController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopVendorController.java index 4f77cba1..25350ea0 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopVendorController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ShopVendorController.java @@ -1,9 +1,15 @@ package com.czg.controller.admin; import com.czg.log.annotation.OperationLog; +import com.czg.product.dto.ShopVendorBillPayDTO; import com.czg.product.dto.ShopVendorDTO; 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.sa.StpKit; import com.czg.utils.AssertUtil; import com.czg.validator.group.DefaultGroup; import com.czg.validator.group.InsertGroup; @@ -98,4 +104,57 @@ public class ShopVendorController { shopVendorService.deleteShopVendor(id); return CzgResult.success(); } -} \ No newline at end of file + + /** + * 供应商账单统计 + * @return 统计信息 + */ + @GetMapping("summary") + @OperationLog("供应商账单-统计") + public CzgResult summary() { + return CzgResult.success(shopVendorService.summary(StpKit.USER.getShopId())); + } + + /** + * 账单列表 + * @return 账单列表 + */ + @GetMapping("/bill") + @OperationLog("供应商账单-列表") + public CzgResult> bill() { + return CzgResult.success(shopVendorService.billList(StpKit.USER.getShopId())); + } + + /** + * 账单记录 + * @return 记录list + */ + @GetMapping("/bill/record") + @OperationLog("供应商账单-列表") + public CzgResult> bill(@RequestParam Integer vendorId) { + return CzgResult.success(shopVendorService.billRecord(StpKit.USER.getShopId(), vendorId)); + } + + + /** + * 账单支付 + * @return 记录list + */ + @PostMapping("/bill/pay") + @OperationLog("供应商账单-付款") + public CzgResult pay(@RequestBody @Validated ShopVendorBillPayDTO payDTO) { + return CzgResult.success(shopVendorService.pay(StpKit.USER.getShopId(), payDTO)); + } + + + /** + * 账单支付记录 + * @return 记录list + */ + @GetMapping("/bill/pay/record") + @OperationLog("供应商账单-付款记录") + public CzgResult> payRecord(@RequestParam Long flowId) { + return CzgResult.success(shopVendorService.payRecord(StpKit.USER.getShopId(), flowId)); + } + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopStaffPagePermission.java b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopStaffPagePermission.java index 6987e8d1..56c18790 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopStaffPagePermission.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/entity/ShopStaffPagePermission.java @@ -41,4 +41,6 @@ public class ShopStaffPagePermission implements Serializable { */ private Long pagePathId; + private Integer isUse; + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopPagePathService.java b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopPagePathService.java index 8f4d95c9..76e2e9c5 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopPagePathService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/account/service/ShopPagePathService.java @@ -3,6 +3,8 @@ package com.czg.account.service; import com.mybatisflex.core.service.IService; import com.czg.account.entity.ShopPagePath; +import java.util.List; + /** * 服务层。 * @@ -11,4 +13,5 @@ import com.czg.account.entity.ShopPagePath; */ public interface ShopPagePathService extends IService { + List detail(Long staffId); } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ConsPayRecordDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ConsPayRecordDTO.java new file mode 100644 index 00000000..9bf0b090 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ConsPayRecordDTO.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopVendorBillPayDTO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopVendorBillPayDTO.java new file mode 100644 index 00000000..0c3b35cb --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/dto/ShopVendorBillPayDTO.java @@ -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 flowIdList; + /** + * 付款金额 + */ + @DecimalMin(value = "0.01", message = "付款金额不能小于0.01") + private BigDecimal amount; + /** + * 付款类型 + */ + @NotBlank(message = "付款类型不能为空") + private String type; + /** + * 备注 + */ + private String remark; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsPayRecord.java b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsPayRecord.java new file mode 100644 index 00000000..2ad5e28b --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/entity/ConsPayRecord.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsPayRecordService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsPayRecordService.java new file mode 100644 index 00000000..f0ce528e --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ConsPayRecordService.java @@ -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 { + + Page getByFlowId(Long shopId, Long flowId); +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopVendorService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopVendorService.java index 2086d50e..493d86aa 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopVendorService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ShopVendorService.java @@ -1,7 +1,12 @@ package com.czg.product.service; +import com.czg.product.dto.ShopVendorBillPayDTO; import com.czg.product.dto.ShopVendorDTO; 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.service.IService; @@ -57,4 +62,33 @@ public interface ShopVendorService extends IService { */ void deleteShopVendor(Long id); -} \ No newline at end of file + ShopVendorSummaryVO summary(Long shopId); + + /** + * 账单列表 + * + * @param shopId 店铺id + * @return 账单 + */ + Page billList(Long shopId); + + /** + * 账单记录明细 + * + * @param shopId 店铺id + * @param vendorId 供应商id + * @return 分页 + */ + Page billRecord(Long shopId, Integer vendorId); + + /** + * 账单付款 + * @param shopId 店铺id + * @param payDTO 数据 + * @return 是否成功 + */ + Boolean pay(Long shopId, ShopVendorBillPayDTO payDTO); + + Page payRecord(Long shopId, Long flowId); + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillPayRecordVO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillPayRecordVO.java new file mode 100644 index 00000000..8da07120 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillPayRecordVO.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillRecordVO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillRecordVO.java new file mode 100644 index 00000000..1fda90b6 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillRecordVO.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillVO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillVO.java new file mode 100644 index 00000000..ac879872 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorBillVO.java @@ -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; + +} diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorSummaryVO.java b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorSummaryVO.java new file mode 100644 index 00000000..dc523325 --- /dev/null +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/vo/ShopVendorSummaryVO.java @@ -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; + + +} diff --git a/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java b/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java index e2341428..61cb8950 100644 --- a/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java +++ b/cash-common/cash-common-tools/src/main/java/com/czg/utils/JoinQueryWrapper.java @@ -147,6 +147,11 @@ public class JoinQueryWrapper extends QueryWrapper { return this; } + @Override + public QueryWrapper groupBy(LambdaGetter column) { + return super.groupBy(getColum(column)); + } + @Override public JoinQueryWrapper like(LambdaGetter column, Object value) { like(getColum(column), value); diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PadProductCategoryDetailMapper.java b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PadProductCategoryDetailMapper.java index 2fffcc28..3ef81b11 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PadProductCategoryDetailMapper.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/mapper/PadProductCategoryDetailMapper.java @@ -4,6 +4,9 @@ import com.czg.account.dto.pad.PadProductCategoryDTO; import com.mybatisflex.core.BaseMapper; import com.czg.account.entity.PadProductCategoryDetail; import com.mybatisflex.core.paginate.Page; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * Pad商品自定义分类明细 映射层。 @@ -12,6 +15,5 @@ import com.mybatisflex.core.paginate.Page; * @since 2025-02-20 */ public interface PadProductCategoryDetailMapper extends BaseMapper { - Page selectPageByKeyAndShopId(); - long selectPageByKeyAndShopId_COUNT(); + List selectPageByKeyAndShopId(@Param("shopId") Long shopId, @Param("categoryId") Long categoryId); } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PadProdServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PadProdServiceImpl.java index cd84784b..b61e20e6 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PadProdServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/PadProdServiceImpl.java @@ -8,6 +8,9 @@ import com.czg.product.entity.Product; import com.czg.product.service.ProductService; import com.czg.service.account.mapper.PadProductCategoryDetailMapper; import com.czg.utils.JoinQueryWrapper; +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.query.QueryWrapper; import jakarta.annotation.Resource; @@ -37,12 +40,8 @@ public class PadProdServiceImpl implements PadProdService { @Override public Page pageInfo(Page objectPage, Long productCategoryId, Long shopId) { - JoinQueryWrapper queryWrapper = new JoinQueryWrapper().eq(PadProductCategory::getShopId, shopId); - if (productCategoryId != null) { - queryWrapper.eq(PadProductCategory::getProductCategoryId, productCategoryId); - } - queryWrapper.orderBy(PadProductCategory::getSort, true).orderBy(PadProductCategory::getId, false); - return padProductCategoryDetailMapper.xmlPaginate("selectPageByKeyAndShopId", objectPage, queryWrapper); + PageHelper.startPage(PageUtil.buildPageHelp()); + return PageUtil.convert(new PageInfo<>(padProductCategoryDetailMapper.selectPageByKeyAndShopId(shopId, productCategoryId))); } @Override diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopPagePathServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopPagePathServiceImpl.java index 02cf681d..327d666e 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopPagePathServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopPagePathServiceImpl.java @@ -1,10 +1,25 @@ package com.czg.service.account.service.impl; +import com.czg.account.entity.ShopStaffPagePermission; +import com.czg.account.service.ShopStaffPagePermissionService; +import com.czg.resp.CzgResult; +import com.czg.sa.StpKit; +import com.czg.service.account.mapper.ShopStaffPagePermissionMapper; +import com.czg.service.account.mapper.ShopStaffPermissionMapper; +import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.spring.service.impl.ServiceImpl; import com.czg.account.entity.ShopPagePath; import com.czg.account.service.ShopPagePathService; import com.czg.service.account.mapper.ShopPagePathMapper; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; /** * 服务层实现。 @@ -14,5 +29,26 @@ import org.springframework.stereotype.Service; */ @Service public class ShopPagePathServiceImpl extends ServiceImpl implements ShopPagePathService{ + @Resource + private ShopStaffPagePermissionMapper shopStaffPagePermissionMapper; + @Override + public List detail(Long staffId) { + List shopStaffPagePermissions = shopStaffPagePermissionMapper.selectListByQuery(new QueryWrapper().eq(ShopStaffPagePermission::getShopId, + StpKit.USER.getShopId()).eq(ShopStaffPagePermission::getStaffId, staffId)); + if (shopStaffPagePermissions.isEmpty()) { + list().forEach(item -> { + ShopStaffPagePermission permission = new ShopStaffPagePermission(); + permission.setShopId(StpKit.USER.getShopId()); + permission.setStaffId(staffId); + permission.setPagePathId(item.getId()); + permission.setIsUse(1); + shopStaffPagePermissionMapper.insert(permission); + }); + return list(); + } + + Set pageIdList = shopStaffPagePermissions.stream().filter(item -> item.getIsUse() == 1).map(ShopStaffPagePermission::getPagePathId).collect(Collectors.toSet()); + return pageIdList.isEmpty() ? new ArrayList<>() : list(new QueryWrapper().in(ShopPagePath::getId, pageIdList)); + } } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStaffPagePermissionServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStaffPagePermissionServiceImpl.java index 03df7cf6..af5ec791 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStaffPagePermissionServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStaffPagePermissionServiceImpl.java @@ -16,6 +16,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collector; +import java.util.stream.Collectors; /** * 服务层实现。 @@ -38,24 +42,36 @@ public class ShopStaffPagePermissionServiceImpl extends ServiceImpl pagePermissions = new ArrayList<>(); - remove(new QueryWrapper().eq(ShopStaffPagePermission::getStaffId, pagePathPermissionAddDTO.getStaffId())); + Map map = list(new QueryWrapper().eq(ShopStaffPagePermission::getStaffId, + pagePathPermissionAddDTO.getStaffId())).stream().collect(Collectors.toMap(ShopStaffPagePermission::getPagePathId, item -> item)); + pagePathPermissionAddDTO.getPagePathIdList().forEach(item -> { - long count1 = count(new QueryWrapper().eq(ShopStaffPagePermission::getStaffId, shopStaff).eq(ShopStaffPagePermission::getPagePathId, item)); - if (count1 > 0) { - return; + ShopStaffPagePermission permission1 = map.get(item); + if (permission1 == null) { + ShopStaffPagePermission permission = new ShopStaffPagePermission(); + permission.setShopId(shopId); + permission.setPagePathId(item); + permission.setStaffId(pagePathPermissionAddDTO.getStaffId()); + permission.setIsUse(1); + save(permission); + }else { + permission1.setIsUse(1); + updateById(permission1); + map.remove(item); } - ShopStaffPagePermission permission = new ShopStaffPagePermission(); - permission.setShopId(shopId); - permission.setPagePathId(item); - permission.setStaffId(pagePathPermissionAddDTO.getStaffId()); - pagePermissions.add(permission); + }); - return saveBatch(pagePermissions); + Set collect = map.values().stream().map(ShopStaffPagePermission::getId).collect(Collectors.toSet()); + if (!collect.isEmpty()) { + updateChain().set(ShopStaffPagePermission::getIsUse, 0).in(ShopStaffPagePermission::getId, collect).update(); + } + return true; } } diff --git a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStaffServiceImpl.java b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStaffServiceImpl.java index 32517682..4bc8736d 100644 --- a/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStaffServiceImpl.java +++ b/cash-service/account-service/src/main/java/com/czg/service/account/service/impl/ShopStaffServiceImpl.java @@ -102,14 +102,16 @@ public class ShopStaffServiceImpl extends ServiceImpl - + diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsPayRecordMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsPayRecordMapper.java new file mode 100644 index 00000000..c9782f83 --- /dev/null +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsPayRecordMapper.java @@ -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 { + + List selectByFlowId(Long shopId, Long flowId); +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsStockFlowMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsStockFlowMapper.java index 0b8544e7..490a9a67 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsStockFlowMapper.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ConsStockFlowMapper.java @@ -3,8 +3,13 @@ package com.czg.service.product.mapper; import com.czg.product.entity.ConsStockFlow; import com.czg.product.param.ConsInfoParam; import com.czg.product.vo.ConsStatisticsVo; +import com.czg.product.vo.ShopVendorBillRecordVO; import com.mybatisflex.core.BaseMapper; +import jakarta.validation.constraints.NotEmpty; 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 public interface ConsStockFlowMapper extends BaseMapper { ConsStatisticsVo getConsStatistics(ConsInfoParam param); -} \ No newline at end of file + + List selectByVendorId(@Param("shopId") Long shopId, @Param("vendorId") Integer vendorId); + + List selectUnPaid(@Param("shopId") Long shopId, @Param("vendorIds") @NotEmpty List vendorIds); +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopVendorMapper.java b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopVendorMapper.java index d689ce2b..07234afa 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopVendorMapper.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/mapper/ShopVendorMapper.java @@ -1,8 +1,13 @@ package com.czg.service.product.mapper; import com.czg.product.entity.ShopVendor; +import com.czg.product.vo.ShopVendorBillVO; +import com.czg.product.vo.ShopVendorSummaryVO; import com.mybatisflex.core.BaseMapper; 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 public interface ShopVendorMapper extends BaseMapper { -} \ No newline at end of file + ShopVendorSummaryVO summary(@Param("shopId") Long shopId); + + + List bill(@Param("shopId") Long shopId); +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsPayRecordServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsPayRecordServiceImpl.java new file mode 100644 index 00000000..ae5bbd62 --- /dev/null +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ConsPayRecordServiceImpl.java @@ -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 implements ConsPayRecordService{ + + @Override + public Page getByFlowId(Long shopId, Long flowId) { + PageHelper.startPage(PageUtil.buildPageHelp()); + return PageUtil.convert(new PageInfo<>(mapper.selectByFlowId(shopId, flowId))); + } +} diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java index 5c0a266b..92ef6de2 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ShopVendorServiceImpl.java @@ -1,21 +1,38 @@ package com.czg.service.product.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.czg.enums.DeleteEnum; +import com.czg.exception.ApiNotPrintException; import com.czg.exception.CzgException; +import com.czg.product.dto.ShopVendorBillPayDTO; 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.service.ConsPayRecordService; +import com.czg.product.service.ConsStockFlowService; 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.service.product.mapper.ConsStockFlowMapper; import com.czg.service.product.mapper.ShopVendorMapper; 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.query.QueryWrapper; import com.mybatisflex.core.update.UpdateChain; import com.mybatisflex.spring.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; /** @@ -26,6 +43,12 @@ import java.util.List; */ @Service public class ShopVendorServiceImpl extends ServiceImpl implements ShopVendorService { + @Resource + private ConsStockFlowMapper consStockFlowMapper; + @Resource + private ConsStockFlowService consStockFlowService; + @Resource + private ConsPayRecordService consPayRecordService; private QueryWrapper buildQueryWrapper(ShopVendorDTO param) { QueryWrapper queryWrapper = PageUtil.buildSortQueryWrapper(); @@ -93,4 +116,73 @@ public class ShopVendorServiceImpl extends ServiceImpl billList(Long shopId) { + PageHelper.startPage(PageUtil.buildPageHelp()); + return PageUtil.convert(new PageInfo<>(mapper.bill(shopId))); + } + + @Override + public Page 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 stockFlows = consStockFlowMapper.selectUnPaid(shopId, payDTO.getFlowIdList()); + + BigDecimal unPaidAmount = BigDecimal.ZERO; + ArrayList 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 payRecord(Long shopId, Long flowId) { + return consPayRecordService.getByFlowId(shopId, flowId); + } +} diff --git a/cash-service/product-service/src/main/resources/mapper/ConsPayRecordMapper.xml b/cash-service/product-service/src/main/resources/mapper/ConsPayRecordMapper.xml new file mode 100644 index 00000000..46ab1958 --- /dev/null +++ b/cash-service/product-service/src/main/resources/mapper/ConsPayRecordMapper.xml @@ -0,0 +1,14 @@ + + + + + + diff --git a/cash-service/product-service/src/main/resources/mapper/ConsStockFlowMapper.xml b/cash-service/product-service/src/main/resources/mapper/ConsStockFlowMapper.xml index f8a3a0c4..ad05381b 100644 --- a/cash-service/product-service/src/main/resources/mapper/ConsStockFlowMapper.xml +++ b/cash-service/product-service/src/main/resources/mapper/ConsStockFlowMapper.xml @@ -5,16 +5,16 @@ - \ No newline at end of file + + + + diff --git a/cash-service/product-service/src/main/resources/mapper/ShopVendorMapper.xml b/cash-service/product-service/src/main/resources/mapper/ShopVendorMapper.xml index 8425ce76..ff7722c1 100644 --- a/cash-service/product-service/src/main/resources/mapper/ShopVendorMapper.xml +++ b/cash-service/product-service/src/main/resources/mapper/ShopVendorMapper.xml @@ -3,4 +3,34 @@ - \ No newline at end of file + + + diff --git a/sqls/250403/cash.sql b/sqls/250403/cash.sql new file mode 100644 index 00000000..97f3e01b --- /dev/null +++ b/sqls/250403/cash.sql @@ -0,0 +1 @@ +ALTER TABLE `tb_shop_info` ADD COLUMN `is_head_shop` tinyint NULL COMMENT '是否主店 1-是 0-否'; \ No newline at end of file