HR项目-06

1 课程中心

1.1 表设计

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述## 1.2 crud
集成支持vue的富文本编辑器

npm install quill --save
npm install --save vue-quill-editor

2 课程上线与下线

2.1 业务

上线:添加进去不代表就ok了,只有上线了用户才能查询,中间就有缓冲时间了。
下线:有些课程不需要,就下线用户查询不到。

2.2 方案选择:ES

2.3 架构-间图

管理员:
添加:数据库
修改和删除:数据库和索引库需要同步
分页列表:数据库
上线:索引库
下线:索引库
用户查询:数据库查询
在这里插入图片描述

2.5 springboot springdataes

<!--springboot仲裁中心-->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.5.RELEASE</version>
</parent>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

<!--springboot 对spring data es支持-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>


配置yml
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9300 #9200是图形界面端,9300代码端

2.6课程上下线实现

1)搭建基本结构
导入pom

Service
  <!--springboot 对spring data es支持-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
       

   yml
spring:
  data:
    elasticsearch:
      cluster-name: elasticsearch
      cluster-nodes: 127.0.0.1:9300 #9200是图形界面端,9300代码端

   Doc映射&Repository
CourseDoc -service
package cn.itsource.index.doc;

import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.math.BigDecimal;
import java.util.Date;

//包含了前台展示的字段和要添加到索引库都要写到这儿
@Document(indexName = "hrm",type = "course")
public class EsCourse {
    @Id
    private Long id;
    private String name;
    private String users;
    private Long courseTypeId;
    private String courseTypeName;
    private Long gradeId;
    private String gradeName;
    private Integer status;
    private Long tenantId;
    private String tenantName;
    private Long userId;
    private String userName;
    private Date startTime;
    private Date endTime;
    private String intro;
    private String resources; //图片
    private Date expires; //过期时间
    private BigDecimal priceOld; //原价
    private BigDecimal price; //原价
    private String qq; //原价

    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String all;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUsers() {
        return users;
    }

    public void setUsers(String users) {
        this.users = users;
    }

    public Long getCourseTypeId() {
        return courseTypeId;
    }

    public void setCourseTypeId(Long courseTypeId) {
        this.courseTypeId = courseTypeId;
    }

    public String getCourseTypeName() {
        return courseTypeName;
    }

    public void setCourseTypeName(String courseTypeName) {
        this.courseTypeName = courseTypeName;
    }

    public Long getGradeId() {
        return gradeId;
    }

    public void setGradeId(Long gradeId) {
        this.gradeId = gradeId;
    }

    public String getGradeName() {
        return gradeName;
    }

