src/main/java/com/ruoyi/common/enums/SparePartsRequisitionRecordSourceTypeEnum.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.ruoyi.common.enums; import lombok.Getter; @Getter public enum SparePartsRequisitionRecordSourceTypeEnum implements BaseEnum<Integer> { SparePartsRequisitionRecordSourceTypeRepair(0, "ç»´ä¿®"), SparePartsRequisitionRecordSourceTypeMaintenance(1, "ä¿å »"); private final Integer code; private final String value; SparePartsRequisitionRecordSourceTypeEnum(Integer code, String value) { this.code = code; this.value = value; } public static SparePartsRequisitionRecordSourceTypeEnum getByCode(Integer code) { for (SparePartsRequisitionRecordSourceTypeEnum type : SparePartsRequisitionRecordSourceTypeEnum.values()) { if (type.getCode().equals(code)) { return type; } } return null; } } src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
@@ -3,7 +3,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.device.dto.DeviceLedgerDto; import com.ruoyi.device.execl.DeviceLedgerExeclDto; import com.ruoyi.device.mapper.DeviceLedgerMapper; import com.ruoyi.device.mapper.DeviceMaintenanceMapper; import com.ruoyi.device.pojo.DeviceLedger; @@ -11,6 +13,7 @@ import com.ruoyi.device.service.IDeviceLedgerService; import com.ruoyi.framework.aspectj.lang.annotation.Anonymous; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.staff.dto.StaffOnJobExcelDto; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; @@ -79,7 +82,14 @@ deviceLedgerService.export(response, ids); } @PostMapping("import") @ApiOperation("ä¸è½½æ¨¡æ¿") @PostMapping("/downloadTemplate") public void downloadTemplate(HttpServletResponse response) { ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<>(DeviceLedgerExeclDto.class); util.importTemplateExcel(response, "设å¤å¯¼å ¥æ¨¡æ¿"); } @PostMapping("/import") @ApiOperation("å¯¼å ¥è®¾å¤å°è´¦") public AjaxResult importData(MultipartFile file) throws IOException { Boolean b = deviceLedgerService.importData(file); src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
@@ -1,9 +1,14 @@ package com.ruoyi.device.execl; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDate; import java.util.Date; @Data public class DeviceLedgerExeclDto { @@ -14,6 +19,18 @@ */ @Excel(name = "设å¤åç§°" ,sort = 1) private String deviceName; /** * 设å¤ç±»å */ @Excel(name = "设å¤ç±»å",sort = 0,combo = {"ç产设å¤","åå ¬è®¾å¤","æ£æ¥è®¾å¤","è¿è¾è®¾å¤","å ¶ä»è®¾å¤"}) private String type; @ApiModelProperty("计åè¿è¡æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @Excel(name = "计åè¿è¡æ¶é´",sort = 10,dateFormat = "yyyy-MM-dd") private Date planRuntimeTime; /** * è§æ ¼åå· @@ -36,8 +53,8 @@ /** * æ°é */ @Excel(name = "æ°é",sort = 5) private BigDecimal number; @Excel(name = "æ°é",sort = 5, type = Excel.Type.EXPORT) private BigDecimal number = BigDecimal.ONE; /** * å«ç¨åä»· @@ -48,7 +65,7 @@ /** * å«ç¨æ»ä»· */ @Excel(name = "å«ç¨æ»ä»·",sort = 7) @Excel(name = "å«ç¨æ»ä»·",sort = 7, type = Excel.Type.EXPORT) private BigDecimal taxIncludingPriceTotal; /** @@ -60,17 +77,8 @@ /** * ä¸å«ç¨æ»ä»· */ @Excel(name = "ä¸å«ç¨æ»ä»·",sort = 9) @Excel(name = "ä¸å«ç¨æ»ä»·",sort = 9, type = Excel.Type.EXPORT) private BigDecimal unTaxIncludingPriceTotal; // // /** // * å½å ¥æ¶é´ // * // */ // @Excel(name = "å½å ¥æ¶é´",sort = 10) // @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") // private LocalDateTime createTime; /** src/main/java/com/ruoyi/device/pojo/DeviceMaintenance.java
@@ -10,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; import java.util.List; @Data @TableName("device_maintenance") @@ -84,4 +85,17 @@ @ApiModelProperty("ç§æ·id") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty("é¢ç¨å¤ä»¶ids") private String sparePartsIds; @ApiModelProperty("使ç¨å¤ä»¶å表") @TableField(exist = false) private List<SparePartUse> sparePartsUseList; @Data public static class SparePartUse { private Long id; private Integer quantity; } } src/main/java/com/ruoyi/device/pojo/DeviceRepair.java
@@ -10,6 +10,7 @@ import java.time.LocalDateTime; import java.util.Date; import java.util.List; @Data @TableName("device_repair") @@ -72,5 +73,16 @@ @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty("é¢ç¨å¤ä»¶ids") private String sparePartsIds; @ApiModelProperty("使ç¨å¤ä»¶å表") @TableField(exist = false) private List<SparePartUse> sparePartsUseList; @Data public static class SparePartUse { private Long id; private Integer quantity; } } src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -4,6 +4,8 @@ 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.common.utils.DateUtils; import com.ruoyi.common.utils.OrderUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -23,6 +25,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -112,6 +116,11 @@ deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue()); } BeanUtils.copyProperties(c,deviceLedger); // éè¿å«ç¨åä»·ãæ°éãç¨ç计ç®å«ç¨æ»ä»·ï¼ä¸å«ç¨æ»ä»· deviceLedger.setTaxIncludingPriceTotal(c.getTaxIncludingPriceUnit()); deviceLedger.setNumber(BigDecimal.ONE); deviceLedger.setPlanRuntimeTime(DateUtils.toLocalDate(c.getPlanRuntimeTime())); deviceLedger.setUnTaxIncludingPriceTotal(deviceLedger.getTaxIncludingPriceTotal().divide(BigDecimal.ONE.add(c.getTaxRate()),2, RoundingMode.HALF_UP)); deviceLedgerMapper.insert(deviceLedger); }); src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceServiceImpl.java
@@ -12,10 +12,17 @@ import com.ruoyi.device.pojo.DeviceMaintenance; import com.ruoyi.device.service.IDeviceMaintenanceService; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper; import com.ruoyi.measuringinstrumentledger.pojo.SpareParts; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; @@ -27,6 +34,10 @@ @Autowired private DeviceMaintenanceMapper deviceMaintenanceMapper; @Autowired private SparePartsMapper sparePartsMapper; @Autowired private SparePartsRequisitionRecordService sparePartsRequisitionRecordService; @Override public IPage<DeviceMaintenanceDto> queryPage(Page page, DeviceMaintenanceDto deviceMaintenanceDto) { @@ -44,7 +55,42 @@ } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult updateDeviceDeviceMaintenance(DeviceMaintenance deviceMaintenance) { DeviceMaintenance oldDeviceMaintenance = this.getById(deviceMaintenance.getId()); // å¤çå¤ä»¶ä½¿ç¨æ åµ if (com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(deviceMaintenance.getSparePartsUseList())) { List<Long> sparePartIds = new ArrayList<>(); for (DeviceMaintenance.SparePartUse sparePartUse : deviceMaintenance.getSparePartsUseList()) { // è·åå¤ä»¶ä¿¡æ¯ SpareParts spareParts = sparePartsMapper.selectById(sparePartUse.getId()); if (spareParts != null) { // æ£æ¥æ°éæ¯å¦è¶³å¤ if (spareParts.getQuantity().compareTo(new BigDecimal(sparePartUse.getQuantity())) >= 0) { // æ´æ°æ°é spareParts.setQuantity(spareParts.getQuantity().subtract(new BigDecimal(sparePartUse.getQuantity()))); sparePartsMapper.updateById(spareParts); sparePartIds.add(sparePartUse.getId()); // å建å¤ä»¶é¢ç¨è®°å½ SparePartsRequisitionRecord record = new SparePartsRequisitionRecord(); record.setSourceType(1); // 1 ä¿å » record.setSourceId(deviceMaintenance.getId()); record.setDeviceLedgerId(oldDeviceMaintenance.getDeviceLedgerId()); record.setSparePartsId(sparePartUse.getId()); record.setQuantity(sparePartUse.getQuantity()); sparePartsRequisitionRecordService.save(record); } else { return AjaxResult.error("å¤ä»¶ " + spareParts.getName() + " æ°éä¸è¶³"); } } } // æ´æ°å¤ä»¶IDsåæ®µ if (!sparePartIds.isEmpty()) { deviceMaintenance.setSparePartsIds(StringUtils.join(sparePartIds, ",")); } } if (this.updateById(deviceMaintenance)) { return AjaxResult.success(); } src/main/java/com/ruoyi/device/service/impl/DeviceRepairServiceImpl.java
@@ -3,6 +3,7 @@ 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.github.xiaoymin.knife4j.core.util.CollectionUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.device.dto.DeviceDefectRecordDto; @@ -15,12 +16,19 @@ import com.ruoyi.device.service.IDeviceLedgerService; import com.ruoyi.device.service.IDeviceRepairService; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.measuringinstrumentledger.mapper.SparePartsMapper; import com.ruoyi.measuringinstrumentledger.pojo.SpareParts; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -36,6 +44,11 @@ private DeviceRepairMapper deviceRepairMapper; @Autowired private IDeviceLedgerService deviceLedgerService; @Autowired private SparePartsMapper sparePartsMapper; @Autowired private SparePartsRequisitionRecordService sparePartsRequisitionRecordService; @Override public IPage<DeviceRepairDto> queryPage(Page page, DeviceRepairDto deviceRepairDto) { @@ -55,7 +68,42 @@ } @Override @Transactional(rollbackFor = Exception.class) public AjaxResult updateDeviceRepair(DeviceRepair deviceRepair) { DeviceRepair oldDeviceRepair = this.getById(deviceRepair.getId()); // å¤çå¤ä»¶ä½¿ç¨æ åµ if (CollectionUtils.isNotEmpty(deviceRepair.getSparePartsUseList())) { List<Long> sparePartIds = new ArrayList<>(); for (DeviceRepair.SparePartUse sparePartUse : deviceRepair.getSparePartsUseList()) { // è·åå¤ä»¶ä¿¡æ¯ SpareParts spareParts = sparePartsMapper.selectById(sparePartUse.getId()); if (spareParts != null) { // æ£æ¥æ°éæ¯å¦è¶³å¤ if (spareParts.getQuantity().compareTo(new BigDecimal(sparePartUse.getQuantity())) >= 0) { // æ´æ°æ°é spareParts.setQuantity(spareParts.getQuantity().subtract(new BigDecimal(sparePartUse.getQuantity()))); sparePartsMapper.updateById(spareParts); sparePartIds.add(sparePartUse.getId()); // å建å¤ä»¶é¢ç¨è®°å½ SparePartsRequisitionRecord record = new SparePartsRequisitionRecord(); record.setSourceType(0); // 0 ç»´ä¿® record.setSourceId(deviceRepair.getId()); record.setDeviceLedgerId(oldDeviceRepair.getDeviceLedgerId()); record.setSparePartsId(sparePartUse.getId()); record.setQuantity(sparePartUse.getQuantity()); sparePartsRequisitionRecordService.save(record); } else { return AjaxResult.error("å¤ä»¶ " + spareParts.getName() + " æ°éä¸è¶³"); } } } // æ´æ°å¤ä»¶IDsåæ®µ if (!sparePartIds.isEmpty()) { deviceRepair.setSparePartsIds(StringUtils.join(sparePartIds, ",")); } } if (this.updateById(deviceRepair)) { Long id = deviceRepair.getId(); // src/main/java/com/ruoyi/measuringinstrumentledger/controller/SparePartsRequisitionRecordController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ package com.ruoyi.measuringinstrumentledger.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto; import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-02 03:59:56 */ @RestController @RequestMapping("/sparePartsRequisitionRecord") @Api(tags = "å¤ä»¶é¢ç¨è®°å½æ¥å£") public class SparePartsRequisitionRecordController { @Autowired private SparePartsRequisitionRecordService sparePartsRequisitionRecordService; @GetMapping("/listPage") @ApiOperation("å¤ä»¶åç±»-å页æ¥è¯¢") public AjaxResult listPage(Page page, SparePartsRequisitionRecordDto sparePartsRequisitionRecordDto){ IPage<SparePartsRequisitionRecordDto> listPage = sparePartsRequisitionRecordService.listPage(page, sparePartsRequisitionRecordDto); return AjaxResult.success(listPage); } } src/main/java/com/ruoyi/measuringinstrumentledger/dto/SparePartsRequisitionRecordDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package com.ruoyi.measuringinstrumentledger.dto; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; import lombok.Data; @Data public class SparePartsRequisitionRecordDto extends SparePartsRequisitionRecord { private String sparePartsName; private String deviceName; private String sourceText; private String operator; } src/main/java/com/ruoyi/measuringinstrumentledger/mapper/SparePartsRequisitionRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package com.ruoyi.measuringinstrumentledger.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * <p> * Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-02 03:59:56 */ @Mapper public interface SparePartsRequisitionRecordMapper extends BaseMapper<SparePartsRequisitionRecord> { IPage<SparePartsRequisitionRecordDto> listPage(Page page, @Param("params") SparePartsRequisitionRecordDto sparePartsRequisitionRecordDto); } src/main/java/com/ruoyi/measuringinstrumentledger/pojo/SparePartsRequisitionRecord.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,67 @@ package com.ruoyi.measuringinstrumentledger.pojo; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.time.LocalDateTime; /** * <p> * * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-02 03:59:56 */ @Getter @Setter @TableName("spare_parts_requisition_record") @ApiModel(value = "SparePartsRequisitionRecord对象", description = "") public class SparePartsRequisitionRecord implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("æ¥æºç±»å(0 ç»´ä¿® 1 ä¿å »)") private Integer sourceType; @ApiModelProperty("æ¥æºid") private Long sourceId; @ApiModelProperty("设å¤id") private Long deviceLedgerId; @ApiModelProperty("å¤ä»¶id") private Long sparePartsId; @ApiModelProperty("æ°é") private Integer quantity; @ApiModelProperty("å建人") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty("ç§æ·id") @TableField(fill = FieldFill.INSERT) private Long tenantId; @ApiModelProperty("å½å ¥æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @ApiModelProperty("æ´æ°æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; } src/main/java/com/ruoyi/measuringinstrumentledger/service/SparePartsRequisitionRecordService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.measuringinstrumentledger.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.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; /** * <p> * æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-02 03:59:56 */ public interface SparePartsRequisitionRecordService extends IService<SparePartsRequisitionRecord> { IPage<SparePartsRequisitionRecordDto> listPage(Page page, SparePartsRequisitionRecordDto sparePartsRequisitionRecordDto); } src/main/java/com/ruoyi/measuringinstrumentledger/service/impl/SparePartsRequisitionRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ package com.ruoyi.measuringinstrumentledger.service.impl; 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.common.enums.SparePartsRequisitionRecordSourceTypeEnum; import com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto; import com.ruoyi.measuringinstrumentledger.mapper.SparePartsRequisitionRecordMapper; import com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord; import com.ruoyi.measuringinstrumentledger.service.SparePartsRequisitionRecordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-04-02 03:59:56 */ @Service public class SparePartsRequisitionRecordServiceImpl extends ServiceImpl<SparePartsRequisitionRecordMapper, SparePartsRequisitionRecord> implements SparePartsRequisitionRecordService { @Autowired private SparePartsRequisitionRecordMapper sparePartsRequisitionRecordMapper; @Override public IPage<SparePartsRequisitionRecordDto> listPage(Page page, SparePartsRequisitionRecordDto sparePartsRequisitionRecordDto) { IPage<SparePartsRequisitionRecordDto> result = sparePartsRequisitionRecordMapper.listPage(page, sparePartsRequisitionRecordDto); // å¤çæ¥æºç±»åææ¬ result.getRecords().forEach(record -> { if (record.getSourceType() != null) { record.setSourceText(SparePartsRequisitionRecordSourceTypeEnum.getByCode(record.getSourceType()).getValue()); } }); return result; } } src/main/java/com/ruoyi/project/system/mapper/SysRoleMapper.java
@@ -1,6 +1,8 @@ package com.ruoyi.project.system.mapper; import java.util.List; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.project.system.domain.SysRole; /** src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -479,6 +479,8 @@ .eq(ShippingInfo::getSalesLedgerProductId, product.getId()) .orderByDesc(ShippingInfo::getCreateTime) .last("limit 1")); product.setShippingCarNumber(shippingInfo.getShippingCarNumber()); product.setShippingDate(shippingInfo.getShippingDate()); if (shippingInfo != null) { product.setShippingStatus(shippingInfo.getStatus()); } src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
@@ -1,6 +1,7 @@ package com.ruoyi.staff.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; @@ -13,6 +14,7 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import com.ruoyi.staff.dto.StaffOnJobExcelDto; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; @@ -105,6 +107,13 @@ return AjaxResult.success(staffOnJobService.renewContract(id, staffContract)); } @ApiOperation("ä¸è½½æ¨¡æ¿") @PostMapping("/downloadTemplate") public void downloadTemplate(HttpServletResponse response) { ExcelUtil<StaffOnJobExcelDto> util = new ExcelUtil<>(StaffOnJobExcelDto.class); util.importTemplateExcel(response, "å¨èå工模æ¿"); } /** * å¨èåå·¥å¯¼å ¥ */ src/main/java/com/ruoyi/staff/dto/StaffOnJobExcelDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,87 @@ package com.ruoyi.staff.dto; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.framework.aspectj.lang.annotation.Excel; import com.ruoyi.staff.pojo.StaffEducation; import com.ruoyi.staff.pojo.StaffEmergencyContact; import com.ruoyi.staff.pojo.StaffWorkExperience; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.Date; import java.util.List; @Data public class StaffOnJobExcelDto { /** * ç¶æ(0:离è;1:å¨è) */ private Integer staffState = 1; /** * åå·¥ç¼å· */ @Excel(name = "åå·¥ç¼å·", cellType = Excel.ColumnType.STRING, sort = 2,prompt = "ç¨æ·ç»å½å") private String staffNo; /** * åå·¥å§å */ @Excel(name = "åå·¥å§å", sort = 3,prompt = "ç¨æ·æµç§°") private String staffName; /** * æ§å« */ @Excel(name = "æ§å«", sort = 4) private String sex; /** * é¨é¨åç§° */ @Excel(name = "é¨é¨åç§°", sort = 5,prompt = "请åå¾ç³»ç»æ¥çæåªäºé¨é¨å¯ä»¥ç»å®ï¼ä¸¥æ ¼æç §é¨é¨åç§°ç»å®") private String sysDeptName; /** * è§è² */ @Excel(name = "è§è²", sort = 6,prompt = "请åå¾ç³»ç»æ¥çæåªäºè§è²å¯ä»¥ç»å®ï¼ä¸¥æ ¼æç §è§è²åç§°ç»å®") private String roleName; /** * ææº */ @Excel(name = "ææº", sort = 13) private String phone; @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "ååå¼å§æ¶é´") @Excel(name = "ååå¼å§æ¥æ", width = 30, dateFormat = "yyyy-MM-dd", sort = 15) private Date contractStartTime; @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @ApiModelProperty(value = "ååç»ææ¶é´") @Excel(name = "ååç»ææ¥æ", width = 30, dateFormat = "yyyy-MM-dd", sort = 16) private Date contractEndTime; @ApiModelProperty(value = "ååæé") @Excel(name = "ååæé", sort = 17) private String contractTerm; @ApiModelProperty(value = "åºçæ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @Excel(name = "åºçæ¥æ", width = 30, dateFormat = "yyyy-MM-dd", sort = 18) private Date birthDate; } src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -10,12 +10,17 @@ import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.dto.WordDateDto; import com.ruoyi.project.system.domain.SysDept; import com.ruoyi.project.system.domain.SysPost; import com.ruoyi.project.system.domain.SysRole; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysDeptMapper; import com.ruoyi.project.system.mapper.SysPostMapper; import com.ruoyi.project.system.mapper.SysRoleMapper; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.project.system.service.impl.SysUserServiceImpl; import com.ruoyi.staff.dto.StaffOnJobDto; import com.ruoyi.staff.dto.StaffOnJobExcelDto; import com.ruoyi.staff.mapper.*; import com.ruoyi.staff.pojo.*; import com.ruoyi.staff.service.IStaffOnJobService; @@ -46,6 +51,13 @@ @Autowired private StaffOnJobMapper staffOnJobMapper; @Autowired private SysDeptMapper sysDeptMapper; @Autowired private SysRoleMapper sysRoleMapper; @Autowired private SysPostMapper sysPostMapper; @@ -310,11 +322,38 @@ } @Override @Transactional(rollbackFor = Exception.class) public Boolean importData(MultipartFile file) { try { ExcelUtil<StaffOnJob> util = new ExcelUtil<>(StaffOnJob.class); List<StaffOnJob> staffOnJobs = util.importExcel(file.getInputStream()); return saveOrUpdateBatch(staffOnJobs); ExcelUtil<StaffOnJobExcelDto> util = new ExcelUtil<>(StaffOnJobExcelDto.class); List<StaffOnJobExcelDto> staffOnJobs = util.importExcel(file.getInputStream()); if (CollectionUtils.isEmpty(staffOnJobs)){ return false; } // è·åææé¨é¨æ°æ® List<SysDept> sysDepts = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery().eq(SysDept::getDelFlag, 0)); // è·åææè§è²æ°æ® List<SysRole> sysRoles = sysRoleMapper.selectRoleAll(); staffOnJobs.forEach(staffOnJob -> { StaffOnJobDto staffOnJobDto = new StaffOnJobDto(); BeanUtils.copyProperties(staffOnJob, staffOnJobDto); // éè¿åç§°è·åé¨é¨id staffOnJobDto.setSysDeptId(// ... existing code ... sysDepts.stream() .filter(dept -> dept.getDeptName() != null && dept.getDeptName().equals(staffOnJob.getSysDeptName())) .findFirst() .map(SysDept::getDeptId) .orElse(null) ); // éè¿åç§°è·åè§è²id staffOnJobDto.setRoleId(sysRoles.stream() .filter(role -> role.getRoleName() != null && role.getRoleName().equals(staffOnJob.getRoleName())) .findFirst() .map(SysRole::getRoleId) .orElse( null)); add(staffOnJobDto); }); return true; } catch (Exception e) { e.printStackTrace(); return false; src/main/resources/application-hbtmblc.yml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,256 @@ # 项ç®ç¸å ³é ç½® ruoyi: # åç§° name: RuoYi # çæ¬ version: 3.8.9 # çæå¹´ä»½ copyrightYear: 2025 # æä»¶è·¯å¾ 示ä¾ï¼ Windowsé ç½®D:/ruoyi/uploadPathï¼Linuxé ç½® /home/ruoyi/uploadPathï¼ profile: D:/ruoyi/uploadPath # è·åipå°åå¼å ³ addressEnabled: false # éªè¯ç ç±»å math æ°åè®¡ç® char å符éªè¯ captchaType: math # åå审æ¹ç¼å·åç¼(é ç½®æä»¶åç¼å½å) approvalNumberPrefix: DEV # ä¸ªæ¨ Unipush é ç½® getui: appId: PfjyAAE0FK64FaO1w2CMb1 appKey: zTMb831OEL6J4GK1uE3Ob4 masterSecret: K1GFtsv42v61tXGnF7SGE5 domain: https://restapi.getui.cn/v2/ # 离线æ¨é使ç¨çå å/ç»ä»¶å intentComponent: uni.app.UNI099A590/io.dcloud.PandoraEntry # å¼åç¯å¢é ç½® server: # æå¡å¨çHTTP端å£ï¼é»è®¤ä¸º8080 port: 7003 servlet: # åºç¨ç访é®è·¯å¾ context-path: / tomcat: # tomcatçURIç¼ç uri-encoding: UTF-8 # è¿æ¥æ°æ»¡åçæéæ°ï¼é»è®¤ä¸º100 accept-count: 1000 threads: # tomcatæå¤§çº¿ç¨æ°ï¼é»è®¤ä¸º200 max: 800 # Tomcatå¯å¨åå§åççº¿ç¨æ°ï¼é»è®¤å¼10 min-spare: 100 # æ¥å¿é ç½® logging: level: org.quartz: DEBUG com.ruoyi: warn org.springframework: warn minio: endpoint: http://114.132.189.42/ port: 7019 secure: false accessKey: admin secretKey: 12345678 preview-expiry: 24 # é¢è§å°åé»è®¤24å°æ¶ default-bucket: uploadPath # ç¨æ·é ç½® user: password: # å¯ç æå¤§éè¯¯æ¬¡æ° maxRetryCount: 5 # å¯ç é宿¶é´ï¼é»è®¤10åéï¼ lockTime: 10 # Springé ç½® spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driverClassName: com.mysql.cj.jdbc.Driver druid: # ä¸»åºæ°æ®æº master: url: jdbc:mysql://172.17.0.1:9006/product-inventory-management-hbtmblc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: xd@123456.. # ä»åºæ°æ®æº slave: # 仿°æ®æºå¼å ³/é»è®¤å ³é enabled: false url: username: password: # åå§è¿æ¥æ° initialSize: 5 # æå°è¿æ¥æ± æ°é minIdle: 10 # æå¤§è¿æ¥æ± æ°é maxActive: 20 # é ç½®è·åè¿æ¥çå¾ è¶ æ¶çæ¶é´ maxWait: 60000 # é ç½®è¿æ¥è¶ æ¶æ¶é´ connectTimeout: 30000 # é ç½®ç½ç»è¶ æ¶æ¶é´ socketTimeout: 60000 # é ç½®é´éå¤ä¹ æè¿è¡ä¸æ¬¡æ£æµï¼æ£æµéè¦å ³éç空é²è¿æ¥ï¼å使¯æ¯«ç§ timeBetweenEvictionRunsMillis: 60000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿å°çåçæ¶é´ï¼å使¯æ¯«ç§ minEvictableIdleTimeMillis: 300000 # é ç½®ä¸ä¸ªè¿æ¥å¨æ± 䏿大çåçæ¶é´ï¼å使¯æ¯«ç§ maxEvictableIdleTimeMillis: 900000 # é ç½®æ£æµè¿æ¥æ¯å¦ææ validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false webStatFilter: enabled: true statViewServlet: enabled: true # 设置ç½ååï¼ä¸å¡«åå 许ææè®¿é® allow: url-pattern: /druid/* # æ§å¶å°ç®¡çç¨æ·ååå¯ç login-username: ruoyi login-password: 123456 filter: stat: enabled: true # æ ¢SQLè®°å½ log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true # èµæºä¿¡æ¯ messages: # å½é åèµæºæä»¶è·¯å¾ basename: i18n/messages # æä»¶ä¸ä¼ servlet: multipart: # å个æä»¶å¤§å° max-file-size: 1GB # 设置æ»ä¸ä¼ çæä»¶å¤§å° max-request-size: 2GB # æå¡æ¨¡å devtools: restart: # çé¨ç½²å¼å ³ enabled: false # redis é ç½® redis: # å°å # host: 127.0.0.1 host: 172.17.0.1 # 端å£ï¼é»è®¤ä¸º6379 port: 6380 # æ°æ®åºç´¢å¼ database: 8 # å¯ç # password: root2022! password: # è¿æ¥è¶ æ¶æ¶é´ timeout: 10s lettuce: pool: # è¿æ¥æ± ä¸çæå°ç©ºé²è¿æ¥ min-idle: 0 # è¿æ¥æ± ä¸çæå¤§ç©ºé²è¿æ¥ max-idle: 8 # è¿æ¥æ± çæå¤§æ°æ®åºè¿æ¥æ° max-active: 8 # #è¿æ¥æ± æå¤§é»å¡çå¾ æ¶é´ï¼ä½¿ç¨è´å¼è¡¨ç¤ºæ²¡æéå¶ï¼ max-wait: -1ms # Quartz宿¶ä»»å¡é ç½®ï¼æ°å¢é¨åï¼ quartz: job-store-type: jdbc # ä½¿ç¨æ°æ®åºåå¨ jdbc: initialize-schema: never # 馿¬¡è¿è¡æ¶èªå¨åå»ºè¡¨ç»æï¼æååæ¹ä¸ºnever schema: classpath:org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql # MySQLè¡¨ç»æèæ¬ properties: org: quartz: scheduler: instanceName: RuoYiScheduler instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate # MySQLéé tablePrefix: qrtz_ # 表ååç¼ï¼ä¸èæ¬ä¸è´ isClustered: false # åèç¹æ¨¡å¼ï¼éç¾¤éæ¹ä¸ºtrueï¼ clusterCheckinInterval: 10000 txIsolationLevelSerializable: true threadPool: class: org.quartz.simpl.SimpleThreadPool threadCount: 10 # çº¿ç¨æ± å¤§å° threadPriority: 5 makeThreadsDaemons: true updateCheck: false # å ³éçæ¬æ£æ¥ # tokené ç½® token: # 令çèªå®ä¹æ è¯ header: Authorization # 令çå¯é¥ secret: abcdefghijklmnopqrstuvwxyz # ä»¤çæææï¼é»è®¤30åéï¼ expireTime: 450 # MyBatis Plusé ç½® mybatis-plus: # æç´¢æå®å å«å æ ¹æ®èªå·±çé¡¹ç®æ¥ typeAliasesPackage: com.ruoyi.**.pojo # é ç½®mapperçæ«æï¼æ¾å°ææçmapper.xmlæ å°æä»¶ mapperLocations: classpath*:mapper/**/*Mapper.xml # å è½½å ¨å±çé ç½®æä»¶ configLocation: classpath:mybatis/mybatis-config.xml global-config: enable-sql-runner: true db-config: id-type: auto # PageHelperå页æä»¶ pagehelper: helperDialect: mysql supportMethodsArguments: true params: count=countSql # Swaggeré ç½® swagger: # æ¯å¦å¼å¯swagger enabled: true # 请æ±åç¼ pathMapping: /dev-api # 鲿¢XSSæ»å» xss: # è¿æ»¤å¼å ³ enabled: true # æé¤é¾æ¥ï¼å¤ä¸ªç¨éå·åéï¼ excludes: /system/notice # å¹é 龿¥ urlPatterns: /system/*,/monitor/*,/tool/* # 代ç çæ gen: # ä½è author: ruoyi # é»è®¤çæå è·¯å¾ system éæ¹æèªå·±ç模ååç§° å¦ system monitor tool packageName: com.ruoyi.project.system # èªå¨å»é¤è¡¨åç¼ï¼é»è®¤æ¯true autoRemovePre: false # 表åç¼ï¼çæç±»åä¸ä¼å å«è¡¨åç¼ï¼å¤ä¸ªç¨éå·åéï¼ tablePrefix: sys_ # æ¯å¦å è®¸çææä»¶è¦çå°æ¬å°ï¼èªå®ä¹è·¯å¾ï¼ï¼é»è®¤ä¸å 许 allowOverwrite: false file: temp-dir: D:/ruoyi/temp/uploads # 临æ¶ç®å½ upload-dir: D:/ruoyi/prod/uploads # æ£å¼ç®å½ src/main/resources/mapper/account/AccountExpenseMapper.xml
@@ -10,6 +10,12 @@ <if test="accountExpense.entryDateStart != null and accountExpense.entryDateStart != '' "> AND expense_date >= DATE_FORMAT(#{accountExpense.entryDateStart},'%Y-%m-%d') </if> <if test=" accountExpense.supplierName != null and accountExpense.supplierName != ''"> AND supplier_name like CONCAT('%',#{accountExpense.supplierName},'%') </if> <if test=" accountExpense.invoiceNumber != null and accountExpense.invoiceNumber != ''"> AND invoice_number like CONCAT('%',#{accountExpense.invoiceNumber},'%') </if> <if test="accountExpense.entryDateEnd != null and accountExpense.entryDateEnd != '' "> AND expense_date <= DATE_FORMAT(#{accountExpense.entryDateEnd},'%Y-%m-%d') </if> src/main/resources/mapper/account/AccountIncomeMapper.xml
@@ -11,6 +11,13 @@ <if test="accountIncome.entryDateStart != null and accountIncome.entryDateStart != '' "> AND income_date >= DATE_FORMAT(#{accountIncome.entryDateStart},'%Y-%m-%d') </if> <if test="accountIncome.customerName != null and accountIncome.customerName != '' "> AND customer_name like CONCAT('%',#{accountIncome.customerName},'%') </if> <if test="accountIncome.invoiceNumber != null and accountIncome.invoiceNumber != '' "> AND invoice_number like CONCAT('%',#{accountIncome.invoiceNumber},'%') </if> <if test="accountIncome.entryDateEnd != null and accountIncome.entryDateEnd != '' "> AND income_date <= DATE_FORMAT(#{accountIncome.entryDateEnd},'%Y-%m-%d') </if> src/main/resources/mapper/measuringinstrumentledger/SparePartsRequisitionRecordMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,36 @@ <?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.measuringinstrumentledger.mapper.SparePartsRequisitionRecordMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.measuringinstrumentledger.pojo.SparePartsRequisitionRecord"> <id column="id" property="id" /> <result column="source_type" property="sourceType" /> <result column="source_id" property="sourceId" /> <result column="device_ledger_id" property="deviceLedgerId" /> <result column="spare_parts_id" property="sparePartsId" /> <result column="quantity" property="quantity" /> <result column="create_user" property="createUser" /> <result column="tenant_id" property="tenantId" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> </resultMap> <select id="listPage" resultType="com.ruoyi.measuringinstrumentledger.dto.SparePartsRequisitionRecordDto"> select sprr.*,sp.name as sparePartsName, dl.device_name as deviceName, su.nick_name as operator from spare_parts_requisition_record sprr left join spare_parts sp on sp.id = sprr.spare_parts_id left join device_ledger dl on dl.id = sprr.device_ledger_id left join sys_user su on su.user_id = sprr.create_user <where> <if test="params.sparePartsName != null and params.sparePartsName != ''"> and sp.name like concat('%',#{params.sparePartsName},'%') </if> <if test="params.sourceType != null and params.sourceType != ''"> and sprr.source_type = #{params.sourceType} </if> </where> </select> </mapper> src/main/resources/mapper/system/SysRoleMapper.xml
@@ -62,6 +62,7 @@ <select id="selectRoleAll" resultMap="SysRoleResult"> <include refid="selectRoleVo"/> WHERE r.del_flag = '0' </select> <select id="selectRoleListByUserId" parameterType="Long" resultType="Long">