伴随着信息科技的高效发展与互联网技术的日益健全,大家越来越注重电商。生鲜交易小程序是电商的一个典型性代表。市场从之前的路边货市场变化到网络里,根据交易系统进行了交易。而生鲜交易小程序带来农户省时省力、省劲、划算的货品交易平台,它可使农户们灵活运用信息科技的优点去解决生鲜,越来越更加顺畅、便捷、便捷,能够满足用户快速地享受在线购物带来的生活。为后能比较方便地达到生鲜的合理利用,科学研究现阶段交易的发展状况,根据要求、可行性研究,设计方案完成一个生鲜交易小程序。
本系统主要是完成灵便、可扩展性强、客户交互方式好平台。 系统给予强悍的数据库管理、精确高效率的数据分析、迅速灵活多变的数据统计服务。 采用前端微信小程序技术,设计界面简约、易用性高、良好的人际交互体验; 采用后端SpringbBoot Mybatis等新技术,搭建便于管理方法、易上手、高安全系数、协调能力、可扩展性、高效率、动态性、互动式浏览数据库的管理系统; 完成形象化、科学、简单生鲜交易小程序。
关键字: 生鲜交易;微信小程序;SpringBoot;Mysql
【706】基于springboot生鲜交易商城微信小程序源码和论文
ABSTRACT
With the efficient development of information technology and the increasingly sound Internet technology, people are paying more and more attention to e-commerce. The fresh food trading applet is a typical representative of e-commerce. The market has changed from the previous roadside goods market to the network, where transactions are conducted according to the trading system. The fresh food trading applet brings farmers a time-saving, labor-saving and cost-effective goods trading platform. It enables farmers to flexibly use the advantages of information technology to solve fresh food, which is more and more smooth, convenient and convenient, and can satisfy users to quickly enjoy the life brought by online shopping. In order to achieve the reasonable utilization of fresh food more conveniently in the future, scientific research on the development of the current trading situation, design a scheme to complete a small program of fresh food trading according to the requirements and feasibility study。
This system is mainly a platform with convenient, strong scalability and good customer interaction. The system provides powerful database management, accurate and efficient data analysis, and fast and flexible data statistics services. The front-end WeChat applet technology is adopted to design a simple interface, high usability and good interpersonal interaction experience; New technologies such as SpringbBoot Mybatis on the back end are adopted to build a management system that is easy to manage, easy to use, high safety factor, coordination ability, scalability, high efficiency, dynamic and interactive to browse the database; Complete visualized, scientific and simple fresh food trading applet。
Keywords: fresh food transaction; WeChat applet; SpringBoot; Mysql
生鲜商城,对国家经济的发展和鹏飞以及对人类社会的文明带来了巨大影响。生鲜行业已成为许多国家的支柱产业,随着人们生活水平以及生鲜性能的不断提高,人们对生鲜的消费和需求也越来越旺盛,世界生鲜行业也保持庞大的市场需求和市场规模。近年来,中国生鲜市场发展迅猛,以接近 37%的速度增长,巨大的市场容量和可观的经济效益,引起各生鲜厂家纷纷加大投资,生鲜市场烽烟四起,生鲜销售策略和模式频出,竞争已是空前的激烈,在此形势下,一种介于生产厂家和用户之间的桥梁,生鲜销售公司正在不断的产生和发展壮大。
通过网络进行生鲜销售,是这个时代发展的必然结果,是随着网络的普及和电子商务概念的兴盛而兴起的。这种全新出现的新型生鲜销售形式,与传统通过生鲜店面进行销售的方式相比优势显著: 1,降低了生鲜销售成本;2,改变生鲜传统的了解和购买方式,使用网络平台了解生鲜信息并购买,使得商业活动没有空间和时间的限制;3,生鲜信息的传递更有效率和直观,新车信息上传后,人们可以立即了解咨询,交易可以马上进行,从而大大提高了生鲜交易的效率。正是由于这些巨大的优势,生鲜销售平台才能得以迅速地开拓市场。生鲜销售平台的主要是借助平台作为交易平台,将生鲜的各项指标,优势劣势,精美图片以发布到网络中,人们能够借助网络登录生鲜销售平台来查看各种生鲜的信息并提交订单订购或者预定生鲜,实现在线交易。开发之前需要做好详细的系统架构,这种系统架构内容包括了市场需求分析,平台前端设计,后台设计,技术可行性分析,框架组合分析等 。
1.2 课题目的及意义
生鲜销售信息管理,是企业管理生鲜销售的一个不可缺少的平台。在以往,传统的信息管理方式主要以人为主体,人们投入大量时间和精力去操作, 存在着管理上的局限性、主观性和片面性,人为的管理手段已经无法适应互联网时代的发展,这种方法无疑是在浪费大量的人力和财力,而在信息高速发达的时代, 主要是以计算机为处理手段。本系统将取代传统的手动操作管理,实现人和计算机的完美结合,充分发挥人和机器的特长,能对生鲜销售信息的数据进行收集、记录、统计和导出的系统。灵活和可配置地为管理人员提供直观可视化、科学化和简约化管理。本系统的开发能一定程度上提高企业工作效率,能够比较全面、准确地掌握企业生鲜销售的信息并进行统计、查询和管理。建立现代化生鲜销售信息管理体制,统一化、规范化和流程化企业各部门之间的业务流程,实现各部门协调合作、无纸办公。
package com.example.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.example.common.Result;
import com.example.common.ResultCode;
import com.example.entity.UserInfo;
import com.example.entity.Account;
import com.example.exception.CustomException;
import com.example.service.UserInfoService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
@RestController
public class AccountController {
@Resource
private UserInfoService userInfoService;
@GetMapping("/logout")
public Result logout(HttpServletRequest request) {
request.getSession().setAttribute("user", null);
return Result.success();
}
@GetMapping("/auth")
public Result getAuth(HttpServletRequest request) {
Object user = request.getSession().getAttribute("user");
if(user == null) {
return Result.error("401", "未登录");
}
return Result.success((UserInfo)user);
}
/**
* 注册
*/
@PostMapping("/register")
public Result<UserInfo> register(@RequestBody UserInfo userInfo, HttpServletRequest request) {
if (StrUtil.isBlank(userInfo.getName()) || StrUtil.isBlank(userInfo.getPassword())) {
throw new CustomException(ResultCode.PARAM_ERROR);
}
UserInfo register = userInfoService.add(userInfo);
HttpSession session = request.getSession();
session.setAttribute("user", register);
session.setMaxInactiveInterval(120 * 60);
return Result.success(register);
}
/**
* 后台登录
*/
@PostMapping("/login")
public Result<UserInfo> login(@RequestBody UserInfo userInfo, HttpServletRequest request) {
if (StrUtil.isBlank(userInfo.getName()) || StrUtil.isBlank(userInfo.getPassword())) {
throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
}
UserInfo login = userInfoService.login(userInfo.getName(), userInfo.getPassword());
HttpSession session = request.getSession();
session.setAttribute("user", login);
session.setMaxInactiveInterval(120 * 60);
return Result.success(login);
}
/**
* 微信登录
*/
@PostMapping("/wxlogin")
public Result<UserInfo> wxlogin(@RequestBody UserInfo userInfo, HttpServletRequest request) {
if (StrUtil.isBlank(userInfo.getName()) || StrUtil.isBlank(userInfo.getPassword())) {
throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
}
UserInfo login = userInfoService.wxlogin(userInfo.getName(), userInfo.getPassword());
if (login==null) {
return Result.error("500","用户不存在");
}
if (!SecureUtil.md5(userInfo.getPassword()).equalsIgnoreCase(login.getPassword())) {
return Result.error("500","账号或密码错误");
}
if(login.getLevel()!=3){
return Result.error("500","请用顾客账号登录微信端");
}
HttpSession session = request.getSession();
session.setAttribute("user", login);
session.setMaxInactiveInterval(120 * 60);
return Result.success(login);
}
/**
* 微信register
*/
@PostMapping("/wxregister")
public Result<UserInfo> wxregister(@RequestBody UserInfo userInfo, HttpServletRequest request) {
if (StrUtil.isBlank(userInfo.getName()) || StrUtil.isBlank(userInfo.getPassword())) {
throw new CustomException(ResultCode.USER_ACCOUNT_ERROR);
}
UserInfo login = userInfoService.wxlogin(userInfo.getName(), userInfo.getPassword());
if (login!=null) {
return Result.error("500","用户名已存在");
}
userInfo.setLevel(3);
userInfo.setAccount(0.00);
userInfoService.add(userInfo);
return Result.success();
}
/**
* 重置密码为123456
*/
@PutMapping("/resetPassword")
public Result<UserInfo> resetPassword(@RequestParam String username) {
return Result.success(userInfoService.resetPassword(username));
}
@PutMapping("/updatePassword")
public Result updatePassword(@RequestBody UserInfo info, HttpServletRequest request) {
UserInfo account = (UserInfo) request.getSession().getAttribute("user");
if (account == null) {
return Result.error(ResultCode.USER_NOT_EXIST_ERROR.code, ResultCode.USER_NOT_EXIST_ERROR.msg);
}
String oldPassword = SecureUtil.md5(info.getPassword());
if (!oldPassword.equals(account.getPassword())) {
return Result.error(ResultCode.PARAM_PASSWORD_ERROR.code, ResultCode.PARAM_PASSWORD_ERROR.msg);
}
account.setPassword(SecureUtil.md5(info.getNewPassword()));
userInfoService.update(account);
// 清空session,让用户重新登录
request.getSession().setAttribute("user", null);
return Result.success();
}
@GetMapping("/mini/userInfo/{id}/{level}")
public Result<Account> miniLogin(@PathVariable Long id, @PathVariable Integer level) {
Account account = userInfoService.findByIdAndLevel(id, level);
return Result.success(account);
}
/**
*
* 修改密码
*/
@PutMapping("/changePassword")
public Result<Boolean> changePassword(@RequestParam Long id,
@RequestParam String newPassword) {
return Result.success(userInfoService.changePassword(id, newPassword));
}
@GetMapping("/getSession")
public Result<Map<String, String>> getSession(HttpServletRequest request) {
UserInfo account = (UserInfo) request.getSession().getAttribute("user");
if (account == null) {
return Result.success(new HashMap<>(1));
}
Map<String, String> map = new HashMap<>(1);
map.put("username", account.getName());
return Result.success(map);
}
}
package com.controller;
import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;
import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;
/**
* 论坛
* 后端接口
* @author
* @email
*/
@RestController
@Controller
@RequestMapping("/forum")
public class ForumController {
private static final Logger logger = LoggerFactory.getLogger(ForumController.class);
private static final String TABLE_NAME = "forum";
@Autowired
private ForumService forumService;
@Autowired
private TokenService tokenService;
@Autowired
private DictionaryService dictionaryService;//字典
@Autowired
private JuanzhengService juanzhengService;//捐赠信息
@Autowired
private NewsService newsService;//公告资讯
@Autowired
private QiuzhuService qiuzhuService;//求助信息
@Autowired
private QiuzhuCollectionService qiuzhuCollectionService;//求助收藏
@Autowired
private QiuzhuLiuyanService qiuzhuLiuyanService;//求助留言
@Autowired
private YonghuService yonghuService;//用户
@Autowired
private UsersService usersService;//管理员
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
CommonUtil.checkMap(params);
PageUtils page = forumService.queryPage(params);
//字典表数据转换
List<ForumView> list =(List<ForumView>)page.getList();
for(ForumView c:list){
//修改对应字典表字段
dictionaryService.dictionaryConvert(c, request);
}
return R.ok().put("data", page);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
ForumEntity forum = forumService.selectById(id);
if(forum !=null){
//entity转view
ForumView view = new ForumView();
BeanUtils.copyProperties( forum , view );//把实体数据重构到view中
//级联表 用户
//级联表
YonghuEntity yonghu = yonghuService.selectById(forum.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"
, "usersId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表
view.setYonghuId(yonghu.getId());
}
//级联表 管理员
//管理员表做额外的处理
UsersEntity users = usersService.selectById(forum.getUsersId());
if(users != null){
view.setUsersId(users.getId());
view.setUusername(users.getUsername());
view.setUpassword(users.getPassword());
view.setUrole(users.getRole());
view.setUaddtime(users.getAddtime());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ForumEntity forum, HttpServletRequest request){
logger.debug("save方法:,,Controller:{},,forum:{}",this.getClass().getName(),forum.toString());
String role = String.valueOf(request.getSession().getAttribute("role"));
if(false)
return R.error(511,"永远不会进入");
else if("用户".equals(role))
forum.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
else if("管理员".equals(role))
forum.setUsersId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
Wrapper<ForumEntity> queryWrapper = new EntityWrapper<ForumEntity>()
.eq("forum_name", forum.getForumName())
.eq("yonghu_id", forum.getYonghuId())
.eq("users_id", forum.getUsersId())
.eq("super_ids", forum.getSuperIds())
.eq("forum_state_types", forum.getForumStateTypes())
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ForumEntity forumEntity = forumService.selectOne(queryWrapper);
if(forumEntity==null){
forum.setInsertTime(new Date());
forum.setCreateTime(new Date());
forumService.insert(forum);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
/**
* 后端修改
*/
@RequestMapping("/update")
public R update(@RequestBody ForumEntity forum, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
logger.debug("update方法:,,Controller:{},,forum:{}",this.getClass().getName(),forum.toString());
ForumEntity oldForumEntity = forumService.selectById(forum.getId());//查询原先数据
String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");
// else if("用户".equals(role))
// forum.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
// else if("管理员".equals(role))
// forum.setUsersId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
forum.setUpdateTime(new Date());
forumService.updateById(forum);//根据id更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
List<ForumEntity> oldForumList =forumService.selectBatchIds(Arrays.asList(ids));//要删除的数据
forumService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 批量上传
*/
@RequestMapping("/batchInsert")
public R save( String fileName, HttpServletRequest request){
logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))
try {
List<ForumEntity> forumList = new ArrayList<>();//上传的东西
Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
Date date = new Date();
int lastIndexOf = fileName.lastIndexOf(".");
if(lastIndexOf == -1){
return R.error(511,"该文件没有后缀");
}else{
String suffix = fileName.substring(lastIndexOf);
if(!".xls".equals(suffix)){
return R.error(511,"只支持后缀为xls的excel文件");
}else{
URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
File file = new File(resource.getFile());
if(!file.exists()){
return R.error(511,"找不到上传文件,请联系管理员");
}else{
List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
dataList.remove(0);//删除第一行,因为第一行是提示
for(List<String> data:dataList){
//循环
ForumEntity forumEntity = new ForumEntity();
// forumEntity.setForumName(data.get(0)); //帖子标题 要改的
// forumEntity.setYonghuId(Integer.valueOf(data.get(0))); //用户 要改的
// forumEntity.setUsersId(Integer.valueOf(data.get(0))); //管理员 要改的
// forumEntity.setForumContent("");//详情和图片
// forumEntity.setSuperIds(Integer.valueOf(data.get(0))); //父id 要改的
// forumEntity.setForumStateTypes(Integer.valueOf(data.get(0))); //帖子状态 要改的
// forumEntity.setInsertTime(date);//时间
// forumEntity.setUpdateTime(sdf.parse(data.get(0))); //修改时间 要改的
// forumEntity.setCreateTime(date);//时间
forumList.add(forumEntity);
//把要查询是否重复的字段放入map中
}
//查询是否重复
forumService.insertBatch(forumList);
return R.ok();
}
}
}
}catch (Exception e){
e.printStackTrace();
return R.error(511,"批量插入数据异常,请联系管理员");
}
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){
logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
CommonUtil.checkMap(params);
PageUtils page = forumService.queryPage(params);
//字典表数据转换
List<ForumView> list =(List<ForumView>)page.getList();
for(ForumView c:list)
dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段
return R.ok().put("data", page);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id, HttpServletRequest request){
logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
ForumEntity forum = forumService.selectById(id);
if(forum !=null){
//entity转view
ForumView view = new ForumView();
BeanUtils.copyProperties( forum , view );//把实体数据重构到view中
//级联表
YonghuEntity yonghu = yonghuService.selectById(forum.getYonghuId());
if(yonghu != null){
BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段
view.setYonghuId(yonghu.getId());
}
UsersEntity users = usersService.selectById(forum.getUsersId());
if(users != null){
view.setUsersId(users.getId());
view.setUusername(users.getUsername());
view.setUpassword(users.getPassword());
view.setUrole(users.getRole());
view.setUaddtime(users.getAddtime());
}
//修改对应字典表字段
dictionaryService.dictionaryConvert(view, request);
return R.ok().put("data", view);
}else {
return R.error(511,"查不到数据");
}
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ForumEntity forum, HttpServletRequest request){
logger.debug("add方法:,,Controller:{},,forum:{}",this.getClass().getName(),forum.toString());
Wrapper<ForumEntity> queryWrapper = new EntityWrapper<ForumEntity>()
.eq("forum_name", forum.getForumName())
.eq("yonghu_id", forum.getYonghuId())
.eq("users_id", forum.getUsersId())
.eq("super_ids", forum.getSuperIds())
.eq("forum_state_types", forum.getForumStateTypes())
// .notIn("forum_types", new Integer[]{102})
;
logger.info("sql语句:"+queryWrapper.getSqlSegment());
ForumEntity forumEntity = forumService.selectOne(queryWrapper);
if(forumEntity==null){
forum.setInsertTime(new Date());
forum.setCreateTime(new Date());
forumService.insert(forum);
return R.ok();
}else {
return R.error(511,"表中有相同数据");
}
}
}