diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/CrontabController.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/CrontabController.java index 33ae7f7..f149e25 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/CrontabController.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/CrontabController.java @@ -65,4 +65,28 @@ public class CrontabController { return AjaxResult.success(); } + + public static void main(String[] args) { + double lat1 = 39.927508; + double lon1 = 116.333379; + double lat2 = 39.928185; + double lon2 = 116.334016; + + double r = 6371; // Earth's radius in km + + double distance = calculateDistance(lat1, lon1, lat2, lon2, r); + + System.out.println("The distance between the two points is: " + distance + " km"); + } + + public static double calculateDistance(double lat1, double lon1, double lat2, double lon2, double r) { + double dLat = Math.toRadians(lat2 - lat1); + double dLon = Math.toRadians(lon2 - lon1); + + double a = Math.pow(Math.sin(dLat/2), 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.pow(Math.sin(dLon/2), 2); + double c = 2 * Math.asin(Math.sqrt(a)); + + return r * c; + } + } diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/ExperimentController.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/ExperimentController.java new file mode 100644 index 0000000..1d1d7ce --- /dev/null +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/ExperimentController.java @@ -0,0 +1,69 @@ +package com.wyh.admin.controller; + +import com.wyh.admin.aop.Log; +import com.wyh.admin.service.IExperimentService; +import com.wyh.admin.validate.commons.IdValidate; +import com.wyh.admin.validate.commons.PageValidate; +import com.wyh.common.core.AjaxResult; +import com.wyh.common.core.PageResult; +import com.wyh.common.validator.ExperimentCreateValidate; +import com.wyh.common.validator.ExperimentSearchValidate; +import com.wyh.common.validator.ExperimentUpdateValidate; +import com.wyh.common.validator.annotation.IDMust; +import com.wyh.common.vo.ExperimentDetailVo; +import com.wyh.common.vo.ExperimentListedVo; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("api/experiment") +@Api(tags = "实验信息管理") +public class ExperimentController { + + @Resource + IExperimentService iExperimentService; + + @GetMapping("/list") + @ApiOperation(value="实验信息列表") + public AjaxResult> list(@Validated PageValidate pageValidate, + @Validated ExperimentSearchValidate searchValidate) { + PageResult list = iExperimentService.list(pageValidate, searchValidate); + return AjaxResult.success(list); + } + + @GetMapping("/detail") + @ApiOperation(value="实验信息详情") + public AjaxResult detail(@Validated @IDMust() @RequestParam("id") Integer id) { + ExperimentDetailVo detail = iExperimentService.detail(id); + return AjaxResult.success(detail); + } + + @Log(title = "实验信息新增") + @PostMapping("/add") + @ApiOperation(value="实验信息新增") + public AjaxResult add(@Validated @RequestBody ExperimentCreateValidate createValidate) { + iExperimentService.add(createValidate); + return AjaxResult.success(); + } + + @Log(title = "实验信息编辑") + @PostMapping("/edit") + @ApiOperation(value="实验信息编辑") + public AjaxResult edit(@Validated @RequestBody ExperimentUpdateValidate updateValidate) { + iExperimentService.edit(updateValidate); + return AjaxResult.success(); + } + + @Log(title = "实验信息删除") + @PostMapping("/del") + @ApiOperation(value="实验信息删除") + public AjaxResult del(@Validated @RequestBody IdValidate idValidate) { + iExperimentService.del(idValidate.getId()); + return AjaxResult.success(); + } + +} diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/goods/GoodsController.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/goods/GoodsController.java index 666334d..c50b028 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/goods/GoodsController.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/controller/goods/GoodsController.java @@ -6,6 +6,7 @@ import com.wyh.admin.validate.commons.IdValidate; import com.wyh.admin.validate.commons.PageValidate; import com.wyh.common.core.AjaxResult; import com.wyh.common.core.PageResult; +import com.wyh.common.entity.goods.Goods; import com.wyh.common.validator.annotation.IDMust; import com.wyh.common.validator.goods.GoodsCreateValidate; import com.wyh.common.validator.goods.GoodsSearchValidate; @@ -18,6 +19,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.List; @RestController @RequestMapping("api/goods") @@ -35,6 +37,12 @@ public class GoodsController { return AjaxResult.success(list); } + @GetMapping("/all") + @ApiOperation(value="产品信息列表") + public AjaxResult> all () { + return AjaxResult.success(iGoodsService.all()); + } + @GetMapping("/detail") @ApiOperation(value="产品信息详情") public AjaxResult detail(@Validated @IDMust() @RequestParam("id") Integer id) { diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IExperimentService.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IExperimentService.java new file mode 100644 index 0000000..3fa6b8c --- /dev/null +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IExperimentService.java @@ -0,0 +1,60 @@ +package com.wyh.admin.service; + +import com.wyh.admin.validate.commons.PageValidate; +import com.wyh.common.core.PageResult; +import com.wyh.common.validator.ExperimentCreateValidate; +import com.wyh.common.validator.ExperimentSearchValidate; +import com.wyh.common.validator.ExperimentUpdateValidate; +import com.wyh.common.vo.ExperimentDetailVo; +import com.wyh.common.vo.ExperimentListedVo; + +/** + * 实验信息服务接口类 + * @author wyh + */ +public interface IExperimentService { + + /** + * 实验信息列表 + * + * @author wyh + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + PageResult list(PageValidate pageValidate, ExperimentSearchValidate searchValidate); + + /** + * 实验信息详情 + * + * @author wyh + * @param id 主键ID + * @return ExperimentDetailVo + */ + ExperimentDetailVo detail(Integer id); + + /** + * 实验信息新增 + * + * @author wyh + * @param createValidate 参数 + */ + void add(ExperimentCreateValidate createValidate); + + /** + * 实验信息编辑 + * + * @author wyh + * @param updateValidate 参数 + */ + void edit(ExperimentUpdateValidate updateValidate); + + /** + * 实验信息删除 + * + * @author wyh + * @param id 主键ID + */ + void del(Integer id); + +} diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IGoodsService.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IGoodsService.java index 3a0dc4d..ba9fecc 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IGoodsService.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/IGoodsService.java @@ -2,12 +2,15 @@ package com.wyh.admin.service; import com.wyh.admin.validate.commons.PageValidate; import com.wyh.common.core.PageResult; +import com.wyh.common.entity.goods.Goods; import com.wyh.common.validator.goods.GoodsCreateValidate; import com.wyh.common.validator.goods.GoodsSearchValidate; import com.wyh.common.validator.goods.GoodsUpdateValidate; import com.wyh.common.vo.goods.GoodsDetailVo; import com.wyh.common.vo.goods.GoodsListedVo; +import java.util.List; + /** * 产品信息服务接口类 @@ -58,4 +61,5 @@ public interface IGoodsService { */ void del(Integer id); + List all(); } diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/ExperimentServiceImpl.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/ExperimentServiceImpl.java new file mode 100644 index 0000000..599a2a1 --- /dev/null +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/ExperimentServiceImpl.java @@ -0,0 +1,180 @@ +package com.wyh.admin.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wyh.admin.service.IExperimentService; +import com.wyh.admin.validate.commons.PageValidate; +import com.wyh.common.core.PageResult; +import com.wyh.common.entity.Experiment; +import com.wyh.common.entity.info.ClassInfo; +import com.wyh.common.mapper.ExperimentMapper; +import com.wyh.common.mapper.info.ClassInfoMapper; +import com.wyh.common.util.TimeUtils; +import com.wyh.common.validator.ExperimentCreateValidate; +import com.wyh.common.validator.ExperimentSearchValidate; +import com.wyh.common.validator.ExperimentUpdateValidate; +import com.wyh.common.vo.ExperimentDetailVo; +import com.wyh.common.vo.ExperimentListedVo; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +/** + * 实验信息实现类 + * @author wyh + */ +@Service +public class ExperimentServiceImpl implements IExperimentService { + + @Resource + ExperimentMapper experimentMapper; + + + @Resource + ClassInfoMapper classInfoMapper; + /** + * 实验信息列表 + * + * @author wyh + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + @Override + public PageResult list(PageValidate pageValidate, ExperimentSearchValidate searchValidate) { + Integer page = pageValidate.getPageNo(); + Integer limit = pageValidate.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc(Arrays.asList("sort", "id")); + + experimentMapper.setSearch(queryWrapper, searchValidate, new String[]{ + "like:title:str", + "=:experimentImg@experiment_img:str", + "=:experimentVideo@experiment_video:str", + "=:sort:int", + "=:isShow@is_show:int", + "=:classId@class_id:int", + "=:content:str", + }); + + IPage iPage = experimentMapper.selectPage(new Page<>(page, limit), queryWrapper); + + List list = new LinkedList<>(); + for(Experiment item : iPage.getRecords()) { + ExperimentListedVo vo = new ExperimentListedVo(); + BeanUtils.copyProperties(item, vo); + vo.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime())); + vo.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime())); + if (item.getClassId()!=null) { + ClassInfo classInfo = classInfoMapper.selectById(item.getClassId()); + if (classInfo!=null) { + vo.setClassName(classInfo.getName()); + } + } + list.add(vo); + } + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } + + /** + * 实验信息详情 + * + * @author wyh + * @param id 主键参数 + * @return Experiment + */ + @Override + public ExperimentDetailVo detail(Integer id) { + Experiment model = experimentMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + ExperimentDetailVo vo = new ExperimentDetailVo(); + BeanUtils.copyProperties(model, vo); + return vo; + } + + /** + * 实验信息新增 + * + * @author wyh + * @param createValidate 参数 + */ + @Override + public void add(ExperimentCreateValidate createValidate) { + Experiment model = new Experiment(); + model.setCreateTime(System.currentTimeMillis() / 1000); + model.setUpdateTime(System.currentTimeMillis() / 1000); + model.setTitle(createValidate.getTitle()); + model.setExperimentImg(createValidate.getExperimentImg()); + model.setExperimentVideo(createValidate.getExperimentVideo()); + model.setSort(createValidate.getSort()); + model.setIsShow(createValidate.getIsShow()); + model.setClassId(createValidate.getClassId()); + model.setContent(createValidate.getContent()); + experimentMapper.insert(model); + } + + /** + * 实验信息编辑 + * + * @author wyh + * @param updateValidate 参数 + */ + @Override + public void edit(ExperimentUpdateValidate updateValidate) { + Experiment model = experimentMapper.selectOne( + new QueryWrapper() + .eq("id", updateValidate.getId()) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setId(updateValidate.getId()); + model.setUpdateTime(System.currentTimeMillis() / 1000); + model.setTitle(updateValidate.getTitle()); + model.setExperimentImg(updateValidate.getExperimentImg()); + model.setExperimentVideo(updateValidate.getExperimentVideo()); + model.setSort(updateValidate.getSort()); + model.setIsShow(updateValidate.getIsShow()); + model.setClassId(updateValidate.getClassId()); + model.setContent(updateValidate.getContent()); + experimentMapper.updateById(model); + } + + /** + * 实验信息删除 + * + * @author wyh + * @param id 主键ID + */ + @Override + public void del(Integer id) { + Experiment model = experimentMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setIsDelete(1); + model.setDeleteTime(System.currentTimeMillis() / 1000); + experimentMapper.updateById(model); + } + +} diff --git a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/GoodsServiceImpl.java b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/GoodsServiceImpl.java index d032b0f..139d1e0 100644 --- a/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/GoodsServiceImpl.java +++ b/ZJ-java/ZJ-admin/src/main/java/com/wyh/admin/service/impl/GoodsServiceImpl.java @@ -29,6 +29,7 @@ import org.springframework.util.Assert; import javax.annotation.Resource; import java.util.Arrays; import java.util.LinkedList; +import java.util.List; /** * 产品信息实现类 @@ -212,6 +213,10 @@ public class GoodsServiceImpl implements IGoodsService { goodsMapper.updateById(model); } + @Override + public List all() { + return goodsMapper.selectList(Wrappers.lambdaQuery().eq(Goods::getIsDelete, 0).orderByDesc(Goods::getSort)); + } } diff --git a/ZJ-java/ZJ-common/pom.xml b/ZJ-java/ZJ-common/pom.xml index 86b66c0..f4eeb24 100644 --- a/ZJ-java/ZJ-common/pom.xml +++ b/ZJ-java/ZJ-common/pom.xml @@ -31,6 +31,14 @@ + + com.github.stuxuhai + jpinyin + + + com.belerweb + pinyin4j + org.springframework.boot diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/config/GlobalConfig.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/config/GlobalConfig.java index d75216c..cbff557 100644 --- a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/config/GlobalConfig.java +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/config/GlobalConfig.java @@ -32,7 +32,7 @@ public class GlobalConfig { public static Integer uploadImageSize = 1024 * 1024 * 10; // 上传视频限制 - public static Integer uploadVideoSize = 1024 * 1024 * 30; + public static Integer uploadVideoSize = 1024 * 1024 * 100; // 上传图片扩展 public static String[] uploadImageExt = new String[] {"png", "jpg", "jpeg", "gif", "ico", "bmp"}; diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Experiment.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Experiment.java new file mode 100644 index 0000000..e78d772 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Experiment.java @@ -0,0 +1,54 @@ +package com.wyh.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("实验信息实体") +public class Experiment implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="id", type= IdType.AUTO) + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "是否删除: 0=否, 1=是") + private Integer isDelete; + + @ApiModelProperty(value = "创建时间") + private Long createTime; + + @ApiModelProperty(value = "更新时间") + private Long updateTime; + + @ApiModelProperty(value = "删除时间") + private Long deleteTime; + + @ApiModelProperty(value = "实验标题") + private String title; + + @ApiModelProperty(value = "实验主图") + private String experimentImg; + + @ApiModelProperty(value = "实验视频") + private String experimentVideo; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否展示") + private Integer isShow; + + @ApiModelProperty(value = "分类id") + private Integer classId; + + @ApiModelProperty(value = "实验内容") + private String content; + +} \ No newline at end of file diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Feedback.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Feedback.java new file mode 100644 index 0000000..48c00b9 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/entity/Feedback.java @@ -0,0 +1,42 @@ +package com.wyh.common.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("反馈意见信息实体") +public class Feedback implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value="id", type= IdType.AUTO) + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "是否删除: 0=否, 1=是") + private Integer isDelete; + + @ApiModelProperty(value = "创建时间") + private Long createTime; + + @ApiModelProperty(value = "更新时间") + private Long updateTime; + + @ApiModelProperty(value = "删除时间") + private Long deleteTime; + + @ApiModelProperty(value = "反馈内容") + private String content; + + @ApiModelProperty(value = "图片") + private String image; + + @ApiModelProperty(value = "用户id") + private Integer userId; + +} \ No newline at end of file diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/ExperimentMapper.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/ExperimentMapper.java new file mode 100644 index 0000000..2132f09 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/ExperimentMapper.java @@ -0,0 +1,13 @@ +package com.wyh.common.mapper; + +import com.wyh.common.core.basics.IBaseMapper; +import com.wyh.common.entity.Experiment; +import org.apache.ibatis.annotations.Mapper; + +/** + * 实验信息Mapper + * @author wyh + */ +@Mapper +public interface ExperimentMapper extends IBaseMapper { +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/FeedbackMapper.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/FeedbackMapper.java new file mode 100644 index 0000000..0e3e39d --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/mapper/FeedbackMapper.java @@ -0,0 +1,13 @@ +package com.wyh.common.mapper; + +import com.wyh.common.core.basics.IBaseMapper; +import com.wyh.common.entity.Feedback; +import org.apache.ibatis.annotations.Mapper; + +/** + * 反馈意见信息Mapper + * @author LikeAdmin + */ +@Mapper +public interface FeedbackMapper extends IBaseMapper { +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/ChangeChinesePinyinUtil.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/ChangeChinesePinyinUtil.java new file mode 100644 index 0000000..a3ed538 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/ChangeChinesePinyinUtil.java @@ -0,0 +1,67 @@ +package com.wyh.common.util; + +import com.github.stuxuhai.jpinyin.PinyinException; +import com.github.stuxuhai.jpinyin.PinyinFormat; +import com.github.stuxuhai.jpinyin.PinyinHelper; + +import java.text.Collator; +import java.util.*; + +/** + * @Description TODO + * @Author lgx + * @Time 2023/4/17 + */ +public class ChangeChinesePinyinUtil { + + /** + * 获取姓名全拼和首字母 + * PinyinFormat:WITH_TONE_MARK(声调模式),WITH_TONE_NUMBER(数字代表声调模式),WITHOUT_TONE(无声调模式) + * @param chinese 汉语名称 + * @return fullPinyin : 全拼 simplePinyin : 首字母 groupPinyin:微信用户组第一个字母 + * @throws PinyinException + */ + public static Map changeChinesePinyin(String chinese) throws PinyinException { + Map pinyin = new HashMap(); + + //将中文转化成拼音(全拼) + String fullPinyin = PinyinHelper.convertToPinyinString(chinese,"", PinyinFormat.WITHOUT_TONE); + //将中文转化为简拼模式(各汉字第一个字母组成) + String simplePinyin = PinyinHelper.getShortPinyin(chinese); + //首字母 + String firstPinyin = String.valueOf(simplePinyin.charAt(0)); + + //判断是否多音字 +// System.out.println(PinyinHelper.hasMultiPinyin('啊'));//true + + pinyin.put("fullPinyin", fullPinyin); + pinyin.put("simplePinyin", simplePinyin.toUpperCase()); + pinyin.put("groupPinyin", firstPinyin.toUpperCase()); + return pinyin; + } + /** + * 按拼音首字母分组 + * @param list + * @return + */ + public static Map> getCodeGroup(List list) throws PinyinException{ + Comparator com = Collator.getInstance(java.util.Locale.CHINA); + //按字母排序 + Collections.sort(list, com); + //输出26个字母 + Map> map = new TreeMap>(); + for(int i=1;i<=26;i++){ + String word = String. valueOf((char) (96 + i)). toUpperCase(); + //循环找出首字母一样的数据 + List letter = new ArrayList(); + for (String str : list) { + String code = changeChinesePinyin(str).get("groupPinyin"); + if(word.equals(code)) { + letter.add(str); + } + } + map.put(word, letter); + } + return map; + } +} \ No newline at end of file diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/PinYinUtils.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/PinYinUtils.java new file mode 100644 index 0000000..1fb79c9 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/util/PinYinUtils.java @@ -0,0 +1,44 @@ +package com.wyh.common.util; + +import lombok.extern.slf4j.Slf4j; +import net.sourceforge.pinyin4j.PinyinHelper; +import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; +import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; +import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; +import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; + +@Slf4j +public class PinYinUtils { + + /** + * 获取第一个汉字首字母 + * + * @author liu + */ + public static String getFirst(String str) { + if(StringUtils.isEmpty(str)){ + return null; + } + char[] charArray = str.toCharArray(); + HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); + defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);//设置拼音大小写 + defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);//设置声调格式 + try { + StringBuffer sb=new StringBuffer(); + for (char c:charArray){ + if(!Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) { + continue; + } + String[] hanyuPinyinStringArray = PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat); + if(hanyuPinyinStringArray==null){ + continue; + } + sb.append(hanyuPinyinStringArray[0].charAt(0)); + } + return sb.toString(); + } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) { + log.error("拼音转换失败{}",badHanyuPinyinOutputFormatCombination); + return null; + } + } +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentCreateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentCreateValidate.java new file mode 100644 index 0000000..9f206b3 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentCreateValidate.java @@ -0,0 +1,44 @@ +package com.wyh.common.validator; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Data +@ApiModel("实验信息创建参数") +public class ExperimentCreateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "title参数缺失") + @ApiModelProperty(value = "实验标题") + private String title; + + @NotNull(message = "experimentImg参数缺失") + @ApiModelProperty(value = "实验主图") + private String experimentImg; + + @NotNull(message = "experimentVideo参数缺失") + @ApiModelProperty(value = "实验视频") + private String experimentVideo; + + @NotNull(message = "sort参数缺失") + @ApiModelProperty(value = "排序") + private Integer sort; + + @NotNull(message = "isShow参数缺失") + @ApiModelProperty(value = "是否展示") + private Integer isShow; + + @NotNull(message = "classId参数缺失") + @ApiModelProperty(value = "分类id") + private Integer classId; + + @NotNull(message = "content参数缺失") + @ApiModelProperty(value = "实验内容") + private String content; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentSearchValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentSearchValidate.java new file mode 100644 index 0000000..ec6825f --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentSearchValidate.java @@ -0,0 +1,35 @@ +package com.wyh.common.validator; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.io.Serializable; + +@Data +@ApiModel("实验信息搜素参数") +public class ExperimentSearchValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "实验标题") + private String title; + + @ApiModelProperty(value = "实验主图") + private String experimentImg; + + @ApiModelProperty(value = "实验视频") + private String experimentVideo; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否展示") + private Integer isShow; + + @ApiModelProperty(value = "分类id") + private Integer classId; + + @ApiModelProperty(value = "实验内容") + private String content; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentUpdateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentUpdateValidate.java new file mode 100644 index 0000000..04c7830 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/ExperimentUpdateValidate.java @@ -0,0 +1,53 @@ +package com.wyh.common.validator; + +import com.wyh.common.validator.annotation.IDMust; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 实验信息参数 + * @author wyh + */ +@Data +@ApiModel("实验信息更新参数") +public class ExperimentUpdateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @IDMust(message = "id参数必传且需大于0") + @ApiModelProperty(value = "主键") + private Integer id; + + @NotNull(message = "title参数缺失") + @ApiModelProperty(value = "实验标题") + private String title; + + @NotNull(message = "experimentImg参数缺失") + @ApiModelProperty(value = "实验主图") + private String experimentImg; + + @NotNull(message = "experimentVideo参数缺失") + @ApiModelProperty(value = "实验视频") + private String experimentVideo; + + @NotNull(message = "sort参数缺失") + @ApiModelProperty(value = "排序") + private Integer sort; + + @NotNull(message = "isShow参数缺失") + @ApiModelProperty(value = "是否展示") + private Integer isShow; + + @NotNull(message = "classId参数缺失") + @ApiModelProperty(value = "分类id") + private Integer classId; + + @NotNull(message = "content参数缺失") + @ApiModelProperty(value = "实验内容") + private String content; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/FeedbackCreateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/FeedbackCreateValidate.java new file mode 100644 index 0000000..3b0c38c --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/FeedbackCreateValidate.java @@ -0,0 +1,28 @@ +package com.wyh.common.validator; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +@Data +@ApiModel("反馈意见信息创建参数") +public class FeedbackCreateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "content参数缺失") + @ApiModelProperty(value = "反馈内容") + private String content; + + @NotNull(message = "image参数缺失") + @ApiModelProperty(value = "图片") + private String image; + + @NotNull(message = "userId参数缺失") + @ApiModelProperty(value = "用户id") + private Integer userId; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/FeedbackSearchValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/FeedbackSearchValidate.java new file mode 100644 index 0000000..b53be72 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/FeedbackSearchValidate.java @@ -0,0 +1,23 @@ +package com.wyh.common.validator; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import java.io.Serializable; + +@Data +@ApiModel("反馈意见信息搜素参数") +public class FeedbackSearchValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "反馈内容") + private String content; + + @ApiModelProperty(value = "图片") + private String image; + + @ApiModelProperty(value = "用户id") + private Integer userId; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/FeedbackUpdateValidate.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/FeedbackUpdateValidate.java new file mode 100644 index 0000000..7af59e5 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/validator/FeedbackUpdateValidate.java @@ -0,0 +1,37 @@ +package com.wyh.common.validator; + +import com.wyh.common.validator.annotation.IDMust; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 反馈意见信息参数 + * @author LikeAdmin + */ +@Data +@ApiModel("反馈意见信息更新参数") +public class FeedbackUpdateValidate implements Serializable { + + private static final long serialVersionUID = 1L; + + @IDMust(message = "id参数必传且需大于0") + @ApiModelProperty(value = "主键") + private Integer id; + + @NotNull(message = "content参数缺失") + @ApiModelProperty(value = "反馈内容") + private String content; + + @NotNull(message = "image参数缺失") + @ApiModelProperty(value = "图片") + private String image; + + @NotNull(message = "userId参数缺失") + @ApiModelProperty(value = "用户id") + private Integer userId; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/AreaVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/AreaVo.java new file mode 100644 index 0000000..44c0888 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/AreaVo.java @@ -0,0 +1,12 @@ +package com.wyh.common.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class AreaVo { + + private String index; + private List name; +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/ExperimentDetailVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/ExperimentDetailVo.java new file mode 100644 index 0000000..724d85f --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/ExperimentDetailVo.java @@ -0,0 +1,40 @@ +package com.wyh.common.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("实验信息详情Vo") +public class ExperimentDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "实验标题") + private String title; + + @ApiModelProperty(value = "实验主图") + private String experimentImg; + + @ApiModelProperty(value = "实验视频") + private String experimentVideo; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否展示") + private Integer isShow; + + @ApiModelProperty(value = "分类id") + private Integer classId; + + @ApiModelProperty(value = "实验内容") + private String content; + + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/ExperimentListedVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/ExperimentListedVo.java new file mode 100644 index 0000000..00752f9 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/ExperimentListedVo.java @@ -0,0 +1,46 @@ +package com.wyh.common.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("实验信息列表Vo") +public class ExperimentListedVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "创建时间") + private String createTime; + + @ApiModelProperty(value = "更新时间") + private String updateTime; + + @ApiModelProperty(value = "实验标题") + private String title; + + @ApiModelProperty(value = "实验主图") + private String experimentImg; + + @ApiModelProperty(value = "实验视频") + private String experimentVideo; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否展示") + private Integer isShow; + + @ApiModelProperty(value = "分类id") + private Integer classId; + + @ApiModelProperty(value = "分类名称") + private String className; + + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/FeedbackDetailVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/FeedbackDetailVo.java new file mode 100644 index 0000000..3954a6c --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/FeedbackDetailVo.java @@ -0,0 +1,28 @@ +package com.wyh.common.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("反馈意见信息详情Vo") +public class FeedbackDetailVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "反馈内容") + private String content; + + @ApiModelProperty(value = "图片") + private String image; + + @ApiModelProperty(value = "用户id") + private Integer userId; + + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/FeedbackListedVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/FeedbackListedVo.java new file mode 100644 index 0000000..11e1c24 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/FeedbackListedVo.java @@ -0,0 +1,31 @@ +package com.wyh.common.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel("反馈意见信息列表Vo") +public class FeedbackListedVo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "主键") + private Integer id; + + @ApiModelProperty(value = "创建时间") + private String createTime; + + @ApiModelProperty(value = "更新时间") + private String updateTime; + + @ApiModelProperty(value = "图片") + private String image; + + @ApiModelProperty(value = "用户id") + private Integer userId; + + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/ResponseDataVo.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/ResponseDataVo.java new file mode 100644 index 0000000..e5c3e44 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/ResponseDataVo.java @@ -0,0 +1,18 @@ +package com.wyh.common.vo; + + +import lombok.Data; + +import java.util.List; + +@Data +public class ResponseDataVo { + + + private String code; + private String adcode; + private String name; + private String center; + private String level; + private List districts; +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/WxCityForClientVO.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/WxCityForClientVO.java new file mode 100644 index 0000000..d0a2821 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/WxCityForClientVO.java @@ -0,0 +1,10 @@ +package com.wyh.common.vo; + +import lombok.Data; + +@Data +public class WxCityForClientVO { + private String id; + private String name; + +} diff --git a/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/WxMainCitysForClientVO.java b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/WxMainCitysForClientVO.java new file mode 100644 index 0000000..51970b0 --- /dev/null +++ b/ZJ-java/ZJ-common/src/main/java/com/wyh/common/vo/WxMainCitysForClientVO.java @@ -0,0 +1,27 @@ +package com.wyh.common.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @Description TODO 小程序首页城市下拉显示层 + * @Author lgx + * @Time 2023/3/27 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class WxMainCitysForClientVO { + + /** + * 首字母 + */ + private String index; + /** + * 城市集合 + */ + private List data; +} \ No newline at end of file diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CpspController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CpspController.java new file mode 100644 index 0000000..9f1dcc8 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/CpspController.java @@ -0,0 +1,68 @@ +package com.wyh.front.controller; + +import com.github.stuxuhai.jpinyin.PinyinException; +import com.google.gson.Gson; +import com.wyh.common.aop.NotLogin; +import com.wyh.common.util.ChangeChinesePinyinUtil; +import com.wyh.common.util.HttpUtils; +import com.wyh.common.vo.ResponseDataVo; +import com.wyh.common.vo.WxCityForClientVO; +import com.wyh.common.vo.WxMainCitysForClientVO; +import io.swagger.annotations.Api; +import org.springframework.beans.BeanUtils; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@RestController +@Api(tags = "城市分类(首字母)") +@RequestMapping("front/cpsp") +public class CpspController { + + + @NotLogin + @GetMapping("/getCity") + public Map> getCity(){ + String url="https://restapi.amap.com/v3/config/district"; + + String s = HttpUtils.sendPost(url, "key=6921542276811edc857184b87bf4fb0e&subdistrict=2"); + ResponseDataVo jsonObject = new Gson().fromJson(s, ResponseDataVo.class); + List districts = jsonObject.getDistricts().get(0).getDistricts(); + List cities = new ArrayList<>(); + for (ResponseDataVo district : districts) { + cities.addAll(district.getDistricts()); + } + Map collect = cities.stream().collect(Collectors.toMap(ResponseDataVo::getName, ResponseDataVo -> ResponseDataVo)); + List collect1 = collect.keySet().stream().collect(Collectors.toList()); + Map> result = new HashMap<>(); + + try { + Map> codeGroup = ChangeChinesePinyinUtil.getCodeGroup(collect1); + List citys = new ArrayList<>(); + codeGroup.forEach((k,v) -> { + WxMainCitysForClientVO citysForLetter = new WxMainCitysForClientVO(); + citysForLetter.setIndex(k); + List list = new ArrayList<>(); + v.forEach(i->{ + WxCityForClientVO vo = new WxCityForClientVO(); + BeanUtils.copyProperties(collect.get(i),vo); + list.add(vo.getName()); + }); + citysForLetter.setData(list); + citys.add(citysForLetter); + }); + result.put("data",citys); + } catch (PinyinException e) { + throw new RuntimeException(e); + } + + return result; + + } +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/FeedbackController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/FeedbackController.java new file mode 100644 index 0000000..0364e60 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/FeedbackController.java @@ -0,0 +1,66 @@ +package com.wyh.front.controller; + + +import com.wyh.common.core.AjaxResult; +import com.wyh.common.core.PageResult; +import com.wyh.common.validator.FeedbackCreateValidate; +import com.wyh.common.validator.FeedbackSearchValidate; +import com.wyh.common.validator.FeedbackUpdateValidate; +import com.wyh.common.validator.annotation.IDMust; +import com.wyh.common.vo.FeedbackDetailVo; +import com.wyh.common.vo.FeedbackListedVo; +import com.wyh.front.service.IFeedbackService; +import com.wyh.front.validate.common.IdValidate; +import com.wyh.front.validate.common.PageValidate; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("api/feedback") +@Api(tags = "反馈意见信息") +public class FeedbackController { + + @Resource + IFeedbackService iFeedbackService; + + @GetMapping("/list") + @ApiOperation(value="反馈意见信息列表") + public AjaxResult> list(@Validated PageValidate pageValidate, + @Validated FeedbackSearchValidate searchValidate) { + PageResult list = iFeedbackService.list(pageValidate, searchValidate); + return AjaxResult.success(list); + } + + @GetMapping("/detail") + @ApiOperation(value="反馈意见信息详情") + public AjaxResult detail(@Validated @IDMust() @RequestParam("id") Integer id) { + FeedbackDetailVo detail = iFeedbackService.detail(id); + return AjaxResult.success(detail); + } + + @PostMapping("/add") + @ApiOperation(value="反馈意见信息新增") + public AjaxResult add(@Validated @RequestBody FeedbackCreateValidate createValidate) { + iFeedbackService.add(createValidate); + return AjaxResult.success(); + } + + @PostMapping("/edit") + @ApiOperation(value="反馈意见信息编辑") + public AjaxResult edit(@Validated @RequestBody FeedbackUpdateValidate updateValidate) { + iFeedbackService.edit(updateValidate); + return AjaxResult.success(); + } + + @PostMapping("/del") + @ApiOperation(value="反馈意见信息删除") + public AjaxResult del(@Validated @RequestBody IdValidate idValidate) { + iFeedbackService.del(idValidate.getId()); + return AjaxResult.success(); + } + +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/UserAddressController.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/UserAddressController.java index d0eae7d..99f2666 100644 --- a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/UserAddressController.java +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/controller/UserAddressController.java @@ -21,7 +21,7 @@ import javax.annotation.Resource; @RestController @RequestMapping("front/address") -@Api(tags = "地址信息管理") +@Api(tags = "地址信息") public class UserAddressController { @Resource diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IExperimentService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IExperimentService.java new file mode 100644 index 0000000..d1fd2b5 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IExperimentService.java @@ -0,0 +1,60 @@ +package com.wyh.front.service; + +import com.wyh.admin.validate.commons.PageValidate; +import com.wyh.admin.validate.ExperimentCreateValidate; +import com.wyh.admin.validate.ExperimentUpdateValidate; +import com.wyh.admin.validate.ExperimentSearchValidate; +import com.wyh.admin.vo.ExperimentListedVo; +import com.wyh.admin.vo.ExperimentDetailVo; +import com.wyh.common.core.PageResult; + +/** + * 实验信息服务接口类 + * @author wyh + */ +public interface IExperimentService { + + /** + * 实验信息列表 + * + * @author wyh + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + PageResult list(PageValidate pageValidate, ExperimentSearchValidate searchValidate); + + /** + * 实验信息详情 + * + * @author wyh + * @param id 主键ID + * @return ExperimentDetailVo + */ + ExperimentDetailVo detail(Integer id); + + /** + * 实验信息新增 + * + * @author wyh + * @param createValidate 参数 + */ + void add(ExperimentCreateValidate createValidate); + + /** + * 实验信息编辑 + * + * @author wyh + * @param updateValidate 参数 + */ + void edit(ExperimentUpdateValidate updateValidate); + + /** + * 实验信息删除 + * + * @author wyh + * @param id 主键ID + */ + void del(Integer id); + +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IFeedbackService.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IFeedbackService.java new file mode 100644 index 0000000..5f2c66a --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/IFeedbackService.java @@ -0,0 +1,61 @@ +package com.wyh.front.service; + + +import com.wyh.common.core.PageResult; +import com.wyh.common.validator.FeedbackCreateValidate; +import com.wyh.common.validator.FeedbackSearchValidate; +import com.wyh.common.validator.FeedbackUpdateValidate; +import com.wyh.common.vo.FeedbackDetailVo; +import com.wyh.common.vo.FeedbackListedVo; +import com.wyh.front.validate.common.PageValidate; + +/** + * 反馈意见信息服务接口类 + * @author LikeAdmin + */ +public interface IFeedbackService { + + /** + * 反馈意见信息列表 + * + * @author LikeAdmin + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + PageResult list(PageValidate pageValidate, FeedbackSearchValidate searchValidate); + + /** + * 反馈意见信息详情 + * + * @author LikeAdmin + * @param id 主键ID + * @return FeedbackDetailVo + */ + FeedbackDetailVo detail(Integer id); + + /** + * 反馈意见信息新增 + * + * @author LikeAdmin + * @param createValidate 参数 + */ + void add(FeedbackCreateValidate createValidate); + + /** + * 反馈意见信息编辑 + * + * @author LikeAdmin + * @param updateValidate 参数 + */ + void edit(FeedbackUpdateValidate updateValidate); + + /** + * 反馈意见信息删除 + * + * @author LikeAdmin + * @param id 主键ID + */ + void del(Integer id); + +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ExperimentServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ExperimentServiceImpl.java new file mode 100644 index 0000000..fa6c19a --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/ExperimentServiceImpl.java @@ -0,0 +1,171 @@ +package com.wyh.front.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.github.yulichang.query.MPJQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wyh.admin.validate.commons.PageValidate; +import com.wyh.admin.service.IExperimentService; +import com.wyh.admin.validate.ExperimentCreateValidate; +import com.wyh.admin.validate.ExperimentUpdateValidate; +import com.wyh.admin.validate.ExperimentSearchValidate; +import com.wyh.admin.vo.ExperimentListedVo; +import com.wyh.admin.vo.ExperimentDetailVo; +import com.wyh.common.config.GlobalConfig; +import com.wyh.common.core.PageResult; +import com.wyh.common.entity.Experiment; +import com.wyh.common.mapper.ExperimentMapper; +import com.wyh.common.util.ListUtils; +import com.wyh.common.util.TimeUtils; +import com.wyh.common.util.UrlUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; +import java.util.*; + +/** + * 实验信息实现类 + * @author wyh + */ +@Service +public class ExperimentServiceImpl implements IExperimentService { + + @Resource + ExperimentMapper experimentMapper; + + /** + * 实验信息列表 + * + * @author wyh + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + @Override + public PageResult list(PageValidate pageValidate, ExperimentSearchValidate searchValidate) { + Integer page = pageValidate.getPageNo(); + Integer limit = pageValidate.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc(Arrays.asList("sort", "id")); + + experimentMapper.setSearch(queryWrapper, searchValidate, new String[]{ + "like:title:str", + "=:experimentImg@experiment_img:str", + "=:experimentVideo@experiment_video:str", + "=:sort:int", + "=:isShow@is_show:int", + "=:classId@class_id:int", + "=:content:str", + }); + + IPage iPage = experimentMapper.selectPage(new Page<>(page, limit), queryWrapper); + + List list = new LinkedList<>(); + for(Experiment item : iPage.getRecords()) { + ExperimentListedVo vo = new ExperimentListedVo(); + BeanUtils.copyProperties(item, vo); + vo.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime())); + vo.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime())); + list.add(vo); + } + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } + + /** + * 实验信息详情 + * + * @author wyh + * @param id 主键参数 + * @return Experiment + */ + @Override + public ExperimentDetailVo detail(Integer id) { + Experiment model = experimentMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + ExperimentDetailVo vo = new ExperimentDetailVo(); + BeanUtils.copyProperties(model, vo); + return vo; + } + + /** + * 实验信息新增 + * + * @author wyh + * @param createValidate 参数 + */ + @Override + public void add(ExperimentCreateValidate createValidate) { + Experiment model = new Experiment(); + model.setCreateTime(System.currentTimeMillis() / 1000); + model.setUpdateTime(System.currentTimeMillis() / 1000); + model.setTitle(createValidate.getTitle()); + model.setExperimentImg(createValidate.getExperimentImg()); + model.setExperimentVideo(createValidate.getExperimentVideo()); + model.setSort(createValidate.getSort()); + model.setIsShow(createValidate.getIsShow()); + model.setClassId(createValidate.getClassId()); + model.setContent(createValidate.getContent()); + experimentMapper.insert(model); + } + + /** + * 实验信息编辑 + * + * @author wyh + * @param updateValidate 参数 + */ + @Override + public void edit(ExperimentUpdateValidate updateValidate) { + Experiment model = experimentMapper.selectOne( + new QueryWrapper() + .eq("id", updateValidate.getId()) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setId(updateValidate.getId()); + model.setUpdateTime(System.currentTimeMillis() / 1000); + model.setTitle(updateValidate.getTitle()); + model.setExperimentImg(updateValidate.getExperimentImg()); + model.setExperimentVideo(updateValidate.getExperimentVideo()); + model.setSort(updateValidate.getSort()); + model.setIsShow(updateValidate.getIsShow()); + model.setClassId(updateValidate.getClassId()); + model.setContent(updateValidate.getContent()); + experimentMapper.updateById(model); + } + + /** + * 实验信息删除 + * + * @author wyh + * @param id 主键ID + */ + @Override + public void del(Integer id) { + Experiment model = experimentMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setIsDelete(1); + model.setDeleteTime(System.currentTimeMillis() / 1000); + experimentMapper.updateById(model); + } + +} diff --git a/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/FeedbackServiceImpl.java b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/FeedbackServiceImpl.java new file mode 100644 index 0000000..3ce4f45 --- /dev/null +++ b/ZJ-java/ZJ-front/src/main/java/com/wyh/front/service/impl/FeedbackServiceImpl.java @@ -0,0 +1,159 @@ +package com.wyh.front.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wyh.common.core.PageResult; +import com.wyh.common.entity.Feedback; +import com.wyh.common.mapper.FeedbackMapper; +import com.wyh.common.util.TimeUtils; +import com.wyh.common.util.UrlUtils; +import com.wyh.common.validator.FeedbackCreateValidate; +import com.wyh.common.validator.FeedbackSearchValidate; +import com.wyh.common.validator.FeedbackUpdateValidate; +import com.wyh.common.vo.FeedbackDetailVo; +import com.wyh.common.vo.FeedbackListedVo; +import com.wyh.front.service.IFeedbackService; +import com.wyh.front.validate.common.PageValidate; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import javax.annotation.Resource; +import java.util.LinkedList; +import java.util.List; + +/** + * 反馈意见信息实现类 + * @author LikeAdmin + */ +@Service +public class FeedbackServiceImpl implements IFeedbackService { + + @Resource + FeedbackMapper feedbackMapper; + + /** + * 反馈意见信息列表 + * + * @author LikeAdmin + * @param pageValidate 分页参数 + * @param searchValidate 搜索参数 + * @return PageResult + */ + @Override + public PageResult list(PageValidate pageValidate, FeedbackSearchValidate searchValidate) { + Integer page = pageValidate.getPageNo(); + Integer limit = pageValidate.getPageSize(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("is_delete", 0); + queryWrapper.orderByDesc("id"); + + feedbackMapper.setSearch(queryWrapper, searchValidate, new String[]{ + "=:content:str", + "=:image:str", + "=:userId@user_id:int", + }); + + IPage iPage = feedbackMapper.selectPage(new Page<>(page, limit), queryWrapper); + + List list = new LinkedList<>(); + for(Feedback item : iPage.getRecords()) { + FeedbackListedVo vo = new FeedbackListedVo(); + BeanUtils.copyProperties(item, vo); + vo.setImage(UrlUtils.toAbsoluteUrl(item.getImage())); + vo.setCreateTime(TimeUtils.timestampToDate(item.getCreateTime())); + vo.setUpdateTime(TimeUtils.timestampToDate(item.getUpdateTime())); + list.add(vo); + } + + return PageResult.iPageHandle(iPage.getTotal(), iPage.getCurrent(), iPage.getSize(), list); + } + + /** + * 反馈意见信息详情 + * + * @author LikeAdmin + * @param id 主键参数 + * @return Feedback + */ + @Override + public FeedbackDetailVo detail(Integer id) { + Feedback model = feedbackMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在"); + + FeedbackDetailVo vo = new FeedbackDetailVo(); + BeanUtils.copyProperties(model, vo); + vo.setImage(UrlUtils.toAbsoluteUrl(model.getImage())); + return vo; + } + + /** + * 反馈意见信息新增 + * + * @author LikeAdmin + * @param createValidate 参数 + */ + @Override + public void add(FeedbackCreateValidate createValidate) { + Feedback model = new Feedback(); + model.setCreateTime(System.currentTimeMillis() / 1000); + model.setUpdateTime(System.currentTimeMillis() / 1000); + model.setContent(createValidate.getContent()); + model.setImage(UrlUtils.toRelativeUrl(createValidate.getImage())); + model.setUserId(createValidate.getUserId()); + feedbackMapper.insert(model); + } + + /** + * 反馈意见信息编辑 + * + * @author LikeAdmin + * @param updateValidate 参数 + */ + @Override + public void edit(FeedbackUpdateValidate updateValidate) { + Feedback model = feedbackMapper.selectOne( + new QueryWrapper() + .eq("id", updateValidate.getId()) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setId(updateValidate.getId()); + model.setUpdateTime(System.currentTimeMillis() / 1000); + model.setContent(updateValidate.getContent()); + model.setImage(UrlUtils.toRelativeUrl(updateValidate.getImage())); + model.setUserId(updateValidate.getUserId()); + feedbackMapper.updateById(model); + } + + /** + * 反馈意见信息删除 + * + * @author LikeAdmin + * @param id 主键ID + */ + @Override + public void del(Integer id) { + Feedback model = feedbackMapper.selectOne( + new QueryWrapper() + .eq("id", id) + .eq("is_delete", 0) + .last("limit 1")); + + Assert.notNull(model, "数据不存在!"); + + model.setIsDelete(1); + model.setDeleteTime(System.currentTimeMillis() / 1000); + feedbackMapper.updateById(model); + } + +} diff --git a/ZJ-java/pom.xml b/ZJ-java/pom.xml index e58d1e3..efc8518 100644 --- a/ZJ-java/pom.xml +++ b/ZJ-java/pom.xml @@ -53,11 +53,24 @@ 4.5.16 4.4.0 + 2.5.0 + 1.1.8 + + com.github.stuxuhai + jpinyin + ${jyin.version} + + + + com.belerweb + pinyin4j + ${pinyin.version} + org.springframework.boot diff --git a/admin/src/api/experiment.ts b/admin/src/api/experiment.ts new file mode 100644 index 0000000..8606db9 --- /dev/null +++ b/admin/src/api/experiment.ts @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 实验信息列表 +export function experimentLists(params?: Record) { + return request.get({ url: '/experiment/list', params }) +} + +// 实验信息详情 +export function experimentDetail(params: Record) { + return request.get({ url: '/experiment/detail', params }) +} + +// 实验信息新增 +export function experimentAdd(params: Record) { + return request.post({ url: '/experiment/add', params }) +} + +// 实验信息编辑 +export function experimentEdit(params: Record) { + return request.post({ url: '/experiment/edit', params }) +} + +// 实验信息删除 +export function experimentDelete(params: Record) { + return request.post({ url: '/experiment/del', params }) +} diff --git a/admin/src/api/goods.ts b/admin/src/api/goods.ts index baa33f7..f6df630 100644 --- a/admin/src/api/goods.ts +++ b/admin/src/api/goods.ts @@ -24,3 +24,7 @@ export function goodsEdit(params: Record) { export function goodsDelete(params: Record) { return request.post({ url: '/goods/del', params }) } + +export function goodsAll(){ + return request.get({url:'/goods/all'}) +} diff --git a/admin/src/views/experiment/edit.vue b/admin/src/views/experiment/edit.vue new file mode 100644 index 0000000..d879c22 --- /dev/null +++ b/admin/src/views/experiment/edit.vue @@ -0,0 +1,222 @@ + + diff --git a/admin/src/views/experiment/index.vue b/admin/src/views/experiment/index.vue new file mode 100644 index 0000000..c95be34 --- /dev/null +++ b/admin/src/views/experiment/index.vue @@ -0,0 +1,158 @@ + +