    public void setGradeName(String gradeName) {
        this.gradeName = gradeName;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Long getTenantId() {
        return tenantId;
    }

    public void setTenantId(Long tenantId) {
        this.tenantId = tenantId;
    }

    public String getTenantName() {
        return tenantName;
    }

    public void setTenantName(String tenantName) {
        this.tenantName = tenantName;
    }

    public Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public String getIntro() {
        return intro;
    }

    public void setIntro(String intro) {
        this.intro = intro;
    }

    public String getResources() {
        return resources;
    }

    public void setResources(String resources) {
        this.resources = resources;
    }

    public Date getExpires() {
        return expires;
    }

    public void setExpires(Date expires) {
        this.expires = expires;
    }

    public BigDecimal getPriceOld() {
        return priceOld;
    }

    public void setPriceOld(BigDecimal priceOld) {
        this.priceOld = priceOld;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getQq() {
        return qq;
    }

    public void setQq(String qq) {
        this.qq = qq;
    }

    @Override
    public String toString() {
        return "EsCourse{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", users='" + users + '\'' +
                ", courseTypeId=" + courseTypeId +
                ", courseTypeName='" + courseTypeName + '\'' +
                ", gradeId=" + gradeId +
                ", gradeName='" + gradeName + '\'' +
                ", status=" + status +
                ", tenantId=" + tenantId +
                ", tenantName='" + tenantName + '\'' +
                ", userId=" + userId +
                ", userName='" + userName + '\'' +
                ", startTime=" + startTime +
                ", endTime=" + endTime +
                ", intro='" + intro + '\'' +
                ", resources='" + resources + '\'' +
                ", expires=" + expires +
                ", priceOld=" + priceOld +
                ", price=" + price +
                ", qq='" + qq + '\'' +
                '}';
    }

    public String getAll() {
        String tmp =  name
        +" "+ users
        +" "+ courseTypeName
        +" "+ gradeName
        +" "+ tenantName
        +" "+ userName
        +" "+ intro;
        return tmp;
    }

    public void setAll(String all) {
        this.all = all;
    }
}

 Repository-service
package cn.itsource.index.repository;

import cn.itsource.index.doc.EsCourse;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

//在service通过注入它就可以完成索引库操作了
public interface EsCourseRepository extends ElasticsearchRepository<EsCourse,Long> {
}


具备操作索引库的能力
==============
@RunWith(SpringRunner.class)
@SpringBootTest(classes = CouseServiceApplication2020.class)
public class EscourseInitTest {

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

    @Autowired
    private EsCourseRepository repository;

    @Test
    public void initTest() {
        elasticsearchTemplate.createIndex(EsCourse.class);
        elasticsearchTemplate.putMapping(EsCourse.class);
        System.out.println(repository);
    }
}

=上下线处理-课程服务

删除:
 
修改:
 
private ProductDoc product2productDoc(Product product) {

    //选中 alt+enter
    ProductDoc productDoc = new ProductDoc();
    productDoc.setId(product.getId());
    productDoc.setProuductTypeId(product.getProductTypeId());
    productDoc.setBrandId(product.getBrandId());
    //从某个商品sku中获取最大或最小
    List<Sku> skus = skuMapper.selectList(new EntityWrapper<Sku>()
            .eq("productId", product.getId()));

    Integer minPrice  = skus.get(0).getPrice();
    Integer maxPrice  = skus.get(0).getPrice();
    for (Sku sku : skus) {
        if (sku.getPrice()<minPrice) minPrice=sku.getPrice();
        if (sku.getPrice()>maxPrice) maxPrice = sku.getPrice();
    }
    productDoc.setMinPrice(minPrice);
    productDoc.setMaxPrice(maxPrice);
    productDoc.setSaleCount(product.getSaleCount());
    productDoc.setOnSaleTime(Integer
            .valueOf(product.getOnSaleTimeOfLong().toString()));
    productDoc.setCommentCount(product.getCommentCount());
    productDoc.setViewCount(product.getViewCount());
    productDoc.setImages(Arrays
            .asList(product.getMedias().split(",")));
    Brand brand = brandMapper.selectById(product.getBrandId());
    ProductType productType = productTypeMapper.selectById(product.getProductTypeId());
    //投机-有空格就会分词
    String all = product.getName()+" "
            +product.getSubName()+" "+brand.getName()+" "+productType.getName();

    productDoc.setAll(all);
    productDoc.setViewProperties(product.getViewProperties());
    productDoc.setSkuProperties(product.getSkuTemplate());
    //设置值
    return productDoc;
}


2)	上下线逻辑
controller
 
@Override
public void onSale(String ids, Integer onSale) {
    List<Long> idsLong = StrUtils.splitStr2LongArr(ids);
    if (1==onSale.intValue()){
        //上线
        //数据库状态和上线时间要修改 id 时间
        Map<String,Object> params = new HashMap<>();
        params.put("ids", idsLong);
        params.put("timeStamp", new Date().getTime());
        productMapper.onSale(params);
        //添加esku
        // productDocClient.batchDel(Arrays.asList(idsLong));
        List<ProductDoc> productDocs = product2productDocs(idsLong);
        productDocClient.batchSave(productDocs);
    }else{
        //下线
        //数据库状态和下线时间要修改
        Map<String,Object> params = new HashMap<>();
        params.put("ids", idsLong);
        params.put("timeStamp", new Date().getTime());
        productMapper.offSale(params);
        //删除esku
        productDocClient.batchDel(idsLong);

    }

}
 * @param ids
 * @return
 */
private List<ProductDoc> product2productDocs(List<Long> ids) {
    List<ProductDoc> productDocs = new ArrayList<>();
    for (Long id : ids) {
        Product product = productMapper.selectById(id);
        ProductDoc productDoc = product2productDoc(product);
        productDocs.add(productDoc);
    }
    return productDocs;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值