mitao
2024-06-04 a22249bfe0ac068f7c2c0a167aa8102ea98def0e
提交LocalDateTime 序列化 反序列化配置
11个文件已修改
1个文件已添加
221 ■■■■ 已修改文件
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionScreenController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsSkuController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSkuDTO.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsInfoTitleValueVO.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsSkuVO.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsInfoTitleValueMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsInfoTitleValueService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsInfoTitleValueServiceImpl.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsInfoTitleValueMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java
@@ -1,9 +1,17 @@
package com.ruoyi.common.security.config;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.core.convert.converter.Converter;
/**
 * 系统配置
@@ -12,6 +20,9 @@
 */
public class ApplicationConfig
{
    private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
    private static final String DATE_PATTERN = "yyyy-MM-dd";
    /**
     * 时区配置
     */
@@ -29,4 +40,63 @@
        };
    }
    /**
     * string转localdate
     */
    @Bean
    public Converter<String, LocalDate> localDateConverter() {
        return new Converter<String, LocalDate>() {
            @Override
            public LocalDate convert(String source) {
                if (source.trim().length() == 0) {
                    return null;
                }
                try {
                    return LocalDate.parse(source);
                } catch (Exception e) {
                    return LocalDate.parse(source, DateTimeFormatter.ofPattern(DATE_PATTERN));
                }
            }
        };
    }
    /**
     * string转localdatetime
     */
    @Bean
    public Converter<String, LocalDateTime> localDateTimeConverter() {
        return new Converter<String, LocalDateTime>() {
            @Override
            public LocalDateTime convert(String source) {
                if (source.trim().length() == 0) {
                    return null;
                }
                // 先尝试ISO格式: 2019-07-15T16:00:00
                try {
                    return LocalDateTime.parse(source);
                } catch (Exception e) {
                    return LocalDateTime.parse(source,
                            DateTimeFormatter.ofPattern(DATE_TIME_PATTERN));
                }
            }
        };
    }
    /**
     * 统一配置
     */
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
        JavaTimeModule module = new JavaTimeModule();
        LocalDateTimeDeserializer localDateTimeDeserializer = new LocalDateTimeDeserializer(
                DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        module.addDeserializer(LocalDateTime.class, localDateTimeDeserializer);
        return builder -> {
            builder.simpleDateFormat(DATE_TIME_PATTERN);
            builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_PATTERN)));
            builder.serializers(
                    new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATE_TIME_PATTERN)));
            builder.modules(module);
        };
    }
}
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/MgtAuctionScreenController.java
@@ -14,8 +14,6 @@
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.page.PageDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.util.List;
@@ -27,7 +25,6 @@
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
@@ -117,9 +114,7 @@
     */
    @PutMapping("/add-backup-goods")
    @ApiOperation(value = "选择备选商品", notes = "选择备选商品")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "idList", value = "备选商品id集合", required = true, dataType = "List")})
    public R<?> addBackupGoods(@RequestParam("idList") List<Long> idList) {
    public R<?> addBackupGoods(@RequestBody List<Long> idList) {
        auctionSalesroomService.addBackupGoods(idList);
        return R.ok();
    }
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtGoodsSkuController.java
@@ -27,6 +27,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -163,4 +164,9 @@
        return R.ok();
    }
    @ApiOperation("查看详情")
    @GetMapping("/detail/{id}")
    public R<GoodsSkuVO> getGoodsDetail(@PathVariable("id") Long id) {
        return R.ok(goodsSkuService.getGoodsDetail(id));
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/dto/GoodsSkuDTO.java
@@ -1,6 +1,5 @@
package com.ruoyi.goods.controller.management.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@@ -12,8 +11,6 @@
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import lombok.Data;
import com.ruoyi.goods.controller.management.dto.GoodsInfoTitleValueDTO;
/**
 * @author mitao
@@ -33,8 +30,7 @@
    private String skuName;
    @ApiModelProperty(value = "商品年份")
    @NotBlank(message = "商品年份不能为空")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @NotNull(message = "商品年份不能为空")
    private LocalDateTime years;
    @ApiModelProperty(value = "商品分类id")
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsInfoTitleValueVO.java
New file
@@ -0,0 +1,31 @@
package com.ruoyi.goods.controller.management.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import javax.validation.constraints.NotNull;
import lombok.Data;
/**
 * @author mitao
 * @date 2024/5/20
 */
@Data
@ApiModel(value = "商品信息视图对象", description = "商品信息视图对象")
public class GoodsInfoTitleValueVO implements Serializable {
    private static final long serialVersionUID = -6419722448469655827L;
    @ApiModelProperty(value = "商品信息标题id")
    @NotNull(message = "商品信息标题id不能为空")
    private Long goodsInfoTitleId;
    @ApiModelProperty(value = "标题名称")
    private String titleName;
    @ApiModelProperty(value = "内容")
    private String content;
    @ApiModelProperty(value = "排序")
    private Integer sortNum;
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/vo/GoodsSkuVO.java
@@ -2,7 +2,6 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.enums.ListingStatusEnum;
import com.ruoyi.goods.controller.management.dto.GoodsInfoTitleValueDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
@@ -74,7 +73,7 @@
    private String sharePic;
    @ApiModelProperty(value = "商品信息")
    private List<GoodsInfoTitleValueDTO> goodsInfoTitleValueDTOList;
    private List<GoodsInfoTitleValueVO> goodsInfoTitleValueVOList;
    @ApiModelProperty(value = "商品描述")
    private String description;
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/GoodsInfoTitleValueMapper.java
@@ -1,7 +1,10 @@
package com.ruoyi.goods.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.goods.controller.management.vo.GoodsInfoTitleValueVO;
import com.ruoyi.goods.domain.GoodsInfoTitleValue;
import java.util.List;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
@@ -13,4 +16,11 @@
 */
public interface GoodsInfoTitleValueMapper extends BaseMapper<GoodsInfoTitleValue> {
    /**
     * 根据商品id查询信息标题列表
     *
     * @param id 商品id
     * @return List<GoodsInfoTitleValueVO>
     */
    List<GoodsInfoTitleValueVO> listByGoodsId(@Param("id") Long id);
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsInfoTitleValueService.java
@@ -1,7 +1,9 @@
package com.ruoyi.goods.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.goods.controller.management.vo.GoodsInfoTitleValueVO;
import com.ruoyi.goods.domain.GoodsInfoTitleValue;
import java.util.List;
/**
 * <p>
@@ -19,4 +21,12 @@
     * @param id 商品SKU的唯一标识符。
     */
    void removeByGoodsSkuId(Long id);
    /**
     * 根据商品id查询信息标题列表
     *
     * @param id 商品id
     * @return List<GoodsInfoTitleValueVO>
     */
    List<GoodsInfoTitleValueVO> listByGoodsId(Long id);
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
@@ -10,11 +10,10 @@
import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO;
import org.springframework.web.bind.annotation.RequestBody;
import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
import java.util.List;
import org.springframework.web.bind.annotation.RequestBody;
/**
 * <p>
@@ -68,4 +67,6 @@
    PageDTO<HomeGoodsSkuListVO> getHomeGoodsSkuVOList(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO);
    HomeGoodsSkuInfoVO getHomeGoodsSkuInfo(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO);
    GoodsSkuVO getGoodsDetail(Long id);
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsInfoTitleValueServiceImpl.java
@@ -1,9 +1,11 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.goods.controller.management.vo.GoodsInfoTitleValueVO;
import com.ruoyi.goods.domain.GoodsInfoTitleValue;
import com.ruoyi.goods.mapper.GoodsInfoTitleValueMapper;
import com.ruoyi.goods.service.IGoodsInfoTitleValueService;
import java.util.List;
import org.springframework.stereotype.Service;
/**
@@ -29,4 +31,14 @@
        this.lambdaUpdate().eq(GoodsInfoTitleValue::getGoodsSkuId, id).remove();
    }
    /**
     * 根据商品id查询信息标题列表
     *
     * @param id 商品id
     * @return List<GoodsInfoTitleValueVO>
     */
    @Override
    public List<GoodsInfoTitleValueVO> listByGoodsId(Long id) {
        return baseMapper.listByGoodsId(id);
    }
}
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -1,4 +1,5 @@
package com.ruoyi.goods.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -16,8 +17,8 @@
import com.ruoyi.goods.controller.management.dto.GoodsInfoTitleValueDTO;
import com.ruoyi.goods.controller.management.dto.GoodsSkuDTO;
import com.ruoyi.goods.controller.management.dto.GoodsSkuQuery;
import com.ruoyi.goods.controller.management.vo.GoodsInfoTitleValueVO;
import com.ruoyi.goods.controller.management.vo.GoodsSkuVO;
import com.ruoyi.system.api.domain.GoodsGroupPurchase;
import com.ruoyi.goods.domain.GoodsInfoTitleValue;
import com.ruoyi.goods.domain.MemberGoodsCollection;
import com.ruoyi.goods.mapper.GoodsGroupPurchaseMapper;
@@ -26,11 +27,19 @@
import com.ruoyi.goods.service.IGoodsInfoTitleValueService;
import com.ruoyi.goods.service.IGoodsSkuService;
import com.ruoyi.goods.service.IMemberGoodsCollectionService;
import com.ruoyi.system.api.domain.*;
import com.ruoyi.system.api.domain.GoodsBrand;
import com.ruoyi.system.api.domain.GoodsCategory;
import com.ruoyi.system.api.domain.GoodsFlavorType;
import com.ruoyi.system.api.domain.GoodsGroupPurchase;
import com.ruoyi.system.api.domain.GoodsSeckill;
import com.ruoyi.system.api.domain.GoodsSeries;
import com.ruoyi.system.api.domain.GoodsSku;
import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
import com.ruoyi.system.api.domain.dto.ListStatusDTO;
import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO;
import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
@@ -38,10 +47,7 @@
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO;
import com.ruoyi.system.api.feignClient.GoodsSkuClient;
import javax.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
@@ -49,8 +55,6 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
 * <p>
@@ -69,6 +73,7 @@
    private final GoodsSeckillMapper goodsSeckillMapper;
    private final GoodsGroupPurchaseMapper goodsGroupPurchaseMapper;
    private final RedissonClient redissonClient;
    @Resource
    private  GoodsSkuClient goodsSkuClient;
@@ -409,4 +414,23 @@
                .eq(GoodsSku::getStock, skus.getStock())
                .update();
    }
    /**
     * 根据商品id查询信息标题列表
     *
     * @param id 商品id
     * @return List<GoodsInfoTitleValueVO>
     */
    @Override
    public GoodsSkuVO getGoodsDetail(Long id) {
        GoodsSku goodsSku = this.getById(id);
        if (StringUtils.isNull(goodsSku)) {
            throw new ServiceException("商品不存在");
        }
        GoodsSkuVO goodsSkuVO = BeanUtils.copyBean(goodsSku, GoodsSkuVO.class);
        List<GoodsInfoTitleValueVO> goodsInfoTitleValueVOList = goodsInfoTitleValueService.listByGoodsId(
                id);
        goodsSkuVO.setGoodsInfoTitleValueVOList(goodsInfoTitleValueVOList);
        return goodsSkuVO;
    }
}
ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsInfoTitleValueMapper.xml
@@ -2,4 +2,21 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.goods.mapper.GoodsInfoTitleValueMapper">
  <select id="listByGoodsId"
    resultType="com.ruoyi.goods.controller.management.vo.GoodsInfoTitleValueVO"
    parameterType="java.lang.Long">
    SELECT titv.goods_info_title_id,
    titv.content,
    titv.sort_num,
    tit.title_name
    FROM t_goods_info_title_value titv
    LEFT JOIN t_goods_info_title tit
    ON titv.goods_info_title_id = tit.id
    <where>
      titv.del_flag = 0 AND tit.del_flag = 0
      <if test="id != null">
        AND titv.goods_sku_id = #{id}
      </if>
    </where>
  </select>
</mapper>