src/main/java/com/ruoyi/CodeGenerator.java
@@ -19,11 +19,11 @@ // æ¼ç¤ºä¾åï¼æ§è¡ main æ¹æ³æ§å¶å°è¾å ¥æ¨¡å表åå车èªå¨çæå¯¹åºé¡¹ç®ç®å½ä¸ public class CodeGenerator { public static String database_url = "jdbc:mysql://127.0.0.1:3306/product-inventory-management-new"; public static String database_url = "jdbc:mysql://127.0.0.1:3306/product-inventory-management-hsxnynew"; public static String database_username = "root"; public static String database_password= "123456"; public static String author = "è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸"; public static String model = "account"; // 模å public static String model = "approve"; // 模å public static String setParent = "com.ruoyi."+ model; // å è·¯å¾ public static String tablePrefix = ""; // è®¾ç½®è¿æ»¤è¡¨åç¼ public static void main(String[] args) { src/main/java/com/ruoyi/approve/controller/CarInfoController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,76 @@ package com.ruoyi.approve.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.mapper.CarInfoMapper; import com.ruoyi.approve.pojo.CarInfo; import com.ruoyi.approve.pojo.CarInfoRecord; import com.ruoyi.approve.service.CarInfoRecordService; import com.ruoyi.approve.service.CarInfoService; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.List; /** * <p> * 车俩管ç å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ @RestController @RequestMapping("/carInfo") @Api(tags = "车俩管ç") public class CarInfoController { @Autowired private CarInfoService carInfoService; @Autowired private CarInfoRecordService carInfoRecordService; @ApiOperation("å页æ¥è¯¢è½¦ä¿©ç®¡ç") @GetMapping("/listPage") public AjaxResult listPage(Page page, CarInfo carInfo) { return AjaxResult.success(carInfoService.listPage(page,carInfo)); } @ApiOperation("æ°å¢è½¦ä¿©ç®¡ç") @PostMapping("/add") @Log(title = "车俩管ç", businessType = BusinessType.INSERT) @Transactional(rollbackFor = Exception.class) public AjaxResult add(@RequestBody CarInfo carInfo) { return carInfoService.save(carInfo) ? AjaxResult.success("æ°å¢æå") : AjaxResult.error("æ°å¢å¤±è´¥"); } @ApiOperation("ä¿®æ¹è½¦ä¿©ç®¡ç") @PostMapping("/update") @Log(title = "车俩管ç", businessType = BusinessType.UPDATE) @Transactional(rollbackFor = Exception.class) public AjaxResult update(@RequestBody CarInfo carInfo) { return carInfoService.updateById(carInfo) ? AjaxResult.success("ä¿®æ¹æå") : AjaxResult.error("ä¿®æ¹å¤±è´¥"); } @ApiOperation("å é¤è½¦ä¿©ç®¡ç") @DeleteMapping("/delete") @Log(title = "车俩管ç", businessType = BusinessType.DELETE) @Transactional(rollbackFor = Exception.class) public AjaxResult delete(@RequestBody List<Long> ids) { if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("è¯·éæ©è³å°ä¸æ¡æ°æ®"); carInfoService.removeByIds(ids); carInfoRecordService.remove(new LambdaQueryWrapper<CarInfoRecord>().in(CarInfoRecord::getCarInfoId,ids)); return AjaxResult.success("å 餿å"); } } src/main/java/com/ruoyi/approve/controller/CarInfoRecordController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,74 @@ package com.ruoyi.approve.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.mapper.CarInfoMapper; import com.ruoyi.approve.pojo.CarInfo; import com.ruoyi.approve.pojo.CarInfoRecord; import com.ruoyi.approve.service.CarInfoRecordService; import com.ruoyi.approve.service.impl.CarInfoServiceImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.AjaxResult; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.List; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ @RestController @RequestMapping("/carInfoRecord") @Api(tags = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼") public class CarInfoRecordController { @Autowired private CarInfoRecordService carInfoRecordService; @Autowired private CarInfoServiceImpl carInfoService; @GetMapping("/list") @ApiOperation("æ¥è¯¢") public AjaxResult list(Page page, CarInfoRecord carInfoRecord) { return carInfoRecordService.getList(page,carInfoRecord); } @PostMapping("/add") @ApiOperation("ç¨è½¦") @Log(title = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼", businessType = BusinessType.INSERT) @Transactional(rollbackFor = Exception.class) public AjaxResult add(@RequestBody CarInfoRecord carInfoRecord) { carInfoService.updateUsageStatus(carInfoRecord.getCarInfoId(),"使ç¨ä¸"); return AjaxResult.success(carInfoRecordService.save(carInfoRecord)); } @PostMapping("/update") @ApiOperation("ä¿®æ¹") @Log(title = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼", businessType = BusinessType.UPDATE) public AjaxResult update(@RequestBody CarInfoRecord carInfoRecord) { if(StringUtils.isNotEmpty(carInfoRecord.getUsageStatus())){ carInfoService.updateUsageStatus(carInfoRecord.getCarInfoId(),"空é²"); } return AjaxResult.success(carInfoRecordService.updateById(carInfoRecord)); } @DeleteMapping("/delete") @ApiOperation("å é¤") @Log(title = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼", businessType = BusinessType.DELETE) public AjaxResult delete(@RequestBody List<Long> ids) { return AjaxResult.success(carInfoRecordService.removeBatchByIds(ids)); } } src/main/java/com/ruoyi/approve/mapper/CarInfoMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.approve.mapper; import com.ruoyi.approve.pojo.CarInfo; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; /** * <p> * 车俩管ç Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ @Mapper public interface CarInfoMapper extends BaseMapper<CarInfo> { } src/main/java/com/ruoyi/approve/mapper/CarInfoRecordMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.approve.mapper; import com.ruoyi.approve.pojo.CarInfoRecord; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ @Mapper public interface CarInfoRecordMapper extends BaseMapper<CarInfoRecord> { } src/main/java/com/ruoyi/approve/pojo/CarInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,81 @@ package com.ruoyi.approve.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; 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; /** * <p> * 车俩管ç * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ @Getter @Setter @TableName("car_info") @ApiModel(value = "CarInfo对象", description = "车俩管ç") public class CarInfo implements Serializable { @TableField(exist = false) @ApiModelProperty("å½å使ç¨äºº") private String currentUserName; @TableField(exist = false) @ApiModelProperty("车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼id") private Long carInfoRecordId; @TableField(exist = false) @ApiModelProperty("表æ¾éç¨") private String odometerMileage; private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("车çå·") private String carNo; @ApiModelProperty("é¢è²") private String color; @ApiModelProperty("åç") private String brand; @ApiModelProperty("使ç¨ç¶æ") private String usageStatus; @ApiModelProperty("夿³¨") private String remark; @ApiModelProperty("å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime createTime; @ApiModelProperty("å建人") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty("ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("ä¿®æ¹äºº") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; } src/main/java/com/ruoyi/approve/pojo/CarInfoRecord.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,86 @@ package com.ruoyi.approve.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; 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; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ @Getter @Setter @TableName("car_info_record") @ApiModel(value = "CarInfoRecord对象", description = "车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼") public class CarInfoRecord implements Serializable { @ApiModelProperty("使ç¨ç¶æ") @TableField(exist = false) private String usageStatus; private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("车è¾ç®¡çid") private Long carInfoId; @ApiModelProperty("表ç°éç¨") private String odometerMileage; @ApiModelProperty("æ¬æ¬¡é¢è®¡è¡é©¶éç¨") private String thisTripMileage; @ApiModelProperty("ç®çå°") private String destination; @ApiModelProperty("è¿è½¦æ¥æ") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate carReturnDate; @ApiModelProperty("åè½¦æ¥æ") @DateTimeFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd") private LocalDate carRentalDate; @ApiModelProperty("使ç¨äºº") private String userName; @ApiModelProperty("夿³¨") private String remark; @ApiModelProperty("å建æ¶é´") @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @ApiModelProperty("å建人") @TableField(fill = FieldFill.INSERT) private Integer createUser; @ApiModelProperty("ä¿®æ¹æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @ApiModelProperty("ä¿®æ¹äºº") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; } src/main/java/com/ruoyi/approve/service/CarInfoRecordService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package com.ruoyi.approve.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.pojo.CarInfoRecord; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.framework.web.domain.AjaxResult; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ public interface CarInfoRecordService extends IService<CarInfoRecord> { AjaxResult getList(Page page,CarInfoRecord carInfoRecord); } src/main/java/com/ruoyi/approve/service/CarInfoService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.approve.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.pojo.CarInfo; import com.baomidou.mybatisplus.extension.service.IService; import org.aspectj.weaver.loadtime.Aj; /** * <p> * è½¦ä¿©ç®¡ç æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ public interface CarInfoService extends IService<CarInfo> { IPage<CarInfo> listPage(Page page, CarInfo carInfo); } src/main/java/com/ruoyi/approve/service/impl/CarInfoRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,38 @@ package com.ruoyi.approve.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.approve.pojo.CarInfoRecord; import com.ruoyi.approve.mapper.CarInfoRecordMapper; import com.ruoyi.approve.service.CarInfoRecordService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.framework.web.domain.AjaxResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * 车è¾ç®¡çå表ï¼è¿è½¦è¡¨ï¼ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:01:21 */ @Service public class CarInfoRecordServiceImpl extends ServiceImpl<CarInfoRecordMapper, CarInfoRecord> implements CarInfoRecordService { @Autowired private CarInfoRecordMapper carInfoRecordMapper; @Override public AjaxResult getList(Page page,CarInfoRecord carInfoRecord) { LambdaQueryWrapper<CarInfoRecord> carInfoRecordLambdaQueryWrapper = new LambdaQueryWrapper<>(); if(carInfoRecord != null){ if(carInfoRecord.getCarInfoId() != null){ carInfoRecordLambdaQueryWrapper.eq(CarInfoRecord::getCarInfoId, carInfoRecord.getCarInfoId()); } } carInfoRecordLambdaQueryWrapper.orderByDesc(CarInfoRecord::getCreateTime); return AjaxResult.success(carInfoRecordMapper.selectPage(page,carInfoRecordLambdaQueryWrapper)); } } src/main/java/com/ruoyi/approve/service/impl/CarInfoServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,86 @@ package com.ruoyi.approve.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.ruoyi.approve.mapper.CarInfoRecordMapper; import com.ruoyi.approve.pojo.CarInfo; import com.ruoyi.approve.mapper.CarInfoMapper; import com.ruoyi.approve.pojo.CarInfoRecord; import com.ruoyi.approve.service.CarInfoService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.web.domain.AjaxResult; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * <p> * è½¦ä¿©ç®¡ç æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-21 03:00:32 */ @Service @Slf4j public class CarInfoServiceImpl extends ServiceImpl<CarInfoMapper, CarInfo> implements CarInfoService { @Autowired private CarInfoMapper carInfoMapper; @Autowired private CarInfoRecordMapper carInfoRecordMapper; /** * æ¹å车è¾ä½¿ç¨ç¶æ * @param id */ public void updateUsageStatus(Long id, String usageStatus) { CarInfo carInfo = carInfoMapper.selectOne(new LambdaQueryWrapper<CarInfo>() .eq(CarInfo::getId, id) .last("limit 1")); if(carInfo == null) throw new RuntimeException("车è¾ä¸åå¨"); if("使ç¨ä¸".equals(usageStatus) && "使ç¨ä¸".equals(carInfo.getUsageStatus())) throw new RuntimeException("车è¾å·²ä½¿ç¨ä¸"); carInfo.setUsageStatus(usageStatus); carInfoMapper.updateById(carInfo); } @Override public IPage<CarInfo> listPage(Page page, CarInfo carInfo) { LambdaQueryWrapper<CarInfo> carInfoLambdaQueryWrapper = new LambdaQueryWrapper<>(); if(carInfo != null){ if(StringUtils.isNotEmpty(carInfo.getCarNo())){ carInfoLambdaQueryWrapper.like(CarInfo::getCarNo,carInfo.getCarNo()); } if(StringUtils.isNotEmpty(carInfo.getBrand())){ carInfoLambdaQueryWrapper.like(CarInfo::getBrand,carInfo.getBrand()); } if(StringUtils.isNotEmpty(carInfo.getColor())){ carInfoLambdaQueryWrapper.like(CarInfo::getColor,carInfo.getColor()); } if(StringUtils.isNotEmpty(carInfo.getUsageStatus())){ carInfoLambdaQueryWrapper.like(CarInfo::getUsageStatus,carInfo.getUsageStatus()); } } carInfoLambdaQueryWrapper.orderByDesc(CarInfo::getCreateTime); Page<CarInfo> page1 = carInfoMapper.selectPage(page, carInfoLambdaQueryWrapper); for (CarInfo record : page1.getRecords()) { // å½å使ç¨äººï¼è¡¨æ¾éç¨ CarInfoRecord carInfoRecord = carInfoRecordMapper.selectOne(new LambdaQueryWrapper<CarInfoRecord>() .eq(CarInfoRecord::getCarInfoId, record.getId()) .orderByDesc(CarInfoRecord::getCreateTime) .last("limit 1")); if(carInfoRecord != null){ record.setCarInfoRecordId(carInfoRecord.getId()); record.setOdometerMileage(carInfoRecord.getOdometerMileage()); if("使ç¨ä¸".equals(record.getUsageStatus())){ record.setCurrentUserName(carInfoRecord.getUserName()); } } } return page1; } } src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
@@ -27,6 +27,11 @@ private String salesContractNo; /** * éè´ååå· */ private String purchaseContractNumber; /** * 客æ·ååå· */ private String customerContractNo; src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -775,7 +775,7 @@ .type(procurementDto.getType()) .warnNum(detail.getWarnNum()) .unitPrice(detail.getUnitPrice()) .totalPrice(detail.getInboundQuantity().multiply(detail.getUnitPrice())) // .totalPrice(detail.getInboundQuantity().multiply(detail.getUnitPrice())) .createTime(LocalDateTime.now()) .createUser(loginUser.getUserId()) .updateTime(LocalDateTime.now()) @@ -784,15 +784,6 @@ .productModelId(detail.getProductModelId()) .qualityInspectId(ObjectUtils.isNotNull(procurementDto.getQualityInspectId())?procurementDto.getQualityInspectId():0L); this.save(procurementRecordBuilder.build()); // å ¥åºæååæéè´æ°é // LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>(); // salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, detail.getId()); // SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductLambdaQueryWrapper); // if(salesLedgerProduct == null){ // throw new RuntimeException("æªæ¾å°è¯¥åå"); // } // salesLedgerProduct.setQuantity(salesLedgerProduct.getQuantity().subtract(detail.getInboundQuantity())); // salesLedgerProductMapper.updateById(salesLedgerProduct); } return 1; } src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -15,6 +15,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; @@ -38,6 +39,18 @@ return R.ok(1); } @ApiOperation("å é¤ç产订å") @DeleteMapping("/delete") @Transactional(rollbackFor = Exception.class) public R delete(@RequestBody List<Long> ids) { // æ¹éå é¤äº§åå表 if (!ids.isEmpty()) { salesLedgerProductService.removeByIds(ids); } salesLedgerProductService.deleteProductionData(ids); return R.ok(1); } @ApiOperation("å页æ¥è¯¢") @GetMapping("page") src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -13,15 +13,15 @@ public class ProductOrderDto extends ProductOrder { @ApiModelProperty(value = "éå®ååå·") @Excel(name = "éå®ååå·") // @Excel(name = "éå®ååå·") private String salesContractNo; @ApiModelProperty(value = "项ç®å") @Excel(name = "项ç®å") // @Excel(name = "项ç®å") private String projectName; @ApiModelProperty(value = "客æ·åç§°") @Excel(name = "客æ·åç§°") // @Excel(name = "客æ·åç§°") private String customerName; @ApiModelProperty(value = "产ååç§°") src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -15,8 +16,13 @@ import com.ruoyi.basic.pojo.ProductModel; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.procurementrecord.dto.Details; import com.ruoyi.procurementrecord.dto.ProcurementAddDto; import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper; import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper; import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut; import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage; import com.ruoyi.procurementrecord.service.ProcurementRecordService; import com.ruoyi.procurementrecord.utils.StockUtils; import com.ruoyi.production.controller.ProductWorkOrderController; import com.ruoyi.production.dto.ProductStructureDto; @@ -28,6 +34,8 @@ import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.quality.mapper.*; import com.ruoyi.quality.pojo.*; import com.ruoyi.sales.mapper.SalesLedgerProductMapper; import com.ruoyi.sales.pojo.SalesLedgerProduct; import io.swagger.models.auth.In; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; @@ -40,9 +48,11 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @Service @AllArgsConstructor @@ -50,6 +60,7 @@ public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService { private final ProcurementRecordOutMapper procurementRecordOutMapper; private ProcurementRecordMapper procurementRecordMapper; private ProductionProductMainMapper productionProductMainMapper; private ProductWorkOrderController productWorkOrderController; @@ -62,6 +73,11 @@ private ProductionProductOutputMapper productionProductOutputMapper; private ProcessRouteItemMapper processRouteItemMapper; private SalesLedgerProductMapper salesLedgerProductMapper; private ProcurementRecordService procurementRecordService; private ProductModelMapper productModelMapper; @@ -155,6 +171,7 @@ for (ProductStructureDto productStructureDto : productStructureDtos) { ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId()); Product product = productMapper.selectById(productModel1.getProductId()); // æ¥è¯¢äº§ååºå BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity"); if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) { throw new RuntimeException(product.getProductName()+"产åç"+productModel1.getModel() + "çè§æ ¼åºå为0"); @@ -162,6 +179,11 @@ if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) { throw new RuntimeException(product.getProductName()+"产åç"+productModel1.getModel() + "çè§æ ¼åºåä¸è¶³"); } // æ¥è¯¢éè´äº§å List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>() .eq(SalesLedgerProduct::getProductModelId, productStructureDto.getProductModelId()) .eq(SalesLedgerProduct::getType, 2)); ProductionProductInput productionProductInput = new ProductionProductInput(); productionProductInput.setProductModelId(productStructureDto.getProductModelId()); productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())); @@ -172,16 +194,49 @@ LocalDate now = LocalDate.now(); ProcurementRecordOut procurementRecordOut1 = procurementRecordOutMapper.selectCode(dateFormat.format(now)); Long aLong = procurementRecordOut1 == null ? 1L : Long.valueOf(procurementRecordOut1.getCode().split("LS" + dateFormat.format(now))[1]); ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder() .procurementRecordStorageId(0) .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1)) .salesLedgerProductId(productionProductMain.getId())//å ³èæ¥å·¥äº§åº .inboundBatches(aLong.equals(0L) ? "第1æ¹æ¬¡" : "第" + (aLong + 1) + "æ¹æ¬¡") .inboundNum(productionProductInput.getQuantity()) .type(4) .createBy(user.getNickName()) .productModelId(productModel1.getId()); procurementRecordOutMapper.insert(procurementRecordOut.build()); // æ¥è¯¢éè´å ¥åºè®°å½ List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(new LambdaQueryWrapper<ProcurementRecordStorage>() .in(ProcurementRecordStorage::getSalesLedgerProductId, salesLedgerProducts.stream() .map(SalesLedgerProduct::getId) .collect(Collectors.toList())) .orderByDesc(ProcurementRecordStorage::getInboundNum)); if(CollectionUtils.isNotEmpty(procurementRecordStorages)) { // ç产æ£é¤éè´åºååæ BigDecimal quantity = productionProductInput.getQuantity(); int i = 0; while (quantity.compareTo(BigDecimal.ZERO) > 0){ ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder() .procurementRecordStorageId(procurementRecordStorages.get(i).getId()) .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1)) .salesLedgerProductId(productionProductMain.getId())//å ³èæ¥å·¥äº§åº .inboundBatches(aLong.equals(0L) ? "第1æ¹æ¬¡" : "第" + (aLong + 1) + "æ¹æ¬¡") .type(1) .createBy(user.getNickName()) .productModelId(productModel1.getId()); if(quantity.compareTo(procurementRecordStorages.get(i).getInboundNum()) >= 0){ // 䏿æ°é大äºçäºéè´å ¥åºæ°éï¼ååºåºæ°é为éè´å ¥åºæ°éï¼å¹¶ç»§ç»åºåºä¸ä¸æ¡è®°å½ procurementRecordOut.inboundNum(procurementRecordStorages.get(i).getInboundNum()); quantity = quantity.subtract(procurementRecordStorages.get(i).getInboundNum()); }else{ procurementRecordOut.inboundNum(quantity); quantity = BigDecimal.ZERO; } procurementRecordOutMapper.insert(procurementRecordOut.build()); i++; } }else{ ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder() .procurementRecordStorageId(0) .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1)) .salesLedgerProductId(productionProductMain.getId())//å ³èæ¥å·¥äº§åº .inboundBatches(aLong.equals(0L) ? "第1æ¹æ¬¡" : "第" + (aLong + 1) + "æ¹æ¬¡") .inboundNum(productionProductInput.getQuantity()) .type(4) .createBy(user.getNickName()) .productModelId(productModel1.getId()); procurementRecordOutMapper.insert(procurementRecordOut.build()); } } /*æ°å¢æ¥å·¥äº§åºè¡¨*/ ProductionProductOutput productionProductOutput = new ProductionProductOutput(); @@ -191,38 +246,53 @@ productionProductOutputMapper.insert(productionProductOutput); //对åºçè¿ç¨æ£æè åºåæ£ List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId())); int inspectType = 1; if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){ //æåä¸éå·¥åºçæåºåæ£ inspectType = 2; } Product product = productMapper.selectById(productModel.getProductId()); QualityInspect qualityInspect = new QualityInspect(); qualityInspect.setProductId(product.getId()); qualityInspect.setProductName(product.getProductName()); qualityInspect.setModel(productModel.getModel()); qualityInspect.setUnit(productModel.getUnit()); qualityInspect.setQuantity(dto.getQuantity()); qualityInspect.setProcess(productProcess.getName()); qualityInspect.setInspectState(0); qualityInspect.setInspectType(inspectType); qualityInspect.setProductMainId(productionProductMain.getId()); qualityInspect.setProductModelId(productModel.getId()); qualityInspectMapper.insert(qualityInspect); List<QualityTestStandardBinding> qualityTestStandardBindings = qualityTestStandardBindingMapper.selectList( new LambdaQueryWrapper<QualityTestStandardBinding>() .eq(QualityTestStandardBinding::getProductId, product.getId())); if (qualityTestStandardBindings.size()>0){ qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery() .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandardBindings.get(0).getTestStandardId())) .forEach(qualityTestStandardParam -> { QualityInspectParam param = new QualityInspectParam(); BeanUtils.copyProperties(qualityTestStandardParam, param); param.setId(null); param.setInspectId(qualityInspect.getId()); qualityInspectParamMapper.insert(param); }); } // if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){ // //æåä¸éå·¥åºçæåºåæ£ // Product product = productMapper.selectById(productModel.getProductId()); // QualityInspect qualityInspect = new QualityInspect(); // qualityInspect.setProductId(product.getId()); // qualityInspect.setProductName(product.getProductName()); // qualityInspect.setModel(productModel.getModel()); // qualityInspect.setUnit(productModel.getUnit()); // qualityInspect.setQuantity(dto.getQuantity()); // qualityInspect.setProcess(productProcess.getName()); // qualityInspect.setInspectState(0); // qualityInspect.setInspectType(2); // 廿èªå¨è¿å ¥è¿ç¨æ£éªé»è¾ // qualityInspect.setProductMainId(productionProductMain.getId()); // qualityInspect.setProductModelId(productModel.getId()); // qualityInspectMapper.insert(qualityInspect); // List<QualityTestStandardBinding> qualityTestStandardBindings = qualityTestStandardBindingMapper.selectList( // new LambdaQueryWrapper<QualityTestStandardBinding>() // .eq(QualityTestStandardBinding::getProductId, product.getId())); // if (qualityTestStandardBindings.size()>0){ // qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery() // .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandardBindings.get(0).getTestStandardId())) // .forEach(qualityTestStandardParam -> { // QualityInspectParam param = new QualityInspectParam(); // BeanUtils.copyProperties(qualityTestStandardParam, param); // param.setId(null); // param.setInspectId(qualityInspect.getId()); // qualityInspectParamMapper.insert(param); // }); // } // } ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setTypeName("ç产åºåæ£éªåæ ¼å ¥åº"); procurementRecordOutAdd.setNickName(SecurityUtils.getLoginUser().getNickName()); List<Details> details = new ArrayList<>(); Details details1 = new Details(); details1.setInboundQuantity(dto.getQuantity()); // details1.setId(Math.toIntExact(salesLedgerProduct.getId())); // details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); // details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); // details1.setProductModelId(salesLedgerProduct.getProductModelId()); details.add(details1); procurementRecordOutAdd.setDetails(details); // procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); procurementRecordService.add(procurementRecordOutAdd); /*æ´æ°å·¥ååç产订å*/ ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId()); productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(dto.getQuantity())); src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -158,22 +158,22 @@ }else if (qualityInspect.getInspectType() == 2) { //æ¥è¯¢UnitPrice/TotalPrice SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId()); ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); procurementRecordOutAdd.setType(2); procurementRecordOutAdd.setTypeName("ç产åºåæ£éªåæ ¼å ¥åº"); procurementRecordOutAdd.setNickName(loginUser.getNickName()); List<Details> details = new ArrayList<>(); Details details1 = new Details(); details1.setInboundQuantity(qualityInspect.getQuantity()); details1.setId(Math.toIntExact(salesLedgerProduct.getId())); details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); details1.setProductModelId(salesLedgerProduct.getProductModelId()); details.add(details1); procurementRecordOutAdd.setDetails(details); procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); procurementRecordService.add(procurementRecordOutAdd); // SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId()); // ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto(); // procurementRecordOutAdd.setType(2); // procurementRecordOutAdd.setTypeName("ç产åºåæ£éªåæ ¼å ¥åº"); // procurementRecordOutAdd.setNickName(loginUser.getNickName()); // List<Details> details = new ArrayList<>(); // Details details1 = new Details(); // details1.setInboundQuantity(qualityInspect.getQuantity()); // details1.setId(Math.toIntExact(salesLedgerProduct.getId())); // details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice()); // details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice()); // details1.setProductModelId(salesLedgerProduct.getProductModelId()); // details.add(details1); // procurementRecordOutAdd.setDetails(details); // procurementRecordOutAdd.setQualityInspectId(qualityInspect.getId()); // procurementRecordService.add(procurementRecordOutAdd); } qualityInspect.setInspectState(1);//å·²æäº¤ return qualityInspectMapper.updateById(qualityInspect); src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -503,6 +503,7 @@ List<Long> productIds = products.stream() .map(SalesLedgerProduct::getId) .collect(Collectors.toList()); //å é¤çäº§æ°æ® salesLedgerProductServiceImpl.deleteProductionData(productIds); @@ -510,7 +511,6 @@ if (!productIds.isEmpty()) { salesLedgerProductMapper.deleteBatchIds(productIds); } LambdaQueryWrapper<InvoiceRegistrationProduct> wrapper = new LambdaQueryWrapper<>(); wrapper.in(InvoiceRegistrationProduct::getSalesLedgerId, idList); List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(wrapper); src/main/resources/mapper/approve/CarInfoMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ <?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.approve.mapper.CarInfoMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.CarInfo"> <id column="id" property="id" /> <result column="car_no" property="carNo" /> <result column="color" property="color" /> <result column="status" property="status" /> <result column="brand" property="brand" /> <result column="usage_status" property="usageStatus" /> <result column="borrowing_date" property="borrowingDate" /> <result column="desc" property="desc" /> <result column="odometer_mileage" property="odometerMileage" /> <result column="this_trip_mileage" property="thisTripMileage" /> <result column="remark" property="remark" /> <result column="create_time" property="createTime" /> <result column="create_user" property="createUser" /> <result column="update_time" property="updateTime" /> <result column="update_user" property="updateUser" /> </resultMap> </mapper> src/main/resources/mapper/approve/CarInfoRecordMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ <?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.approve.mapper.CarInfoRecordMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.CarInfoRecord"> <id column="id" property="id" /> <result column="car_info_id" property="carInfoId" /> <result column="odometer_mileage" property="odometerMileage" /> <result column="car_return_date" property="carReturnDate" /> <result column="user_name" property="userName" /> <result column="remark" property="remark" /> <result column="create_time" property="createTime" /> <result column="create_user" property="createUser" /> <result column="update_time" property="updateTime" /> <result column="update_user" property="updateUser" /> </resultMap> </mapper> src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -258,7 +258,7 @@ t2.warn_num, t2.product_id from procurement_record_storage t1 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 3 left join sales_ledger t3 on t3.id = t2.sales_ledger_id <where> t1.type = 2 and t1.sales_ledger_product_id != 0 src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -5,6 +5,7 @@ <select id="listPage" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto"> select t3.supplier_name, t3.purchase_contract_number, t2.product_category, t1.id, t1.code, @@ -21,9 +22,9 @@ t4.unit_price, t4.unit_price * t1.inbound_num as totalPrice from procurement_record_out t1 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 2 left join purchase_ledger t3 on t3.id = t2.sales_ledger_id left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id left join sales_ledger_product t2 on t2.id = t4.sales_ledger_product_id and t2.type = 2 left join purchase_ledger t3 on t3.id = t2.sales_ledger_id <where> and t1.type = 1 <if test="req.supplierName != null and req.supplierName != ''"> @@ -117,9 +118,9 @@ t4.unit_price, t4.unit_price * t1.inbound_num as totalPrice from procurement_record_out t1 left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1 left join sales_ledger t3 on t3.id = t2.sales_ledger_id left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id left join sales_ledger_product t2 on t2.id = t4.sales_ledger_product_id and t2.type = 1 left join sales_ledger t3 on t3.id = t2.sales_ledger_id <where> and t1.type = 2 <if test="req.customerName != null and req.customerName != ''"> src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -15,15 +15,12 @@ </resultMap> <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto"> select po.*, sl.sales_contract_no, sl.customer_name, slp.product_category, slp.specification_model, ppr.process_route_code, pb.bom_no, ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus from product_order po left join sales_ledger sl on po.sales_ledger_id = sl.id left join sales_ledger_product slp on po.product_model_id = slp.id left join product_process_route ppr on po.id = ppr.product_order_id left join product_bom pb on pb.id = ppr.bom_id