main-business/src/main/java/com/ruoyi/business/controller/DuePayableController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,39 @@ package com.ruoyi.business.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.business.dto.DuePayableDto; import com.ruoyi.business.entity.DuePayable; import com.ruoyi.business.service.DuePayableService; import com.ruoyi.business.vo.DuePayableVo; import com.ruoyi.business.vo.SearchDuePurchaseVo; import com.ruoyi.common.core.domain.R; import io.swagger.annotations.Api; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; /** * åºä»æ¬¾controller * * @author buhuazhen * @date 2025/8/26 * @email 3038525872@qq.com */ @RestController @Api(tags = "åºä»æ¬¾") @AllArgsConstructor @RequestMapping("/duePayable") public class DuePayableController { private final DuePayableService duePayableService; @PostMapping("/addDuePayable") public R addDuePayable(@RequestBody DuePayableDto duePayableDto) { return R.ok(duePayableService.addDuePayable(duePayableDto)); } @GetMapping("/list") public R<IPage<DuePayableVo>> list(Page<DuePayable> page, SearchDuePurchaseVo vo) { return R.ok(duePayableService.selectPayableList(page, vo)); } } main-business/src/main/java/com/ruoyi/business/dto/DuePayableDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ package com.ruoyi.business.dto; import lombok.Data; import java.math.BigDecimal; /** * @author buhuazhen * @date 2025/8/26 * @email 3038525872@qq.com */ @Data public class DuePayableDto { private Long id; private String ticketNo; /** * 对åºéè´ä¿¡æ¯è¡¨id */ private Long purchaseRegistrationId; /** * 仿¬¾ç±»å ï¼é¢ä»æ¬¾ãè¿åº¦æ¬¾ãè´¨ä¿éçï¼ */ private Integer payableType; /** * 仿¬¾éé¢ */ private String paymentAmount; /** * éä»¶ `,`åå² */ private String attachUpload; } main-business/src/main/java/com/ruoyi/business/entity/DuePayable.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,61 @@ package com.ruoyi.business.entity; import com.baomidou.mybatisplus.annotation.*; import com.ruoyi.common.core.domain.MyBaseEntity; import lombok.Data; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; /** * åºä»æ¬¾è¡¨ * @TableName due_payable */ @TableName(value ="due_payable") @Data public class DuePayable extends MyBaseEntity { /** * */ @TableId(value = "id", type = IdType.AUTO) private Long id; /** * ç¥¨å· */ @TableField("ticket_no") private String ticketNo; /** * 对åºéè´ä¿¡æ¯è¡¨id */ @TableField("purchase_registration_id") private Long purchaseRegistrationId; /** * 仿¬¾ç±»å ï¼é¢ä»æ¬¾ãè¿åº¦æ¬¾ãè´¨ä¿éçï¼ */ @TableField("payable_type") private Integer payableType; /** * 仿¬¾éé¢ */ @TableField("payment_amount") private BigDecimal paymentAmount; /** * éä»¶ `,`åå² */ @TableField("attach_upload") private String attachUpload; @TableField(exist = false) private static final long serialVersionUID = 1L; } main-business/src/main/java/com/ruoyi/business/entity/PendingInventory.java
@@ -95,6 +95,11 @@ @TableField(value = "coal_plan_id") private Long coalPlanId; /** * éè´ç±»å */ @TableField(value = "purchase_type") private Integer purchaseType; /** * ç»è®°æ¥æ */ @TableField(value = "registration_date") main-business/src/main/java/com/ruoyi/business/entity/PurchaseRegistration.java
@@ -93,4 +93,9 @@ */ @TableField(value = "freight") private BigDecimal freight; /** * éè´ç±»å */ @TableField(value = "purchase_type") private Integer purchaseType; } main-business/src/main/java/com/ruoyi/business/mapper/DuePayableMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.business.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.business.entity.DuePayable; import org.mapstruct.Mapper; /** * @author buhuazhen * @description é对表ãdue_payable(åºä»æ¬¾è¡¨)ãçæ°æ®åºæä½Mapper * @createDate 2025-08-26 16:12:56 * @Entity generator.domain.DuePayable */ public interface DuePayableMapper extends BaseMapper<DuePayable> { } main-business/src/main/java/com/ruoyi/business/service/DuePayableService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.ruoyi.business.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.business.dto.DuePayableDto; import com.ruoyi.business.dto.PurchaseRegistrationDto; import com.ruoyi.business.entity.DuePayable; import com.ruoyi.business.entity.PurchaseRegistration; import com.ruoyi.business.vo.DuePayableVo; import com.ruoyi.business.vo.SearchDuePurchaseVo; /** * @author buhuazhen * @description é对表ãdue_payable(åºä»æ¬¾è¡¨)ãçæ°æ®åºæä½Service * @createDate 2025-08-26 16:12:56 */ public interface DuePayableService extends IService<DuePayable> { int addDuePayable(DuePayableDto dueDto); IPage<DuePayableVo> selectPayableList(Page<DuePayable> page, SearchDuePurchaseVo vo); } main-business/src/main/java/com/ruoyi/business/service/impl/DuePayableServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,114 @@ package com.ruoyi.business.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.entity.dto.SimpleStorageDto; import com.ruoyi.basic.service.StorageBlobService; import com.ruoyi.business.dto.DuePayableDto; import com.ruoyi.business.entity.DuePayable; import com.ruoyi.business.mapper.DuePayableMapper; import com.ruoyi.business.service.DuePayableService; import com.ruoyi.business.vo.DuePayableVo; import com.ruoyi.business.vo.SearchDuePurchaseVo; import com.ruoyi.common.utils.StringUtils; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; /** * @author buhuazhen * @description é对表ãdue_payable(åºä»æ¬¾è¡¨)ãçæ°æ®åºæä½Serviceå®ç° * @createDate 2025-08-26 16:12:56 */ @Service @RequiredArgsConstructor public class DuePayableServiceImpl extends ServiceImpl<DuePayableMapper, DuePayable> implements DuePayableService { private final StorageBlobService storageBlobService; private final DuePayableMapper duePayableMapper; @Getter @Value("${minio.default-bucket}") private String defaultBucket; @Override public int addDuePayable(DuePayableDto dto) { DuePayable duePayable = new DuePayable(); duePayable.setPayableType(dto.getPayableType()); duePayable.setAttachUpload(dto.getAttachUpload()); duePayable.setPurchaseRegistrationId(dto.getPurchaseRegistrationId()); duePayable.setPaymentAmount(new BigDecimal(dto.getPaymentAmount())); duePayable.setTicketNo(dto.getTicketNo()); duePayable.setId(dto.getId()); if (Objects.isNull(dto.getId())) { return duePayableMapper.insert(duePayable); } return duePayableMapper.updateById(duePayable); } @Override public IPage<DuePayableVo> selectPayableList(Page<DuePayable> page, SearchDuePurchaseVo vo) { LambdaQueryWrapper<DuePayable> queryWrapper = new LambdaQueryWrapper<>(); // todo æç´¢æ¡ä»¶ææ¶ä¸ç¥éæ¯ä»ä¹ð¤· queryWrapper.orderByDesc(DuePayable::getCreateTime); Page<DuePayable> duePayablePage = duePayableMapper.selectPage(page, queryWrapper); /** * æ¥è¯¢åºéä»¶id ç±äºåç»è¯¦ç» */ Map<Long, List<Long>> attachMap = duePayablePage.getRecords().stream() .collect(Collectors.toMap( DuePayable::getId, it -> { if (StringUtils.isNotBlank(it.getAttachUpload())) { return Arrays.stream(it.getAttachUpload().split(",")) .map(Long::parseLong) .collect(Collectors.toList()); } else { return List.of(); } } )); /** * æ ¹æ®ä¸é¢çids æ¥è¯¢åºå ·ä½ä¿¡æ¯ */ Map<Long,SimpleStorageDto> storageMap = storageBlobService.findStorageByIds(attachMap.values().stream().flatMap(List::stream).toList(), getDefaultBucket()).stream().collect(Collectors.toMap(SimpleStorageDto::getId,it->it)); List<DuePayableVo> convertedList = duePayablePage.getRecords().stream().map(it -> { DuePayableVo dueVo = new DuePayableVo(it.getId(), it.getTicketNo(), it.getPurchaseRegistrationId(), it.getPayableType(), it.getPaymentAmount(),Long.parseLong(it.getCreateBy()),it.getCreateTime().toLocalDate()); // æä»¶ä¿¡æ¯ List<Long> storageIds = attachMap.get(it.getId()); dueVo.setAttachFileList( storageIds.stream() .map(storageMap::get) // O(1) è·å .filter(Objects::nonNull) .toList() ); return dueVo; }).toList(); IPage<DuePayableVo> voPage = new Page<>(); voPage.setCurrent(duePayablePage.getCurrent()); voPage.setSize(duePayablePage.getSize()); voPage.setTotal(duePayablePage.getTotal()); voPage.setRecords(convertedList); return voPage; } } main-business/src/main/java/com/ruoyi/business/vo/DuePayableVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,56 @@ package com.ruoyi.business.vo; import com.ruoyi.basic.entity.dto.SimpleStorageDto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; /** * @author buhuazhen * @date 2025/8/26 * @email 3038525872@qq.com */ @Data @AllArgsConstructor @NoArgsConstructor public class DuePayableVo { private Long id; private String ticketNo; private Long purchaseRegistrationId; // æéè¦å¯ä»¥æ¥è¯¢åºéè´å ·ä½ä¿¡æ¯ private Integer payableType; private BigDecimal paymentAmount; private List<SimpleStorageDto> attachFileList; private Long registrantId; private LocalDate registrationDate; public DuePayableVo(Long id, String ticketNo, Long purchaseRegistrationId, Integer payableType, BigDecimal paymentAmount) { this.id = id; this.ticketNo = ticketNo; this.purchaseRegistrationId = purchaseRegistrationId; this.payableType = payableType; this.paymentAmount = paymentAmount; } public DuePayableVo(Long id, String ticketNo, Long purchaseRegistrationId, Integer payableType, BigDecimal paymentAmount, Long registrantId, LocalDate registrationDate) { this.id = id; this.ticketNo = ticketNo; this.purchaseRegistrationId = purchaseRegistrationId; this.payableType = payableType; this.paymentAmount = paymentAmount; this.registrantId = registrantId; this.registrationDate = registrationDate; } } main-business/src/main/java/com/ruoyi/business/vo/SearchDuePurchaseVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ package com.ruoyi.business.vo; import lombok.Data; /** * @author buhuazhen * @date 2025/8/26 * @email 3038525872@qq.com */ @Data public class SearchDuePurchaseVo { private String search; } main-business/src/main/resources/mapper/DuePayableMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ <?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.business.mapper.DuePayableMapper"> <resultMap id="BaseResultMap" type="com.ruoyi.business.entity.DuePayable"> <id property="id" column="id" jdbcType="BIGINT"/> <result property="ticketNo" column="ticket_no" jdbcType="VARCHAR"/> <result property="purchaseRegistrationId" column="purchase_registration_id" jdbcType="BIGINT"/> <result property="payableType" column="payable_type" jdbcType="INTEGER"/> <result property="paymentAmount" column="payment_amount" jdbcType="NUMERIC"/> <result property="attachUpload" column="attach_upload" jdbcType="VARCHAR"/> </resultMap> <sql id="Base_Column_List"> id,ticket_no,purchase_registration_id, payable_type,payment_amount,attach_upload, deleted,create_by,create_time, update_by,update_time </sql> </mapper> ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
@@ -49,6 +49,15 @@ return getDataTable(list); } /** * è·åå ¨é¨å¯ç¨åæ®µä¿¡æ¯ * @return */ @GetMapping("/dictDataList") public AjaxResult dictDataList(){ return AjaxResult.success(dictDataService.selectAllDictDataList()); } @Log(title = "åå ¸æ°æ®", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:dict:export')") @PostMapping("/export") ruoyi-common/src/main/java/com/ruoyi/basic/entity/dto/SimpleStorageDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ package com.ruoyi.basic.entity.dto; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; /** * @author buhuazhen * @date 2025/8/26 * @email 3038525872@qq.com */ @Data @AllArgsConstructor @NoArgsConstructor public class SimpleStorageDto { private Long id; private String originalFilename; private String contentType; private String url; private String downloadUrl; private Date createTime; public SimpleStorageDto(Long id, String contentType, String originalFilename, Date createTime) { this.id = id; this.contentType = contentType; this.originalFilename = originalFilename; this.createTime = createTime; } } ruoyi-common/src/main/java/com/ruoyi/basic/service/StorageBlobService.java
@@ -3,6 +3,7 @@ import com.ruoyi.basic.entity.StorageAttachment; import com.ruoyi.basic.entity.StorageBlob; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.basic.entity.dto.SimpleStorageDto; import com.ruoyi.basic.entity.dto.StorageBlobDTO; import org.springframework.web.multipart.MultipartFile; @@ -32,4 +33,6 @@ * @return */ public int deleteStorageBlobs(StorageAttachment attachment); List<SimpleStorageDto> findStorageByIds(List<Long> ids,String bucketName); } ruoyi-common/src/main/java/com/ruoyi/basic/service/impl/StorageBlobServiceImpl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.basic.entity.StorageAttachment; import com.ruoyi.basic.entity.StorageBlob; import com.ruoyi.basic.entity.dto.SimpleStorageDto; import com.ruoyi.basic.entity.dto.StorageBlobDTO; import com.ruoyi.basic.mapper.StorageAttachmentMapper; import com.ruoyi.basic.mapper.StorageBlobMapper; @@ -158,4 +159,17 @@ } return 0; } @Override public List<SimpleStorageDto> findStorageByIds(List<Long> ids, String bucketName) { if (ids == null || ids.isEmpty()) { return List.of(); } return storageBlobMapper.selectByIds(ids).parallelStream().map(it -> { SimpleStorageDto dto = new SimpleStorageDto(it.getId(), it.getContentType(), it.getOriginalFilename(), it.getCreateTime()); dto.setDownloadUrl(minioUtils.getDownloadUrls(it.getBucketFilename(), bucketName, it.getOriginalFilename(), true)); dto.setUrl(minioUtils.getPreviewUrl(it.getBucketFilename(), bucketName, true)); return dto; }).toList(); } } ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DictDataVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.system.domain.vo; import lombok.Data; import lombok.RequiredArgsConstructor; /** * @author buhuazhen * @date 2025/8/26 * @email 3038525872@qq.com */ @Data public class DictDataVo { private String label; private String value; private String type; } ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
@@ -19,6 +19,8 @@ */ public List<SysDictData> selectDictDataList(SysDictData dictData); public List<SysDictData> selectAllDictList(); /** * æ ¹æ®åå ¸ç±»åæ¥è¯¢åå ¸æ°æ® * ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
@@ -2,6 +2,7 @@ import java.util.List; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.system.domain.vo.DictDataVo; /** * åå ¸ ä¸å¡å± @@ -57,4 +58,7 @@ * @return ç»æ */ public int updateDictData(SysDictData dictData); public List<DictDataVo> selectAllDictDataList(); } ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
@@ -1,6 +1,8 @@ package com.ruoyi.system.service.impl; import java.util.List; import com.ruoyi.system.domain.vo.DictDataVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.common.core.domain.entity.SysDictData; @@ -108,4 +110,15 @@ } return row; } @Override public List<DictDataVo> selectAllDictDataList() { return dictDataMapper.selectAllDictList().stream().map(it->{ DictDataVo dict = new DictDataVo(); dict.setLabel(it.getDictLabel()); dict.setValue(it.getDictValue()); dict.setType(it.getDictType()); return dict; }).toList(); } } ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
@@ -59,6 +59,10 @@ <select id="countDictDataByType" resultType="Integer"> select count(1) from sys_dict_data where dict_type=#{dictType} </select> <select id="selectAllDictList" resultType="com.ruoyi.common.core.domain.entity.SysDictData"> <include refid="selectDictDataVo"/> where status = '0' </select> <delete id="deleteDictDataById" parameterType="Long"> delete from sys_dict_data where dict_code = #{dictCode}