platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/dto/ProductQueryDTO.java
New file @@ -0,0 +1,14 @@ package com.by4cloud.platformx.business.dto; import lombok.Data; @Data public class ProductQueryDTO { private String productName; private String contractCategory; private String parentId; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/BusinessCustomer.java
@@ -9,7 +9,7 @@ import org.hibernate.annotations.Comment; /** * @author wjli * @author * @description * @date 2026/4/29 10:51 **/ platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Demo.java
@@ -4,14 +4,14 @@ import com.by4cloud.platformx.common.data.mybatis.BaseModel; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Transient; import jakarta.persistence.*; import lombok.Data; import org.hibernate.annotations.Comment; import org.hibernate.annotations.Table; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.util.Date; /** @@ -22,9 +22,11 @@ @Entity @Table(appliesTo = "demo", comment = "demo") public class Demo extends BaseModel<Demo> { @Schema(description = "姓名") @Column(columnDefinition="VARCHAR(64) comment '姓名'") @Comment("姓名") @Column(name="name",length = 255) private String name; @Schema(description = "专业") @Column(columnDefinition="VARCHAR(64) comment '专业'") private String jo; @@ -49,5 +51,27 @@ @Schema(description = "test") private String test; @Comment("字符串") @Column(name="str",length = 64) private String str; @Comment("long类型") @Column(name="big_integer",length = 64) private Long bigInteger; @Comment("bigDecimal") @Column(name="big_decimal",precision=10, scale=2) private BigDecimal bigDecimal; @Comment("date") @Temporal(TemporalType.DATE) private Date date; @Comment("timestamp") @Temporal(TemporalType.TIMESTAMP) private Date timestamp; @Comment("bool") private Boolean bool; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/PlanSubjectMatter.java
@@ -9,7 +9,7 @@ import org.hibernate.annotations.Comment; /** * @author wjli * @author * @description排产计划标的物 * @date 2026/4/29 10:51 **/ platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/Product.java
@@ -8,6 +8,7 @@ import jakarta.persistence.Transient; import lombok.Data; import java.util.List; /** @@ -69,4 +70,11 @@ @Transient @TableField(exist = false) private List<Product> children; /** * 标的物 */ @Transient @TableField(exist = false) private Integer childNum; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/ProductionPlan.java
@@ -15,7 +15,7 @@ import java.util.List; /** * @author wjli * @author * @description * @date 2026/4/29 10:51 **/ platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/entity/SalesMan.java
@@ -9,7 +9,7 @@ import org.hibernate.annotations.Comment; /** * @author wjli * @author * @description * @date 2026/4/29 10:51 **/ platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ProductSelectVo.java
New file @@ -0,0 +1,21 @@ package com.by4cloud.platformx.business.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; @Data public class ProductSelectVo { private Long id; @Schema(description = "产品名称") private String productName; private String productType; private String erpCode; private Long parentId; private Integer childNum; } platformx-business-finance-api/src/main/java/com/by4cloud/platformx/business/vo/ProductTreeVo.java
@@ -11,6 +11,10 @@ @Schema(description = "产品名称") private String productName; private String productType; private String erpCode; private Long parentId; } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/PaymentConfirmController.java
@@ -130,4 +130,12 @@ public R syncPaymentRecepit(){ return paymentConfirmService.syncPaymentRecepit(); } /** * 业务类型 */ @GetMapping("queryAllBusinessType") public R queryAllBusinessType(){ return paymentConfirmService.queryAllBusinessType(); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/controller/ProductController.java
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.by4cloud.platformx.business.dto.ProductQueryDTO; import com.by4cloud.platformx.business.vo.ProductTreeVo; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.log.annotation.SysLog; @@ -24,6 +25,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -80,25 +82,28 @@ @Operation(summary = "分页查询" , description = "分页查询" ) @GetMapping("/list" ) @PreAuthorize("@pms.hasPermission('business_product_view')" ) @Inner(value = false) public R getProductList(@ParameterObject Product product) { return R.ok(productService.getProductList(product)); } /** * 分页查询 * @param product 产品信息 * @param queryDTO 产品信息 * @return */ @Operation(summary = "分页查询" , description = "分页查询" ) @GetMapping("/listByParentId" ) @PreAuthorize("@pms.hasPermission('business_product_view')" ) //@Inner(value = false) public R getProductListByParentId(@ParameterObject Product product) { LambdaQueryWrapper<Product> wrapper = Wrappers.lambdaQuery(); wrapper.like(StrUtil.isNotEmpty(product.getProductName()),Product::getProductName,product.getProductName()); wrapper.eq(product.getParentId()!=null,Product::getParentId,product.getParentId()); return R.ok(BeanUtil.copyToList(productService.listByScope(wrapper), ProductTreeVo.class)); public R getProductListByParentId(@ParameterObject ProductQueryDTO queryDTO) { // LambdaQueryWrapper<Product> wrapper = Wrappers.lambdaQuery(); // wrapper.like(StrUtil.isNotEmpty(queryDTO.getProductName()),Product::getProductName,queryDTO.getProductName()); // wrapper.eq(StrUtil.isNotEmpty(queryDTO.getParentId()),Product::getParentId,queryDTO.getParentId()); // if (StrUtil.isNotEmpty(queryDTO.getContractCategory())&&StrUtil.equals(queryDTO.getContractCategory(), "water_house")){ // String[] erpCodes = new String[]{"房租租赁","dianli","water"}; // wrapper.in(Product::getErpCode,erpCodes); // return R.ok(BeanUtil.copyToList(productService.listByScope(wrapper), ProductTreeVo.class)); // } // return R.ok(BeanUtil.copyToList(productService.listByScope(wrapper), ProductTreeVo.class)); return productService.getProductListByParentId(queryDTO); } /** @@ -108,10 +113,9 @@ */ @Operation(summary = "层级查询" , description = "层级查询" ) @GetMapping("/treeList" ) //@PreAuthorize("@pms.hasPermission('business_product_view')" ) @Inner(value = false) public R getNewsCategoryTree(@ParameterObject Product product) { return R.ok(productService.treeList(product.getParentId(), product.getProductName())); return R.ok(productService.treeList()); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/mapper/ProductMapper.java
@@ -1,5 +1,7 @@ package com.by4cloud.platformx.business.mapper; import com.by4cloud.platformx.business.dto.ProductQueryDTO; import com.by4cloud.platformx.business.vo.ProductSelectVo; import com.by4cloud.platformx.common.data.datascope.DataScope; import com.by4cloud.platformx.common.data.datascope.PlatformxBaseMapper; import com.by4cloud.platformx.business.entity.Product; @@ -12,5 +14,7 @@ public interface ProductMapper extends PlatformxBaseMapper<Product> { List<Product> getProductListByScope(@Param("product") Product product, DataScope comp_id); List<ProductSelectVo> getProductListByScope(@Param("product") Product product, DataScope comp_id); List<ProductSelectVo> getProductListByParentId(@Param("queryDTO") ProductQueryDTO queryDTO,@Param("erpCodes") List<String> erpCodes, DataScope comp_id); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/PaymentConfirmService.java
@@ -15,4 +15,6 @@ String getAccessToken(String accessToken); void saveBipRequestRecord(JSONObject params,String methodName, String result); R queryAllBusinessType(); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/ProductService.java
@@ -1,8 +1,10 @@ package com.by4cloud.platformx.business.service; import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.extension.service.IService; import com.by4cloud.platformx.business.dto.ProductQueryDTO; import com.by4cloud.platformx.business.entity.Product; import com.by4cloud.platformx.business.vo.ProductSelectVo; import com.by4cloud.platformx.business.vo.ProductTreeVo; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.mybatis.IIService; @@ -10,8 +12,9 @@ public interface ProductService extends IIService<Product> { List<Tree<Long>> treeList(Long parentId, String productName); List<Tree<Long>> treeList(); List<Product> getProductList(Product product); List<ProductSelectVo> getProductList(Product product); R getProductListByParentId(ProductQueryDTO queryDTO); } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/PaymentConfirmServiceImpl.java
@@ -34,6 +34,7 @@ import java.security.NoSuchAlgorithmException; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** * 收款确认 @@ -73,6 +74,9 @@ public R add(PaymentConfirmAddDTO addDTO) { if (StrUtil.isNotBlank(addDTO.getContractNo())) { Contract contract = contractService.getOne(Wrappers.<Contract>lambdaQuery().eq(Contract::getContractNo, addDTO.getContractNo())); if (ObjUtil.isNull(contract)) { return R.failed("合同查询失败,请检查合同编号"); } BusinessCustomer customer = businessCustomerService.getOne(Wrappers.<BusinessCustomer>lambdaQuery() .eq(StrUtil.isNotBlank(addDTO.getBusGuestName()), BusinessCustomer::getRegisterName, addDTO.getBusGuestName()) .eq(StrUtil.isNotBlank(addDTO.getBusGuestId()), BusinessCustomer::getId, addDTO.getBusGuestId())); @@ -194,7 +198,7 @@ entity.setBusGuestId(customer.getId()); entity.setBusGuestName(customer.getRegisterName()); entity.setBusinessType(""); entity.setBusinessType("退款"); entity.setTransationAmount(addDTO.getTransationAmount()); BigDecimal newtotal = addDTO.getTransationAmount().multiply(new BigDecimal("-1")).add(lastConfirm.getTotalAmount()); if (newtotal.compareTo(new BigDecimal("0")) > 0) { @@ -839,4 +843,10 @@ } baseMapper.insert(entity); } @Override public R queryAllBusinessType() { return R.ok(baseMapper.selectList(Wrappers.<PaymentConfirm>lambdaQuery().select(PaymentConfirm::getBusinessType).isNotNull(PaymentConfirm::getBusinessType) .groupBy(PaymentConfirm::getBusinessType)).stream().map(PaymentConfirm::getBusinessType).collect(Collectors.toList())); } } platformx-business-finance-biz/src/main/java/com/by4cloud/platformx/business/service/impl/ProductServiceImpl.java
@@ -5,13 +5,15 @@ import cn.hutool.core.lang.tree.TreeNode; import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.by4cloud.platformx.business.dto.ProductQueryDTO; import com.by4cloud.platformx.business.entity.Product; import com.by4cloud.platformx.business.entity.TaxCode; import com.by4cloud.platformx.business.mapper.ProductMapper; import com.by4cloud.platformx.business.service.ProductService; import com.by4cloud.platformx.business.vo.ProductSelectVo; import com.by4cloud.platformx.business.vo.ProductTreeVo; import com.by4cloud.platformx.common.core.util.R; import com.by4cloud.platformx.common.data.datascope.DataScope; @@ -20,10 +22,10 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.HashMap; import java.lang.reflect.Array; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @@ -36,30 +38,31 @@ @Service public class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService { @Override public List<Tree<Long>> treeList(Long parentId, String productName) { Long parent = parentId == null ? 0l : parentId; public List<Tree<Long>> treeList() { List<TreeNode<Long>> collect = baseMapper .selectListByScope(Wrappers.<Product>lambdaQuery() .like(StrUtil.isNotBlank(productName), Product::getProductName, productName) .orderByAsc(Product::getCreateTime), DataScope.of("comp_id")) .stream().map(getNodeFunction()).collect(Collectors.toList()); // 模糊查询 不组装树结构 直接返回 表格方便编辑 if (StrUtil.isNotBlank(productName)) { return collect.stream().map(node -> { Tree<Long> tree = new Tree<>(); tree.putAll(node.getExtra()); BeanUtils.copyProperties(node, tree); return tree; }).collect(Collectors.toList()); } return TreeUtil.build(collect, parent); // if (StrUtil.isNotBlank(productName)) { // return collect.stream().map(node -> { // Tree<Long> tree = new Tree<>(); // tree.putAll(node.getExtra()); // BeanUtils.copyProperties(node, tree); // return tree; // }).collect(Collectors.toList()); // } TreeNode<Long> parent = new TreeNode<>(); parent.setId(0L); parent.setName("目录"); parent.setParentId(-1L); collect.add(parent); return TreeUtil.build(collect, 0L); } @Override public List<Product> getProductList(Product product) { public List<ProductSelectVo> getProductList(Product product) { return baseMapper.getProductListByScope(product,DataScope.of("comp_id")); } @@ -90,4 +93,17 @@ return node; }; } @Override public R getProductListByParentId(ProductQueryDTO queryDTO) { String[] erpCodes = new String[]{"房租租赁","dianli","water"}; // MPJLambdaWrapper<Product> wrapper = new MPJLambdaWrapper<Product>() // .selectAs("( SELECT count(1) FROM product t1 WHERE t1.parent_id = t.id )",Product::getChildNum) // .selectAll(Product.class) // .like(StrUtil.isNotEmpty(queryDTO.getProductName()),Product::getProductName,queryDTO.getProductName()) // .eq(StrUtil.isNotEmpty(queryDTO.getParentId()),Product::getParentId,queryDTO.getParentId()) // .in(StrUtil.isNotEmpty(queryDTO.getContractCategory())&&StrUtil.equals(queryDTO.getContractCategory(), "water_house"), // Product::getErpCode,erpCodes); return R.ok(baseMapper.getProductListByParentId(queryDTO, Arrays.asList(erpCodes),DataScope.of("comp_id"))); } } platformx-business-finance-biz/src/main/resources/mapper/ProductMapper.xml
@@ -16,7 +16,7 @@ <result property="updateTime" column="update_time"/> <result property="delFlag" column="del_flag"/> </resultMap> <select id="getProductListByScope" resultType="com.by4cloud.platformx.business.entity.Product"> <select id="getProductListByScope" resultType="com.by4cloud.platformx.business.vo.ProductSelectVo"> SELECT t.id, t.product_name, @@ -42,6 +42,40 @@ </if> AND ( NOT EXISTS ( SELECT 1 FROM product t1 WHERE t1.parent_id = t.id )) limit 30 </select> <select id="getProductListByParentId" resultType="com.by4cloud.platformx.business.vo.ProductSelectVo"> SELECT t.id, t.product_name, t.main_code, t.erp_code, t.product_type, t.tax_rate, t.tax_class, t.tax_code, t.parent_id, t.create_by, t.update_by, t.create_time, t.update_time, t.del_flag, t.comp_id , ( SELECT count( 1 ) FROM product t1 WHERE t1.parent_id = t.id ) AS childNum FROM product t WHERE del_flag = '0' <if test="queryDTO.productName !=null and queryDTO.productName !=''"> and t.product_name LIKE CONCAT('%', #{queryDTO.productName}, '%') </if> <if test="queryDTO.parentId !=null "> and t.parent_id = #{queryDTO.parentId} </if> <if test="queryDTO.contractCategory !=null and queryDTO.contractCategory !='' and queryDTO.contractCategory=='water_house'"> and t.erp_code in <foreach collection="erpCodes" item="erp" open="(" separator="," close=")"> #{erp} </foreach> </if> </select> </mapper>