Commit f7042156 authored by dmy's avatar dmy

中医药小程序代码提交

parent 7e1dcc53
......@@ -14,6 +14,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
/**
* 日志自动启动服务
*
* @author Administrator
*/
@SpringBootApplication(scanBasePackages = {
......@@ -22,7 +23,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
"org.springframework.jdbc.*"
})
@EnableEurekaClient
@EnableFeignClients(basePackages={
@EnableFeignClients(basePackages = {
"com.tcm.*",
"com.yanzuoguang.*"
})
......@@ -35,7 +36,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@EnableScheduling
@EnableCaching
@EnableAsync
public class SystemApp implements CommandLineRunner{
public class SystemApp implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(SystemApp.class, args);
......@@ -44,6 +45,5 @@ public class SystemApp implements CommandLineRunner{
@Override
public void run(String... args) throws Exception {
YzgLanguage.get().setDefaultLanguage(YzgLanguage.LANGUAGE_CH);
System.err.println("启动成功");
}
}
\ No newline at end of file
package com.tcm.common.dao;
import com.yanzuoguang.dao.BaseDao;
public interface CompanyDao extends BaseDao {
}
package com.tcm.common.dao;
import com.tcm.util.area.req.FloorAreaReqVo;
import com.tcm.util.area.res.FloorAreaResVo;
import com.yanzuoguang.dao.BaseDao;
import java.util.List;
public interface FloorAreaDao extends BaseDao {
/**
* 根据排序加载
* @param areaReqVo
* @return
*/
List<FloorAreaResVo> loadBySort(FloorAreaReqVo areaReqVo);
}
package com.tcm.common.dao;
import com.tcm.util.area.req.FloorReqVo;
import com.tcm.util.area.res.FloorResVo;
import com.yanzuoguang.dao.BaseDao;
import java.util.List;
public interface FloorDao extends BaseDao {
/**
* 排序查询
* @param req
* @return
*/
List<FloorResVo> loadBySort(FloorReqVo req);
}
......@@ -18,8 +18,8 @@ public class CenterDisplayDaoImpl extends BaseDaoImpl implements CenterDisplayDa
register(CenterDisplayVo.class);
table.add(SQL_LOAD_BY_LIST, "select p.*,pi.image_url as iconUrl from tcm_center_display as p " +
"left join tcm_image as pi on p.display_id on pi.relation_id where 1=1 {WHERE} order by p.sort")
.add("displayId", "p.display_id = ?")
.add("title", "p.title = ?")
.add("displayId", " AND p.display_id = ?")
.add("title", " AND p.title = ?")
;
}
......
package com.tcm.common.dao.impl;
import com.tcm.common.dao.CompanyDao;
import com.tcm.util.common.CompanyVo;
import com.yanzuoguang.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Component;
@Component
public class CompanyDaoImpl extends BaseDaoImpl implements CompanyDao {
@Override
protected void init() {
register(CompanyVo.class);
}
}
......@@ -2,13 +2,33 @@ package com.tcm.common.dao.impl;
import com.tcm.common.dao.FloorAreaDao;
import com.tcm.util.area.FloorAreaVo;
import com.tcm.util.area.req.FloorAreaReqVo;
import com.tcm.util.area.res.FloorAreaResVo;
import com.yanzuoguang.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class FloorAreaDaoImpl extends BaseDaoImpl implements FloorAreaDao {
private final String SQL_LOAD_BY_SORT = "loadBySort";
@Override
protected void init() {
register(FloorAreaVo.class);
table.add(SQL_LOAD_BY_SORT, "select p.* from tcm_floor_area as p where 1=1 {WHERE} order by sort")
.add("floorId", "and p.floor_id =?")
.add("areaId", "and p.area_id =?")
.add("areaName", "and p.area_name =?")
.add("isFeature", "and p.is_feature =?")
.add("areaStatus", "and p.area_status =?")
.add("createTime", "and p.create_time =?")
;
}
@Override
public List<FloorAreaResVo> loadBySort(FloorAreaReqVo req) {
return this.query(FloorAreaResVo.class, SQL_LOAD_BY_SORT, req);
}
}
......@@ -2,13 +2,30 @@ package com.tcm.common.dao.impl;
import com.tcm.common.dao.FloorDao;
import com.tcm.util.area.FloorVo;
import com.tcm.util.area.req.FloorReqVo;
import com.tcm.util.area.res.FloorResVo;
import com.yanzuoguang.dao.impl.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class FloorDaoImpl extends BaseDaoImpl implements FloorDao {
private static final String SQL_LOAD_BY_SORT = "load_by_sort";
@Override
protected void init() {
register(FloorVo.class);
table.add(SQL_LOAD_BY_SORT, "select p.* from tcm_floor as p where 1=1 {WHERE} order by sort")
.add("floorId", "and p.floor_id =?")
.add("floorName", "and p.floor_name =?")
.add("floorStatus", "and p.floor_status =?")
;
}
@Override
public List<FloorResVo> loadBySort(FloorReqVo req) {
return this.query(FloorResVo.class, SQL_LOAD_BY_SORT, req);
}
}
package com.tcm.common.service;
import com.tcm.util.common.req.CompanyLoadPageReqVo;
import com.tcm.util.common.req.CompanyReqVo;
import com.tcm.util.common.res.CompanyResVo;
import com.yanzuoguang.util.vo.PageSizeData;
public interface CompanyService {
/**
* 公司新增
*/
String save(CompanyReqVo req);
/**
* 公司加载
*/
CompanyResVo load(CompanyReqVo req);
/**
* 公司分页查询
*/
PageSizeData<CompanyResVo> loadPage(CompanyLoadPageReqVo req);
/**
* 公司删除
*/
String remove(CompanyReqVo req);
}
......@@ -71,6 +71,19 @@ public class AreaServiceImpl implements AreaService {
FloorVo floor = new FloorVo();
floor.setFloorId(req.getFloorId());
FloorResVo load = floorDao.load(floor, FloorResVo.class);
ImageReqVo imageReqVo = new ImageReqVo();
imageReqVo.setRelationId(load.getFloorId());
load.setImageResVoList(imageService.loadList(imageReqVo));
FloorAreaReqVo areaReqVo = new FloorAreaReqVo();
areaReqVo.setFloorId(req.getFloorId());
List<FloorAreaResVo> floorAreaResVoList = floorAreaDao.loadList(areaReqVo, FloorAreaResVo.class);
for (FloorAreaResVo floorAreaResVo : floorAreaResVoList) {
imageReqVo.setRelationId(floorAreaResVo.getAreaId());
floorAreaResVo.setImageList(imageService.loadList(imageReqVo));
}
load.setFloorAreaVoList(floorAreaResVoList);
return load;
}
......@@ -157,9 +170,13 @@ public class AreaServiceImpl implements AreaService {
CarouselResVo carouselVo = carouselService.load(carouselReqVo);
floorHomeLoadResVo.setCarouselVo(carouselVo);
//楼层加载
List<FloorResVo> floorList = floorDao.loadList(req, FloorResVo.class);
List<FloorResVo> floorList = floorDao.loadBySort(req);
//特殊区加载
List<FloorAreaResVo> floorAreaList = new ArrayList<>();
FloorAreaReqVo areaReqVo = new FloorAreaReqVo();
areaReqVo.setIsFeature(req.getIsFeature());
areaReqVo.setAreaStatus(req.getAreaStatus());
List<FloorAreaResVo> floorAreaList = floorAreaDao.loadBySort(areaReqVo);
floorHomeLoadResVo.setFloorList(floorList);
floorHomeLoadResVo.setFloorAreaList(floorAreaList);
return floorHomeLoadResVo;
......
package com.tcm.common.service.impl;
import com.tcm.common.dao.CompanyDao;
import com.tcm.common.service.CompanyService;
import com.tcm.common.service.ImageService;
import com.tcm.util.common.CompanyVo;
import com.tcm.util.common.req.CompanyLoadPageReqVo;
import com.tcm.util.common.req.CompanyReqVo;
import com.tcm.util.common.req.ImageReqVo;
import com.tcm.util.common.res.CompanyResVo;
import com.yanzuoguang.util.base.ObjectHelper;
import com.yanzuoguang.util.helper.StringHelper;
import com.yanzuoguang.util.vo.PageSizeData;
import org.springframework.stereotype.Service;
@Service
public class CompanyServiceImpl implements CompanyService {
private final CompanyDao companyDao;
private final ImageService imageService;
public CompanyServiceImpl(CompanyDao companyDao, ImageService imageService) {
this.companyDao = companyDao;
this.imageService = imageService;
}
@Override
public String save(CompanyReqVo req) {
if (StringHelper.isEmpty(req.getCompanyId())) {
CompanyVo company = new CompanyVo();
String companyId = StringHelper.getNewID();
company.setCompanyId(companyId);
ObjectHelper.writeWithFrom(company, req);
companyDao.save(company);
return companyId;
} else {
CompanyVo company = new CompanyVo();
company.setCompanyId(req.getCompanyId());
CompanyVo load = companyDao.load(company, CompanyVo.class);
ObjectHelper.writeWithFrom(load, req);
companyDao.update(load);
return req.getCompanyId();
}
}
@Override
public CompanyResVo load(CompanyReqVo req) {
CompanyVo company = new CompanyVo();
company.setCompanyId(req.getCompanyId());
company.setCompanyStatus(req.getCompanyStatus() == null ? 0 : req.getCompanyStatus());
CompanyResVo load = companyDao.load(company, CompanyResVo.class);
// 图片加载
ImageReqVo imageReqVo = new ImageReqVo();
imageReqVo.setRelationId(load.getCompanyId());
load.setCompanyImageList(imageService.loadList(imageReqVo));
return load;
}
@Override
public PageSizeData<CompanyResVo> loadPage(CompanyLoadPageReqVo req) {
PageSizeData<CompanyResVo> page = companyDao.loadPage(req, CompanyResVo.class);
return page;
}
@Override
public String remove(CompanyReqVo req) {
CompanyVo company = new CompanyVo();
company.setCompanyId(req.getCompanyId());
companyDao.remove(company);
ImageReqVo imageReqVo = new ImageReqVo();
imageReqVo.setRelationId(req.getCompanyId());
imageService.remove(imageReqVo);
return req.getCompanyId();
}
}
......@@ -22,4 +22,5 @@ public class CommonConstant {
*/
public static final Integer CAROUSEL_TYPE_HOME = 0;
public static final Integer CAROUSEL_TYPE_CENTER_DISPLAY = 1;
}
package com.tcm.common.web;
import com.tcm.common.service.CarouselService;
import com.tcm.util.area.req.CenterDisplayReqVo;
import com.tcm.util.area.req.FloorReqVo;
import com.tcm.util.area.res.CenterDisplayResVo;
import com.tcm.util.common.req.CarouselLoadPageReqVo;
import com.tcm.util.common.req.CarouselReqVo;
import com.tcm.util.common.req.TcmEnumReqVo;
import com.tcm.util.common.res.CarouselResVo;
import com.yanzuoguang.util.vo.PageSizeData;
import com.yanzuoguang.util.vo.ResponseResult;
......@@ -14,8 +10,6 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/carousel")
public class CarouselController {
......
package com.tcm.common.web;
import com.tcm.common.service.CompanyService;
import com.tcm.util.common.req.CompanyLoadPageReqVo;
import com.tcm.util.common.req.CompanyReqVo;
import com.tcm.util.common.res.CompanyResVo;
import com.yanzuoguang.util.vo.PageSizeData;
import com.yanzuoguang.util.vo.ResponseResult;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/company")
public class CompanyController {
private final CompanyService companyService;
public CompanyController(CompanyService companyService) {
this.companyService = companyService;
}
/**
* 公司新增
*/
@RequestMapping("/save")
public ResponseResult<String> save(@RequestBody CompanyReqVo req) {
return ResponseResult.result(companyService.save(req));
}
/**
* 公司加载
*/
@RequestMapping("/load")
public ResponseResult<CompanyResVo> load(@RequestBody CompanyReqVo req) {
return ResponseResult.result(companyService.load(req));
}
/**
* 公司分页查询
*/
@RequestMapping("/loadPage")
public ResponseResult<PageSizeData<CompanyResVo>> loadPage(@RequestBody CompanyLoadPageReqVo req) {
return ResponseResult.result(companyService.loadPage(req));
}
/**
* 公司删除
*/
@RequestMapping("/remove")
public ResponseResult<String> remove(@RequestBody CompanyReqVo req) {
return ResponseResult.result(companyService.remove(req));
}
}
......@@ -16,8 +16,9 @@ public class ProductCategoryDaoImpl extends BaseDaoImpl implements ProductCatego
@Override
protected void init() {
register(ProductCategoryVo.class);
table.add(SQL_LOAD_BY_PAGE, "select p.*,pi.image_url as imageUrl from tcm_product_category as p where p.category_id " +
"left join tcm_image as pi on p.category_id = pi.relation_id where 1=1 {WHERE} order by p.sort")
table.add(SQL_LOAD_BY_PAGE, "select p.*,ti.image_url as imageUrl from tcm_product_category as p " +
"left join tcm_image as ti on p.category_id = ti.relation_id where 1=1 {WHERE} order by p.sort")
.add("categoryId", "p.category_id = ?")
;
}
......
......@@ -17,10 +17,9 @@ public class ProductDaoImpl extends BaseDaoImpl implements ProductDao {
@Override
protected void init() {
register(ProductVo.class);
table.add(SQL_PRODUCT_LOAD_INFO, "select p.*,pi.image_url as imageUrl from tcm_product as p " +
"left join tcm_image as pi on p.product_id = pi.relation_id where 1=1 {WHERE} order by p.sort ")
.add("productId", "p.product_id = ?")
.add("categoryId", "p.category_id =?")
table.add(SQL_PRODUCT_LOAD_INFO, "select p.* from tcm_product as p where 1=1 {WHERE} order by p.sort")
.add("productId", " AND p.product_id = ?")
.add("categoryId", " AND p.category_id =?")
;
}
......
......@@ -6,6 +6,7 @@ import com.tcm.product.dao.ProductDao;
import com.tcm.product.dao.ProductExtendDao;
import com.tcm.product.service.ProductCategoryService;
import com.tcm.util.common.req.ImageReqVo;
import com.tcm.util.common.res.ImageResVo;
import com.tcm.util.product.ProductCategoryVo;
import com.tcm.util.product.ProductExtendVo;
import com.tcm.util.product.req.ProductCategoryLoadPageReqVo;
......@@ -99,6 +100,10 @@ public class ProductCategoryServiceImpl implements ProductCategoryService {
productVo.setCategoryId(item.getCategoryId());
List<ProductResVo> loadList = productDao.loadInfoList(productVo);
loadList.forEach(product -> {
ImageReqVo imageReqVo = new ImageReqVo();
imageReqVo.setRelationId(product.getProductId());
List<ImageResVo> imageList = imageService.loadList(imageReqVo);
product.setImageList(imageList);
ProductExtendVo productExtendVo = productExtendVoMap.get(product.getProductId());
if (productExtendVo != null) {
product.setProductExtendVo(productExtendVo);
......
......@@ -55,6 +55,14 @@ public class FloorAreaVo {
@TableAnnotation("sort")
@ApiModelProperty(notes = "排序")
private Integer sort;
/**
* 区域状态0启用1禁用
*/
@TableAnnotation("area_status")
@ApiModelProperty(notes = "区域状态0启用1禁用")
private Integer areaStatus;
/**
* 创建时间
*/
......@@ -150,4 +158,12 @@ public class FloorAreaVo {
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public Integer getAreaStatus() {
return areaStatus;
}
public void setAreaStatus(Integer areaStatus) {
this.areaStatus = areaStatus;
}
}
......@@ -3,4 +3,23 @@ package com.tcm.util.area.req;
import com.tcm.util.area.FloorVo;
public class FloorReqVo extends FloorVo {
private Integer isFeature;
private Integer areaStatus;
public Integer getIsFeature() {
return isFeature;
}
public void setIsFeature(Integer isFeature) {
this.isFeature = isFeature;
}
public Integer getAreaStatus() {
return areaStatus;
}
public void setAreaStatus(Integer areaStatus) {
this.areaStatus = areaStatus;
}
}
......@@ -2,19 +2,30 @@ package com.tcm.util.area.res;
import com.tcm.util.area.FloorAreaVo;
import com.tcm.util.area.FloorVo;
import com.tcm.util.common.res.ImageResVo;
import java.util.ArrayList;
import java.util.List;
public class FloorResVo extends FloorVo {
private List<FloorAreaVo> floorAreaVoList = new ArrayList<>();
private List<FloorAreaResVo> floorAreaVoList = new ArrayList<>();
public List<FloorAreaVo> getFloorAreaVoList() {
private List<ImageResVo> imageResVoList = new ArrayList<>();
public List<ImageResVo> getImageResVoList() {
return imageResVoList;
}
public void setImageResVoList(List<ImageResVo> imageResVoList) {
this.imageResVoList = imageResVoList;
}
public List<FloorAreaResVo> getFloorAreaVoList() {
return floorAreaVoList;
}
public void setFloorAreaVoList(List<FloorAreaVo> floorAreaVoList) {
public void setFloorAreaVoList(List<FloorAreaResVo> floorAreaVoList) {
this.floorAreaVoList = floorAreaVoList;
}
}
package com.tcm.util.common;
import com.yanzuoguang.dao.TableAnnotation;
import io.swagger.annotations.ApiModelProperty;
@TableAnnotation("tcm_company")
public class CompanyVo {
/**
* 公司主键id
*/
@TableAnnotation("company_id")
@ApiModelProperty(notes = "公司主键id")
private String companyId;
/**
* 公司名称
*/
@TableAnnotation("company_name")
@ApiModelProperty(notes = "公司名称")
private String companyName;
/**
* 公司类型
*/
@TableAnnotation("company_type")
@ApiModelProperty(notes = "公司类型")
private Integer companyType;
/**
* 公司地址
*/
@TableAnnotation("company_address")
@ApiModelProperty(notes = "公司地址")
private String companyAddress;
/**
* 经度
*/
@TableAnnotation("longitude")
@ApiModelProperty(notes = "经度")
private Double longitude;
/**
* 纬度
*/
@TableAnnotation("latitude")
@ApiModelProperty(notes = "纬度")
private Double latitude;
/**
* 公司座机
*/
@TableAnnotation("company_telephone")
@ApiModelProperty(notes = "公司座机")
private String companyTelephone;
/**
* 工作日期时间
*/
@TableAnnotation("work_time")
@ApiModelProperty(notes = "工作日期时间")
private String workTime;
/**
* 节假日日期
*/
@TableAnnotation("weekend_time")
@ApiModelProperty(notes = "节假日日期")
private String weekendTime;
/**
* 公司状态0启用1禁用
*/
@TableAnnotation("company_status")
@ApiModelProperty(notes = "公司状态0启用1禁用")
private Integer companyStatus;
/**
* 创建时间
*/
@TableAnnotation("create_time")
@ApiModelProperty(notes = "创建时间")
private String createTime;
/**
* 更新时间
*/
@TableAnnotation("update_time")
@ApiModelProperty(notes = "更新时间")
private String updateTime;
public CompanyVo() {
}
public String getCompanyId() {
return companyId;
}
public void setCompanyId(String companyId) {
this.companyId = companyId;
}
public Integer getCompanyType() {
return companyType;
}
public void setCompanyType(Integer companyType) {
this.companyType = companyType;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
public String getCompanyAddress() {
return companyAddress;
}
public void setCompanyAddress(String companyAddress) {
this.companyAddress = companyAddress;
}
public Double getLongitude() {
return longitude;
}
public void setLongitude(Double longitude) {
this.longitude = longitude;
}
public Double getLatitude() {
return latitude;
}
public void setLatitude(Double latitude) {
this.latitude = latitude;
}
public String getCompanyTelephone() {
return companyTelephone;
}
public void setCompanyTelephone(String companyTelephone) {
this.companyTelephone = companyTelephone;
}
public String getWorkTime() {
return workTime;
}
public void setWorkTime(String workTime) {
this.workTime = workTime;
}
public String getWeekendTime() {
return weekendTime;
}
public void setWeekendTime(String weekendTime) {
this.weekendTime = weekendTime;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public Integer getCompanyStatus() {
return companyStatus;
}
public void setCompanyStatus(Integer companyStatus) {
this.companyStatus = companyStatus;
}
}
package com.tcm.util.common.req;
import com.yanzuoguang.util.vo.PageSizeReqVo;
public class CompanyLoadPageReqVo extends PageSizeReqVo {
private String companyId;
private String companyName;
public String getCompanyId() {
return companyId;
}
public void setCompanyId(String companyId) {
this.companyId = companyId;
}
public String getCompanyName() {
return companyName;
}
public void setCompanyName(String companyName) {
this.companyName = companyName;
}
}
package com.tcm.util.common.req;
import com.tcm.util.common.CompanyVo;
public class CompanyReqVo extends CompanyVo {
}
package com.tcm.util.common.res;
import com.tcm.util.common.CompanyVo;
import java.util.ArrayList;
import java.util.List;
public class CompanyResVo extends CompanyVo {
private List<ImageResVo> companyImageList = new ArrayList<>();
public List<ImageResVo> getCompanyImageList() {
return companyImageList;
}
public void setCompanyImageList(List<ImageResVo> companyImageList) {
this.companyImageList = companyImageList;
}
}
......@@ -36,6 +36,13 @@ public class ProductCategoryVo {
@TableAnnotation("status")
@ApiModelProperty(notes = "状态0启用1禁用")
private Integer status;
/**
* 介绍
*/
@TableAnnotation("introduction")
@ApiModelProperty(notes = "介绍")
private String introduction;
/**
* 创建时间
*/
......@@ -107,4 +114,12 @@ public class ProductCategoryVo {
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getIntroduction() {
return introduction;
}
public void setIntroduction(String introduction) {
this.introduction = introduction;
}
}
......@@ -3,4 +3,43 @@ package com.tcm.util.product.req;
import com.yanzuoguang.util.vo.PageSizeReqVo;
public class ProductCategoryLoadPageReqVo extends PageSizeReqVo {
private Integer status;
private String parentId;
private String categoryId;
private String categoryName;
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getParentId() {
return parentId;
}
public void setParentId(String parentId) {
this.parentId = parentId;
}
public String getCategoryId() {
return categoryId;
}
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
}
......@@ -3,4 +3,40 @@ package com.tcm.util.product.req;
import com.yanzuoguang.util.vo.PageSizeReqVo;
public class ProductLoadPageReqVo extends PageSizeReqVo {
private String productId;
private String productName;
private String productCategoryId;
private String productStatus;
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductCategoryId() {
return productCategoryId;
}
public void setProductCategoryId(String productCategoryId) {
this.productCategoryId = productCategoryId;
}
public String getProductStatus() {
return productStatus;
}
public void setProductStatus(String productStatus) {
this.productStatus = productStatus;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment