src/main/java/com/ruoyi/account/controller/EnterpriseFixedAssetsController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ package com.ruoyi.account.controller; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.ruoyi.account.pojo.EnterpriseFixedAssets; import com.ruoyi.account.service.EnterpriseFixedAssetsService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import io.swagger.annotations.Api; import org.springframework.web.bind.annotation.*; import org.springframework.http.HttpHeaders; import lombok.AllArgsConstructor; import io.swagger.annotations.ApiOperation; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.List; @RestController @AllArgsConstructor @RequestMapping("/enterpriseFixedAssets") @Api(value = "EnterpriseFixedAssets", tags = "åºå®èµäº§") public class EnterpriseFixedAssetsController { private EnterpriseFixedAssetsService enterpriseFixedAssetsservice; @GetMapping("/listPage") @ApiOperation("å页æ¥è¯¢ææ") public AjaxResult listPage(Page page, EnterpriseFixedAssets enterpriseFixedAssets) { IPage<EnterpriseFixedAssets> listPage = enterpriseFixedAssetsservice.listPage(page, enterpriseFixedAssets); return AjaxResult.success(listPage); } @PostMapping("/add") @ApiOperation("æ°å¢") public AjaxResult add(@RequestBody EnterpriseFixedAssets enterpriseFixedAssets) { return AjaxResult.success(enterpriseFixedAssetsservice.save(enterpriseFixedAssets)); } @PostMapping("/update") @ApiOperation("ä¿®æ¹") public AjaxResult update(@RequestBody EnterpriseFixedAssets enterpriseFixedAssets) { return AjaxResult.success(enterpriseFixedAssetsservice.updateById(enterpriseFixedAssets)); } @DeleteMapping("/delete") @ApiOperation("å é¤") public AjaxResult delete(@RequestBody List<Long> ids) { if (CollectionUtils.isEmpty(ids)) return AjaxResult.error("è¯·ä¼ å ¥è¦å é¤çID"); return AjaxResult.success(enterpriseFixedAssetsservice.removeBatchByIds(ids)); } } src/main/java/com/ruoyi/account/mapper/EnterpriseFixedAssetsMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,9 @@ package com.ruoyi.account.mapper; import com.ruoyi.account.pojo.EnterpriseFixedAssets; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface EnterpriseFixedAssetsMapper extends BaseMapper<EnterpriseFixedAssets> { } src/main/java/com/ruoyi/account/pojo/EnterpriseFixedAssets.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,60 @@ package com.ruoyi.account.pojo; import lombok.Data; import lombok.EqualsAndHashCode; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.activerecord.Model; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; @Data @TableName("enterprise_fixed_assets") @ApiModel(description="") public class EnterpriseFixedAssets implements Serializable { private static final long serialVersionUID = 1L; /** * */ @ApiModelProperty(value="") private Long id; /** * åç§° */ @ApiModelProperty(value="åç§°") private String name; /** * åå· */ @ApiModelProperty(value="åå·") private String model; /** * ä»·æ ¼ */ @ApiModelProperty(value="ä»·æ ¼") private BigDecimal price; /** * å°å */ @ApiModelProperty(value="å°å") private String address; @ApiModelProperty(value = "ç§æ·ID") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty(value = "å建æ¶é´") @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty(value = "ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; } src/main/java/com/ruoyi/account/service/EnterpriseFixedAssetsService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,13 @@ package com.ruoyi.account.service; import com.ruoyi.account.pojo.EnterpriseFixedAssets; import com.ruoyi.account.mapper.EnterpriseFixedAssetsMapper; import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import java.util.List; public interface EnterpriseFixedAssetsService extends IService<EnterpriseFixedAssets> { IPage<EnterpriseFixedAssets> listPage(Page<EnterpriseFixedAssets> page, EnterpriseFixedAssets enterpriseFixedAssets); } src/main/java/com/ruoyi/account/service/impl/EnterpriseFixedAssetsServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.ruoyi.account.service.impl; import com.ruoyi.account.pojo.EnterpriseFixedAssets; import com.ruoyi.account.service.EnterpriseFixedAssetsService; import com.ruoyi.account.mapper.EnterpriseFixedAssetsMapper; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import java.util.List; @Service @RequiredArgsConstructor @Transactional(rollbackFor = Exception.class) public class EnterpriseFixedAssetsServiceImpl extends ServiceImpl<EnterpriseFixedAssetsMapper, EnterpriseFixedAssets> implements EnterpriseFixedAssetsService { private final EnterpriseFixedAssetsMapper enterpriseFixedAssetsmapper; @Override public IPage<EnterpriseFixedAssets> listPage(Page<EnterpriseFixedAssets> page, EnterpriseFixedAssets enterpriseFixedAssets) { return enterpriseFixedAssetsmapper.selectPage(page, null); } } src/main/java/com/ruoyi/basic/controller/SupplierManageController.java
@@ -1,8 +1,8 @@ package com.ruoyi.basic.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.basic.dto.SupplierManageDto; import com.ruoyi.basic.pojo.Customer; import com.ruoyi.basic.pojo.SupplierManage; import com.ruoyi.basic.service.ISupplierService; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -118,6 +118,7 @@ */ @GetMapping("/getOptions") public AjaxResult getOptions() { return AjaxResult.success(supplierService.list()); return AjaxResult.success(supplierService.list(new LambdaQueryWrapper<SupplierManage>() .eq(SupplierManage::getIsWhite, 0))); } } src/main/java/com/ruoyi/basic/pojo/Customer.java
@@ -1,7 +1,10 @@ package com.ruoyi.basic.pojo; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; import java.util.Date; import java.util.List; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; @@ -99,4 +102,31 @@ @ApiModelProperty(value = "弿·è¡å·") @Excel(name = "弿·è¡å·") private String bankCode; @ApiModelProperty(value = "客æ·å好") private String preferences; @ApiModelProperty(value = "æ¯å¦ä»·æ ¼ææ") @Excel(name = "æ¯å¦ä»·æ ¼ææ") private Boolean isPriceSensitive; @ApiModelProperty(value = "æ¯å¦ä¼å") @Excel(name = "æ¯å¦ä¼å") private Boolean isVip; @TableField(exist = false) @ApiModelProperty(value = "è´ä¹°æ¬¡æ°") private Integer purchaseCount; @TableField(exist = false) @ApiModelProperty(value = "å¹³åéé¢") private BigDecimal averageAmount; @TableField(exist = false) @ApiModelProperty(value = "æè¿è´ä¹°æ¶é´") private LocalDate latestPurchaseTime; @TableField(exist = false) @ApiModelProperty(value = "常è´äº§å") private List<String> topProducts; } src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -17,17 +17,17 @@ import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.sales.mapper.SalesLedgerMapper; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedger; import com.ruoyi.sales.pojo.SalesLedgerProduct; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -42,6 +42,7 @@ @Slf4j public class CustomerServiceImpl extends ServiceImpl<CustomerMapper, Customer> implements ICustomerService { private final SalesLedgerMapper salesLedgerMapper; private final SalesLedgerProductMapper salesLedgerProductMapper; private CustomerMapper customerMapper; /** @@ -93,6 +94,71 @@ String address = StringUtils.defaultString(c.getCompanyAddress(), ""); String phone = StringUtils.defaultString(c.getCompanyPhone(), ""); c.setAddressPhone(address + "(" + phone + ")"); // ä¼ååç¬¦ä¸²æ¼æ¥ // æ¥è¯¢è¯¥å®¢æ·å ³èçéå®å°è´¦ä¸ï¼è´ä¹°æ¬¡æ°ãå¹³åéé¢ãæè¿è´ä¹°æ¶é´ List<SalesLedger> salesLedgers = salesLedgerMapper.selectList(new QueryWrapper<SalesLedger>().lambda().eq(SalesLedger::getCustomerId, c.getId())); if (!CollectionUtils.isEmpty(salesLedgers)) { // 计ç®è´ä¹°æ¬¡æ° int purchaseCount = salesLedgers.size(); c.setPurchaseCount(purchaseCount); // 计ç®å¹³åéé¢ if (purchaseCount > 0) { BigDecimal totalAmount = salesLedgers.stream() .map(SalesLedger::getContractAmount) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); BigDecimal averageAmount = totalAmount.divide(BigDecimal.valueOf(purchaseCount), 2, BigDecimal.ROUND_HALF_UP); c.setAverageAmount(averageAmount); } else { c.setAverageAmount(BigDecimal.ZERO); } // è®¡ç®æè¿è´ä¹°æ¶é´ SalesLedger latestLedger = salesLedgers.stream() .max((l1, l2) -> l1.getExecutionDate().compareTo(l2.getExecutionDate())) .orElse(null); if (latestLedger != null) { c.setLatestPurchaseTime(latestLedger.getExecutionDate()); } // 计ç®å¸¸è´äº§åï¼top 3ï¼ List<SalesLedgerProduct> allProducts = new ArrayList<>(); for (SalesLedger ledger : salesLedgers) { List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList( new QueryWrapper<SalesLedgerProduct>().lambda() .eq(SalesLedgerProduct::getSalesLedgerId, ledger.getId()) ); if (!CollectionUtils.isEmpty(products)) { allProducts.addAll(products); } } if (!CollectionUtils.isEmpty(allProducts)) { // æäº§åç±»å«åè§æ ¼åå·åç»ï¼ç»è®¡è´ä¹°æ¬¡æ° Map<String, Long> productCountMap = allProducts.stream() .collect(Collectors.groupingBy( p -> p.getProductCategory() + "-" + p.getSpecificationModel(), Collectors.counting() )); // æåºå¹¶åå3 List<String> topProducts = productCountMap.entrySet().stream() .sorted(Map.Entry.<String, Long>comparingByValue().reversed()) .limit(3) .map(Map.Entry::getKey) .collect(Collectors.toList()); c.setTopProducts(topProducts); } else { c.setTopProducts(new ArrayList<>()); } } else { // 没æéå®è®°å½æ¶è®¾ç½®é»è®¤å¼ c.setPurchaseCount(0); c.setAverageAmount(BigDecimal.ZERO); c.setLatestPurchaseTime(null); c.setTopProducts(new ArrayList<>()); } }) .collect(Collectors.toList()); @@ -212,4 +278,4 @@ } return sb.toString(); } } } src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -29,7 +29,6 @@ import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; @@ -284,7 +283,7 @@ public AjaxResult getProductInventory(SalesLedgerProduct salesLedgerProduct){ List<SalesLedgerProduct> list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct); if(CollectionUtils.isEmpty(list)){ return AjaxResult.error("该产åä¸åå¨"); throw new RuntimeException("该产åä¸åå¨"); } List<ProcurementPageDto> procurementPageDtoList = new ArrayList<>(); list.forEach(item -> { @@ -295,7 +294,7 @@ procurementPageDtoList.addAll(procurementPageDtoIPage.getRecords()); }); if(!CollectionUtils.isEmpty(procurementPageDtoList)){ return AjaxResult.error("该产ååºåä¸åå¨"); throw new RuntimeException("该产ååºåä¸åå¨"); } AtomicInteger num = new AtomicInteger(); list.forEach(item -> { src/main/resources/mapper/account/EnterpriseFixedAssetsMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,17 @@ <?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.ruoyi.account.mapper.EnterpriseFixedAssetsMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.account.pojo.EnterpriseFixedAssets"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="model" property="model" /> <result column="price" property="price" /> <result column="address" property="address" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> <result column="tenant_id" property="tenantId" /> </resultMap> </mapper>