package com.mzl.flower.service.flower;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.mzl.flower.config.exception.ValidationException;
|
import com.mzl.flower.config.security.SecurityUtils;
|
import com.mzl.flower.dto.request.flower.*;
|
import com.mzl.flower.dto.response.flower.FlowerParamDTO;
|
import com.mzl.flower.dto.response.flower.FlowerParamItemDTO;
|
import com.mzl.flower.dto.response.flower.FlowerParamListDTO;
|
import com.mzl.flower.dto.response.flower.ParamItemDTO;
|
import com.mzl.flower.entity.flower.FlowerCategory;
|
import com.mzl.flower.entity.flower.FlowerParam;
|
import com.mzl.flower.entity.flower.FlowerParamItem;
|
import com.mzl.flower.mapper.flower.FlowerCategoryMapper;
|
import com.mzl.flower.mapper.flower.FlowerParamItemMapper;
|
import com.mzl.flower.mapper.flower.FlowerParamMapper;
|
import com.mzl.flower.service.BaseService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.util.*;
|
|
@Slf4j
|
@Service
|
@Transactional
|
public class FlowerParamService extends BaseService {
|
|
@Autowired
|
private FlowerParamMapper paramMapper;
|
|
@Autowired
|
private FlowerParamItemMapper paramItemMapper;
|
|
@Autowired
|
private FlowerCategoryMapper categoryMapper;
|
|
private final String table_name_pre = "flower_param_";
|
private final String table_column_pre = "field_";
|
|
public Long addParam(FlowerParamCreateDTO dto){
|
FlowerParam g = new FlowerParam();
|
|
BeanUtils.copyProperties(dto, g);
|
g.create(SecurityUtils.getUserId());
|
|
paramMapper.insert(g);
|
|
createTable(getTableName(g.getId()), "商品参数表_" + g.getName());
|
|
updateCategoryParam(g.getId(), dto.getCategoryIds());
|
|
return g.getId();
|
}
|
|
private void updateCategoryParam(Long id, List<Long> categoryIds){
|
categoryMapper.clearParamByParamId(id);
|
if(categoryIds != null && categoryIds.size() > 0) {
|
categoryMapper.setParamById(id, categoryIds);
|
}
|
}
|
|
private void createTable(String tableName, String tableComment){
|
Map<String, Object> tableMap = new HashMap<>();
|
tableMap.put("name", tableName);
|
tableMap.put("label", tableComment);
|
|
List<ParamTableColumn> columns = new ArrayList<>();
|
ParamTableColumn c = new ParamTableColumn();
|
c.setColumn("id");
|
c.setType("bigint(25)");
|
c.setPrimaryKey(true);
|
c.setComment("商品主键");
|
columns.add(c);
|
tableMap.put("fields", columns);
|
|
paramMapper.createTable(tableMap);
|
}
|
|
public Long updateParam(FlowerParamUpdateDTO dto){
|
FlowerParam g = paramMapper.selectById(dto.getId());
|
|
BeanUtils.copyProperties(dto, g);
|
g.update(SecurityUtils.getUserId());
|
|
paramMapper.updateById(g);
|
|
updateCategoryParam(g.getId(), dto.getCategoryIds());
|
|
return g.getId();
|
}
|
|
public FlowerParamDTO getParam(Long id){
|
FlowerParam g = paramMapper.selectById(id);
|
FlowerParamDTO dto = new FlowerParamDTO();
|
BeanUtils.copyProperties(g, dto);
|
|
List<FlowerCategory> ls = categoryMapper.selectList(new QueryWrapper<FlowerCategory>().eq("param_id", id));
|
List<Long> categoryIds = new ArrayList<>();
|
List<String> categoryLs = new ArrayList<>();
|
if(ls != null && ls.size() > 0){
|
for(FlowerCategory c : ls){
|
categoryIds.add(c.getId());
|
categoryLs.add(c.getName());
|
}
|
}
|
dto.setCategoryIds(categoryIds);
|
dto.setCategories(String.join(",", categoryLs));
|
|
return dto;
|
}
|
|
public Page<FlowerParamListDTO> selectParamList(Page page, FlowerParamQueryDTO dto){
|
List<FlowerParamListDTO> ls = paramMapper.selectParamList(page, dto);
|
|
page.setRecords(ls);
|
|
return page;
|
}
|
|
public void deleteParam(Long id){
|
paramMapper.deleteById(id);
|
categoryMapper.clearParamByParamId(id);
|
paramItemMapper.delete(new QueryWrapper<FlowerParamItem>().eq("param_id", id));
|
}
|
|
private String getTableName(Long id){
|
return table_name_pre + id;
|
}
|
|
private String getTableColumn(Long id){
|
return table_column_pre + id;
|
}
|
|
public List<FlowerParamItemDTO> getParamItems(Long id){
|
List<FlowerParamItem> ls = paramItemMapper.selectList(
|
new QueryWrapper<FlowerParamItem>().eq("param_id", id).orderByAsc("sort_by"));
|
List<FlowerParamItemDTO> result = new ArrayList<>();
|
if(ls != null && ls.size() > 0){
|
for(FlowerParamItem t : ls){
|
FlowerParamItemDTO dto = new FlowerParamItemDTO();
|
BeanUtils.copyProperties(t, dto);
|
|
result.add(dto);
|
}
|
}
|
|
return result;
|
}
|
|
public FlowerParamItemDTO getParamItem(Long id){
|
FlowerParamItem t = paramItemMapper.selectById(id);
|
FlowerParamItemDTO dto = new FlowerParamItemDTO();
|
BeanUtils.copyProperties(t, dto);
|
|
return dto;
|
}
|
|
public Long addParamItem(FlowerParamItemCreateDTO dto){
|
FlowerParamItem t = new FlowerParamItem();
|
BeanUtils.copyProperties(dto, t);
|
t.create(SecurityUtils.getUserId());
|
|
paramItemMapper.insert(t);
|
|
ParamTableColumn c = new ParamTableColumn();
|
c.setColumn(getTableColumn(t.getId()));
|
c.setType("varchar(255)");
|
c.setPrimaryKey(false);
|
c.setComment(t.getName());
|
paramItemMapper.addTableColumn(getTableName(t.getParamId()), c);
|
|
return t.getId();
|
}
|
|
public Long updateParamItem(FlowerParamItemUpdateDTO dto){
|
FlowerParamItem t = paramItemMapper.selectById(dto.getId());
|
BeanUtils.copyProperties(dto, t);
|
t.update(SecurityUtils.getUserId());
|
|
paramItemMapper.updateById(t);
|
|
return t.getId();
|
}
|
|
public void deleteParamItem(Long id){
|
paramItemMapper.deleteById(id);
|
}
|
|
public List<ParamItemDTO> getParamItemListByCategoryId(Long categoryId){
|
FlowerCategory fc = categoryMapper.selectById(categoryId);
|
if(fc == null){
|
throw new ValidationException("分类不存在");
|
}
|
|
if(fc.getParamId() == null){
|
return new ArrayList<>();
|
}
|
|
return getParamItemListByParamId(fc.getParamId());
|
}
|
|
public List<ParamItemDTO> getParamItemListByParamId(Long paramId){
|
List<ParamItemDTO> result = new ArrayList<>();
|
List<FlowerParamItem> ls = paramItemMapper.selectList(
|
new QueryWrapper<FlowerParamItem>().eq("param_id", paramId).orderByAsc("sort_by"));
|
if(ls != null && ls.size() > 0){
|
for(FlowerParamItem t : ls){
|
ParamItemDTO d = new ParamItemDTO();
|
d.setId(t.getId());
|
d.setColumn(getTableColumn(t.getId()));
|
d.setName(t.getName());
|
d.setValues(splitParam(t.getContent()));
|
result.add(d);
|
}
|
}
|
|
return result;
|
}
|
|
public void insertTableData(Long paramId, Long id, List<ParamDTO> columns){
|
List<String> columnList = new ArrayList<>();
|
List<Object> valueList = new ArrayList<>();
|
|
columnList.add("id");
|
valueList.add(id);
|
|
for (ParamDTO f : columns){
|
Long fId = f.getId();
|
columnList.add(getTableColumn(fId));
|
valueList.add(f.getValue());
|
}
|
|
String tableName = getTableName(paramId);
|
paramMapper.insertTableData(tableName, columnList, valueList);
|
}
|
|
public void updateTableData(Long paramId, Long id, List<ParamDTO> columns){
|
List<Map> valueMapList = new ArrayList<>();
|
for (ParamDTO f : columns){
|
Long fId = f.getId();
|
Map<String, Object> map = new HashMap<>();
|
map.put("column", getTableColumn(fId));
|
map.put("value", f.getValue());
|
valueMapList.add(map);
|
}
|
|
String tableName = getTableName(paramId);
|
paramMapper.updateTableDataById(tableName, valueMapList, "id", id);
|
}
|
|
public Map getTableDataById(Long paramId, Long id){
|
String tableName = getTableName(paramId);
|
return paramMapper.getTableDataById(tableName, id);
|
}
|
|
public Long getParamIdByCategoryId(Long categoryId){
|
if(categoryId == null){
|
return null;
|
}
|
FlowerCategory c = categoryMapper.selectById(categoryId);
|
return c.getParamId();
|
}
|
}
|