网络的广泛应用给生活带来了十分的便利。所以把智慧外贸管理与现在网络相结合,利用java技术建设智慧外贸平台,实现智慧外贸的信息化。则对于进一步提高智慧外贸管理发展,丰富智慧外贸管理经验能起到不少的促进作用。
智慧外贸平台能够通过互联网得到广泛的、全面的宣传,让尽可能多的用户了解和熟知智慧外贸平台的便捷高效,不仅为群众提供了服务,而且也推广了自己,让更多的群众了解自己。对于智慧外贸而言,若拥有自己的系统,通过系统得到更好的管理,同时提升了形象。
本系统设计的现状和趋势,从需求、结构、数据库等方面的设计到系统的实现,分别为管理员,买家和商家的实现。论文的内容从系统的设计、描述、实现、分析、测试方面来表明开发的过程。本系统根据现实情况来选择一种可行的开发方案,借助java编程语言和MySQL数据库等实现系统的全部功能,接下来对系统进行测试,测试系统是否有漏洞和测试用户权限来完善系统,最终系统完成达到相关标准。
关键字:智慧外贸 java MySQL数据库
基于springboot智慧外贸平台源码和论文376
演示视频:
基于springboot智慧外贸平台源码和论文
Abstract
The wide application of network has brought great convenience to life. Therefore, the combination of smart foreign trade management and the current network, the use of Java technology to build a smart foreign trade platform, to achieve the information of smart foreign trade. For further improve the development of wisdom foreign trade management, rich wisdom foreign trade management experience can play a lot of promoting role.
Smart foreign trade platform can be widely and comprehensively publicized through the Internet, so that as many users as possible can understand and be familiar with the convenience and efficiency of smart foreign trade platform, not only provide services for the masses, but also promote themselves, so that more people know themselves. For intelligent foreign trade, if we have our own system, we can get better management through the system and improve our image.
The present situation and trend of the system design, from the requirements, structure, database and other aspects of the design to the realization of the system, respectively for the realization of the administrator, the buyer and the business. The content of the paper shows the development process from the aspects of system design, description, implementation, analysis and testing. The system according to the reality to choose a feasible development plan, with the help of Java programming language and MySQL database to achieve all the functions of the system, then the system is tested, test whether the system has vulnerabilities and test user permissions to improve the system, the final system to achieve relevant standards.
Keywords: wisdom foreign trade Java MySQL database
表4-1:关单信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
guandanbianhao | varchar | 200 | 关单编号 | ||
shangjiazhanghao | varchar | 200 | 商家账号 | ||
shangjiaxingming | varchar | 200 | 商家姓名 | ||
shangpinmingcheng | varchar | 200 | 商品名称 | ||
shangpinfenlei | varchar | 200 | 商品分类 | ||
guandanshijian | date | 关单时间 | |||
guandanbeizhu | longtext | 4294967295 | 关单备注 | ||
maijiazhanghao | varchar | 200 | 买家账号 | ||
maijiaxingming | varchar | 200 | 买家姓名 |
表4-2:商品信息评论表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
refid | bigint | 关联表id | |||
userid | bigint | 用户id | |||
nickname | varchar | 200 | 用户名 | ||
content | longtext | 4294967295 | 评论内容 | ||
reply | longtext | 4294967295 | 回复内容 |
表4-3:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
userid | bigint | 用户id | |||
username | varchar | 100 | 用户名 | ||
tablename | varchar | 100 | 表名 | ||
role | varchar | 100 | 角色 | ||
token | varchar | 200 | 密码 | ||
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP | ||
expiratedtime | timestamp | 过期时间 | CURRENT_TIMESTAMP |
表4-4:运单信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
yundanhao | varchar | 200 | 运单号 | ||
shangjiazhanghao | varchar | 200 | 商家账号 | ||
shangjiaxingming | varchar | 200 | 商家姓名 | ||
shangpinmingcheng | varchar | 200 | 商品名称 | ||
shangpinfenlei | varchar | 200 | 商品分类 | ||
dengjishijian | datetime | 登记时间 | |||
yundanneirong | longtext | 4294967295 | 运单内容 | ||
maijiazhanghao | varchar | 200 | 买家账号 | ||
maijiaxingming | varchar | 200 | 买家姓名 |
表4-5:订单信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
dingdanbianhao | varchar | 200 | 订单编号 | ||
shangjiazhanghao | varchar | 200 | 商家账号 | ||
shangjiaxingming | varchar | 200 | 商家姓名 | ||
shangpinmingcheng | varchar | 200 | 商品名称 | ||
shangpinfenlei | varchar | 200 | 商品分类 | ||
gengxinshijian | datetime | 更新时间 | |||
dingdanxiangqing | longtext | 4294967295 | 订单详情 | ||
maijiazhanghao | varchar | 200 | 买家账号 | ||
maijiaxingming | varchar | 200 | 买家姓名 |
表4-6:收藏表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 用户id | |||
refid | bigint | 收藏id | |||
tablename | varchar | 200 | 表名 | ||
name | varchar | 200 | 收藏名称 | ||
picture | varchar | 200 | 收藏图片 | ||
type | varchar | 200 | 类型(1:收藏,21:赞,22:踩) | 1 | |
inteltype | varchar | 200 | 推荐类型 |
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("/yewurenyuan")
public class YewurenyuanController {private static final Logger logger = LoggerFactory.getLogger(YewurenyuanController.class);private static final String TABLE_NAME = "yewurenyuan";@Autowiredprivate YewurenyuanService yewurenyuanService;@Autowiredprivate TokenService tokenService;@Autowiredprivate BaoxiuService baoxiuService;//报修@Autowiredprivate BaoxiuCommentbackService baoxiuCommentbackService;//报修评价@Autowiredprivate BaoxiuFenpeiService baoxiuFenpeiService;//报修分配@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate FeiyongService feiyongService;//宽带缴费@Autowiredprivate ForumService forumService;//论坛@Autowiredprivate GonggaoService gonggaoService;//公告@Autowiredprivate KuandaiService kuandaiService;//宽带@Autowiredprivate KuandaiCollectionService kuandaiCollectionService;//宽带收藏@Autowiredprivate KuandaiLiuyanService kuandaiLiuyanService;//宽带留言@Autowiredprivate KuandaiOrderService kuandaiOrderService;//宽带开户@Autowiredprivate KuandaiYuyueService kuandaiYuyueService;//宽带预约安装@Autowiredprivate QianyiYuyueService qianyiYuyueService;//迁移申请@Autowiredprivate YonghuService yonghuService;//用户@Autowiredprivate 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));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("用户".equals(role))params.put("yonghuId",request.getSession().getAttribute("userId"));else if("业务人员".equals(role))params.put("yewurenyuanId",request.getSession().getAttribute("userId"));CommonUtil.checkMap(params);PageUtils page = yewurenyuanService.queryPage(params);//字典表数据转换List<YewurenyuanView> list =(List<YewurenyuanView>)page.getList();for(YewurenyuanView 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);YewurenyuanEntity yewurenyuan = yewurenyuanService.selectById(id);if(yewurenyuan !=null){//entity转viewYewurenyuanView view = new YewurenyuanView();BeanUtils.copyProperties( yewurenyuan , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody YewurenyuanEntity yewurenyuan, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,yewurenyuan:{}",this.getClass().getName(),yewurenyuan.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");Wrapper<YewurenyuanEntity> queryWrapper = new EntityWrapper<YewurenyuanEntity>().eq("username", yewurenyuan.getUsername()).or().eq("yewurenyuan_phone", yewurenyuan.getYewurenyuanPhone()).or().eq("yewurenyuan_id_number", yewurenyuan.getYewurenyuanIdNumber());logger.info("sql语句:"+queryWrapper.getSqlSegment());YewurenyuanEntity yewurenyuanEntity = yewurenyuanService.selectOne(queryWrapper);if(yewurenyuanEntity==null){yewurenyuan.setCreateTime(new Date());yewurenyuan.setPassword("123456");yewurenyuanService.insert(yewurenyuan);return R.ok();}else {return R.error(511,"账户或者业务人员手机号或者业务人员身份证号已经被使用");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody YewurenyuanEntity yewurenyuan, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,yewurenyuan:{}",this.getClass().getName(),yewurenyuan.toString());YewurenyuanEntity oldYewurenyuanEntity = yewurenyuanService.selectById(yewurenyuan.getId());//查询原先数据String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");if("".equals(yewurenyuan.getYewurenyuanPhoto()) || "null".equals(yewurenyuan.getYewurenyuanPhoto())){yewurenyuan.setYewurenyuanPhoto(null);}yewurenyuanService.updateById(yewurenyuan);//根据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<YewurenyuanEntity> oldYewurenyuanList =yewurenyuanService.selectBatchIds(Arrays.asList(ids));//要删除的数据yewurenyuanService.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");try {List<YewurenyuanEntity> yewurenyuanList = 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){//循环YewurenyuanEntity yewurenyuanEntity = new YewurenyuanEntity();
// yewurenyuanEntity.setUsername(data.get(0)); //账户 要改的
// //yewurenyuanEntity.setPassword("123456");//密码
// yewurenyuanEntity.setYewurenyuanName(data.get(0)); //业务人员姓名 要改的
// yewurenyuanEntity.setYewurenyuanPhone(data.get(0)); //业务人员手机号 要改的
// yewurenyuanEntity.setYewurenyuanIdNumber(data.get(0)); //业务人员身份证号 要改的
// yewurenyuanEntity.setYewurenyuanPhoto("");//详情和图片
// yewurenyuanEntity.setSexTypes(Integer.valueOf(data.get(0))); //性别 要改的
// yewurenyuanEntity.setNewMoney(data.get(0)); //余额 要改的
// yewurenyuanEntity.setYewurenyuanEmail(data.get(0)); //业务人员邮箱 要改的
// yewurenyuanEntity.setCreateTime(date);//时间yewurenyuanList.add(yewurenyuanEntity);//把要查询是否重复的字段放入map中//账户if(seachFields.containsKey("username")){List<String> username = seachFields.get("username");username.add(data.get(0));//要改的}else{List<String> username = new ArrayList<>();username.add(data.get(0));//要改的seachFields.put("username",username);}//业务人员手机号if(seachFields.containsKey("yewurenyuanPhone")){List<String> yewurenyuanPhone = seachFields.get("yewurenyuanPhone");yewurenyuanPhone.add(data.get(0));//要改的}else{List<String> yewurenyuanPhone = new ArrayList<>();yewurenyuanPhone.add(data.get(0));//要改的seachFields.put("yewurenyuanPhone",yewurenyuanPhone);}//业务人员身份证号if(seachFields.containsKey("yewurenyuanIdNumber")){List<String> yewurenyuanIdNumber = seachFields.get("yewurenyuanIdNumber");yewurenyuanIdNumber.add(data.get(0));//要改的}else{List<String> yewurenyuanIdNumber = new ArrayList<>();yewurenyuanIdNumber.add(data.get(0));//要改的seachFields.put("yewurenyuanIdNumber",yewurenyuanIdNumber);}}//查询是否重复//账户List<YewurenyuanEntity> yewurenyuanEntities_username = yewurenyuanService.selectList(new EntityWrapper<YewurenyuanEntity>().in("username", seachFields.get("username")));if(yewurenyuanEntities_username.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YewurenyuanEntity s:yewurenyuanEntities_username){repeatFields.add(s.getUsername());}return R.error(511,"数据库的该表中的 [账户] 字段已经存在 存在数据为:"+repeatFields.toString());}//业务人员手机号List<YewurenyuanEntity> yewurenyuanEntities_yewurenyuanPhone = yewurenyuanService.selectList(new EntityWrapper<YewurenyuanEntity>().in("yewurenyuan_phone", seachFields.get("yewurenyuanPhone")));if(yewurenyuanEntities_yewurenyuanPhone.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YewurenyuanEntity s:yewurenyuanEntities_yewurenyuanPhone){repeatFields.add(s.getYewurenyuanPhone());}return R.error(511,"数据库的该表中的 [业务人员手机号] 字段已经存在 存在数据为:"+repeatFields.toString());}//业务人员身份证号List<YewurenyuanEntity> yewurenyuanEntities_yewurenyuanIdNumber = yewurenyuanService.selectList(new EntityWrapper<YewurenyuanEntity>().in("yewurenyuan_id_number", seachFields.get("yewurenyuanIdNumber")));if(yewurenyuanEntities_yewurenyuanIdNumber.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YewurenyuanEntity s:yewurenyuanEntities_yewurenyuanIdNumber){repeatFields.add(s.getYewurenyuanIdNumber());}return R.error(511,"数据库的该表中的 [业务人员身份证号] 字段已经存在 存在数据为:"+repeatFields.toString());}yewurenyuanService.insertBatch(yewurenyuanList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入数据异常,请联系管理员");}}/*** 登录*/@IgnoreAuth@RequestMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {YewurenyuanEntity yewurenyuan = yewurenyuanService.selectOne(new EntityWrapper<YewurenyuanEntity>().eq("username", username));if(yewurenyuan==null || !yewurenyuan.getPassword().equals(password))return R.error("账号或密码不正确");String token = tokenService.generateToken(yewurenyuan.getId(),username, "yewurenyuan", "业务人员");R r = R.ok();r.put("token", token);r.put("role","业务人员");r.put("username",yewurenyuan.getYewurenyuanName());r.put("tableName","yewurenyuan");r.put("userId",yewurenyuan.getId());return r;}/*** 注册*/@IgnoreAuth@PostMapping(value = "/register")public R register(@RequestBody YewurenyuanEntity yewurenyuan, HttpServletRequest request) {
// ValidatorUtils.validateEntity(user);Wrapper<YewurenyuanEntity> queryWrapper = new EntityWrapper<YewurenyuanEntity>().eq("username", yewurenyuan.getUsername()).or().eq("yewurenyuan_phone", yewurenyuan.getYewurenyuanPhone()).or().eq("yewurenyuan_id_number", yewurenyuan.getYewurenyuanIdNumber());YewurenyuanEntity yewurenyuanEntity = yewurenyuanService.selectOne(queryWrapper);if(yewurenyuanEntity != null)return R.error("账户或者业务人员手机号或者业务人员身份证号已经被使用");yewurenyuan.setNewMoney(0.0);yewurenyuan.setCreateTime(new Date());yewurenyuanService.insert(yewurenyuan);return R.ok();}/*** 重置密码*/@GetMapping(value = "/resetPassword")public R resetPassword(Integer id, HttpServletRequest request) {YewurenyuanEntity yewurenyuan = yewurenyuanService.selectById(id);yewurenyuan.setPassword("123456");yewurenyuanService.updateById(yewurenyuan);return R.ok();}/*** 修改密码*/@GetMapping(value = "/updatePassword")public R updatePassword(String oldPassword, String newPassword, HttpServletRequest request) {YewurenyuanEntity yewurenyuan = yewurenyuanService.selectById((Integer)request.getSession().getAttribute("userId"));if(newPassword == null){return R.error("新密码不能为空") ;}if(!oldPassword.equals(yewurenyuan.getPassword())){return R.error("原密码输入错误");}if(newPassword.equals(yewurenyuan.getPassword())){return R.error("新密码不能和原密码一致") ;}yewurenyuan.setPassword(newPassword);yewurenyuanService.updateById(yewurenyuan);return R.ok();}/*** 忘记密码*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request) {YewurenyuanEntity yewurenyuan = yewurenyuanService.selectOne(new EntityWrapper<YewurenyuanEntity>().eq("username", username));if(yewurenyuan!=null){yewurenyuan.setPassword("123456");yewurenyuanService.updateById(yewurenyuan);return R.ok();}else{return R.error("账号不存在");}}/*** 获取用户的session用户信息*/@RequestMapping("/session")public R getCurrYewurenyuan(HttpServletRequest request){Integer id = (Integer)request.getSession().getAttribute("userId");YewurenyuanEntity yewurenyuan = yewurenyuanService.selectById(id);if(yewurenyuan !=null){//entity转viewYewurenyuanView view = new YewurenyuanView();BeanUtils.copyProperties( yewurenyuan , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 退出*/@GetMapping(value = "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 前端列表*/@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 = yewurenyuanService.queryPage(params);//字典表数据转换List<YewurenyuanView> list =(List<YewurenyuanView>)page.getList();for(YewurenyuanView 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);YewurenyuanEntity yewurenyuan = yewurenyuanService.selectById(id);if(yewurenyuan !=null){//entity转viewYewurenyuanView view = new YewurenyuanView();BeanUtils.copyProperties( yewurenyuan , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody YewurenyuanEntity yewurenyuan, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,yewurenyuan:{}",this.getClass().getName(),yewurenyuan.toString());Wrapper<YewurenyuanEntity> queryWrapper = new EntityWrapper<YewurenyuanEntity>().eq("username", yewurenyuan.getUsername()).or().eq("yewurenyuan_phone", yewurenyuan.getYewurenyuanPhone()).or().eq("yewurenyuan_id_number", yewurenyuan.getYewurenyuanIdNumber())
// .notIn("yewurenyuan_types", new Integer[]{102});logger.info("sql语句:"+queryWrapper.getSqlSegment());YewurenyuanEntity yewurenyuanEntity = yewurenyuanService.selectOne(queryWrapper);if(yewurenyuanEntity==null){yewurenyuan.setCreateTime(new Date());yewurenyuan.setPassword("123456");yewurenyuanService.insert(yewurenyuan);return R.ok();}else {return R.error(511,"账户或者业务人员手机号或者业务人员身份证号已经被使用");}}}
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("/yonghu")
public class YonghuController {private static final Logger logger = LoggerFactory.getLogger(YonghuController.class);private static final String TABLE_NAME = "yonghu";@Autowiredprivate YonghuService yonghuService;@Autowiredprivate TokenService tokenService;@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate ForumService forumService;//交流论坛@Autowiredprivate GonggaoService gonggaoService;//公告资讯@Autowiredprivate HanfuService hanfuService;//汉服信息@Autowiredprivate HanfuCollectionService hanfuCollectionService;//汉服收藏@Autowiredprivate HanfuCommentbackService hanfuCommentbackService;//汉服评价@Autowiredprivate HanfuOrderService hanfuOrderService;//汉服租赁@Autowiredprivate 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));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("用户".equals(role))params.put("yonghuId",request.getSession().getAttribute("userId"));CommonUtil.checkMap(params);PageUtils page = yonghuService.queryPage(params);//字典表数据转换List<YonghuView> list =(List<YonghuView>)page.getList();for(YonghuView 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);YonghuEntity yonghu = yonghuService.selectById(id);if(yonghu !=null){//entity转viewYonghuView view = new YonghuView();BeanUtils.copyProperties( yonghu , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 后端保存*/@RequestMapping("/save")public R save(@RequestBody YonghuEntity yonghu, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>().eq("username", yonghu.getUsername()).or().eq("yonghu_phone", yonghu.getYonghuPhone()).or().eq("yonghu_id_number", yonghu.getYonghuIdNumber());logger.info("sql语句:"+queryWrapper.getSqlSegment());YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);if(yonghuEntity==null){yonghu.setCreateTime(new Date());yonghu.setPassword("123456");yonghuService.insert(yonghu);return R.ok();}else {return R.error(511,"账户或者用户手机号或者用户身份证号已经被使用");}}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody YonghuEntity yonghu, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());YonghuEntity oldYonghuEntity = yonghuService.selectById(yonghu.getId());//查询原先数据String role = String.valueOf(request.getSession().getAttribute("role"));
// if(false)
// return R.error(511,"永远不会进入");if("".equals(yonghu.getYonghuPhoto()) || "null".equals(yonghu.getYonghuPhoto())){yonghu.setYonghuPhoto(null);}yonghuService.updateById(yonghu);//根据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<YonghuEntity> oldYonghuList =yonghuService.selectBatchIds(Arrays.asList(ids));//要删除的数据yonghuService.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<YonghuEntity> yonghuList = 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){//循环YonghuEntity yonghuEntity = new YonghuEntity();
// yonghuEntity.setUsername(data.get(0)); //账户 要改的
// yonghuEntity.setPassword("123456");//密码
// yonghuEntity.setYonghuUuidNumber(data.get(0)); //用户编号 要改的
// yonghuEntity.setYonghuName(data.get(0)); //用户姓名 要改的
// yonghuEntity.setYonghuPhone(data.get(0)); //用户手机号 要改的
// yonghuEntity.setYonghuIdNumber(data.get(0)); //用户身份证号 要改的
// yonghuEntity.setYonghuPhoto("");//详情和图片
// yonghuEntity.setSexTypes(Integer.valueOf(data.get(0))); //性别 要改的
// yonghuEntity.setNewMoney(data.get(0)); //余额 要改的
// yonghuEntity.setYonghuEmail(data.get(0)); //用户邮箱 要改的
// yonghuEntity.setCreateTime(date);//时间yonghuList.add(yonghuEntity);//把要查询是否重复的字段放入map中//账户if(seachFields.containsKey("username")){List<String> username = seachFields.get("username");username.add(data.get(0));//要改的}else{List<String> username = new ArrayList<>();username.add(data.get(0));//要改的seachFields.put("username",username);}//用户编号if(seachFields.containsKey("yonghuUuidNumber")){List<String> yonghuUuidNumber = seachFields.get("yonghuUuidNumber");yonghuUuidNumber.add(data.get(0));//要改的}else{List<String> yonghuUuidNumber = new ArrayList<>();yonghuUuidNumber.add(data.get(0));//要改的seachFields.put("yonghuUuidNumber",yonghuUuidNumber);}//用户手机号if(seachFields.containsKey("yonghuPhone")){List<String> yonghuPhone = seachFields.get("yonghuPhone");yonghuPhone.add(data.get(0));//要改的}else{List<String> yonghuPhone = new ArrayList<>();yonghuPhone.add(data.get(0));//要改的seachFields.put("yonghuPhone",yonghuPhone);}//用户身份证号if(seachFields.containsKey("yonghuIdNumber")){List<String> yonghuIdNumber = seachFields.get("yonghuIdNumber");yonghuIdNumber.add(data.get(0));//要改的}else{List<String> yonghuIdNumber = new ArrayList<>();yonghuIdNumber.add(data.get(0));//要改的seachFields.put("yonghuIdNumber",yonghuIdNumber);}}//查询是否重复//账户List<YonghuEntity> yonghuEntities_username = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("username", seachFields.get("username")));if(yonghuEntities_username.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YonghuEntity s:yonghuEntities_username){repeatFields.add(s.getUsername());}return R.error(511,"数据库的该表中的 [账户] 字段已经存在 存在数据为:"+repeatFields.toString());}//用户编号List<YonghuEntity> yonghuEntities_yonghuUuidNumber = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("yonghu_uuid_number", seachFields.get("yonghuUuidNumber")));if(yonghuEntities_yonghuUuidNumber.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YonghuEntity s:yonghuEntities_yonghuUuidNumber){repeatFields.add(s.getYonghuUuidNumber());}return R.error(511,"数据库的该表中的 [用户编号] 字段已经存在 存在数据为:"+repeatFields.toString());}//用户手机号List<YonghuEntity> yonghuEntities_yonghuPhone = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("yonghu_phone", seachFields.get("yonghuPhone")));if(yonghuEntities_yonghuPhone.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YonghuEntity s:yonghuEntities_yonghuPhone){repeatFields.add(s.getYonghuPhone());}return R.error(511,"数据库的该表中的 [用户手机号] 字段已经存在 存在数据为:"+repeatFields.toString());}//用户身份证号List<YonghuEntity> yonghuEntities_yonghuIdNumber = yonghuService.selectList(new EntityWrapper<YonghuEntity>().in("yonghu_id_number", seachFields.get("yonghuIdNumber")));if(yonghuEntities_yonghuIdNumber.size() >0 ){ArrayList<String> repeatFields = new ArrayList<>();for(YonghuEntity s:yonghuEntities_yonghuIdNumber){repeatFields.add(s.getYonghuIdNumber());}return R.error(511,"数据库的该表中的 [用户身份证号] 字段已经存在 存在数据为:"+repeatFields.toString());}yonghuService.insertBatch(yonghuList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入数据异常,请联系管理员");}}/*** 登录*/@IgnoreAuth@RequestMapping(value = "/login")public R login(String username, String password, String captcha, HttpServletRequest request) {YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("username", username));if(yonghu==null || !yonghu.getPassword().equals(password))return R.error("账号或密码不正确");String token = tokenService.generateToken(yonghu.getId(),username, "yonghu", "用户");R r = R.ok();r.put("token", token);r.put("role","用户");r.put("username",yonghu.getYonghuName());r.put("tableName","yonghu");r.put("userId",yonghu.getId());return r;}/*** 注册*/@IgnoreAuth@PostMapping(value = "/register")public R register(@RequestBody YonghuEntity yonghu, HttpServletRequest request) {
// ValidatorUtils.validateEntity(user);Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>().eq("username", yonghu.getUsername()).or().eq("yonghu_phone", yonghu.getYonghuPhone()).or().eq("yonghu_id_number", yonghu.getYonghuIdNumber());YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);if(yonghuEntity != null)return R.error("账户或者用户手机号或者用户身份证号已经被使用");yonghu.setYonghuUuidNumber(String.valueOf(new Date().getTime()));yonghu.setNewMoney(0.0);yonghu.setCreateTime(new Date());yonghuService.insert(yonghu);return R.ok();}/*** 重置密码*/@GetMapping(value = "/resetPassword")public R resetPassword(Integer id, HttpServletRequest request) {YonghuEntity yonghu = yonghuService.selectById(id);yonghu.setPassword("123456");yonghuService.updateById(yonghu);return R.ok();}/*** 修改密码*/@GetMapping(value = "/updatePassword")public R updatePassword(String oldPassword, String newPassword, HttpServletRequest request) {YonghuEntity yonghu = yonghuService.selectById((Integer)request.getSession().getAttribute("userId"));if(newPassword == null){return R.error("新密码不能为空") ;}if(!oldPassword.equals(yonghu.getPassword())){return R.error("原密码输入错误");}if(newPassword.equals(yonghu.getPassword())){return R.error("新密码不能和原密码一致") ;}yonghu.setPassword(newPassword);yonghuService.updateById(yonghu);return R.ok();}/*** 忘记密码*/@IgnoreAuth@RequestMapping(value = "/resetPass")public R resetPass(String username, HttpServletRequest request) {YonghuEntity yonghu = yonghuService.selectOne(new EntityWrapper<YonghuEntity>().eq("username", username));if(yonghu!=null){yonghu.setPassword("123456");yonghuService.updateById(yonghu);return R.ok();}else{return R.error("账号不存在");}}/*** 获取用户的session用户信息*/@RequestMapping("/session")public R getCurrYonghu(HttpServletRequest request){Integer id = (Integer)request.getSession().getAttribute("userId");YonghuEntity yonghu = yonghuService.selectById(id);if(yonghu !=null){//entity转viewYonghuView view = new YonghuView();BeanUtils.copyProperties( yonghu , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 退出*/@GetMapping(value = "logout")public R logout(HttpServletRequest request) {request.getSession().invalidate();return R.ok("退出成功");}/*** 前端列表*/@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 = yonghuService.queryPage(params);//字典表数据转换List<YonghuView> list =(List<YonghuView>)page.getList();for(YonghuView c:list)dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段return R.ok().put("data", page);}/*** 前端详情*/@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") Integer id, HttpServletRequest request){logger.debug("detail方法:,,Controller:{},,id:{}",this.getClass().getName(),id);YonghuEntity yonghu = yonghuService.selectById(id);if(yonghu !=null){//entity转viewYonghuView view = new YonghuView();BeanUtils.copyProperties( yonghu , view );//把实体数据重构到view中//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put("data", view);}else {return R.error(511,"查不到数据");}}/*** 前端保存*/@RequestMapping("/add")public R add(@RequestBody YonghuEntity yonghu, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,yonghu:{}",this.getClass().getName(),yonghu.toString());Wrapper<YonghuEntity> queryWrapper = new EntityWrapper<YonghuEntity>().eq("username", yonghu.getUsername()).or().eq("yonghu_phone", yonghu.getYonghuPhone()).or().eq("yonghu_id_number", yonghu.getYonghuIdNumber())
// .notIn("yonghu_types", new Integer[]{102});logger.info("sql语句:"+queryWrapper.getSqlSegment());YonghuEntity yonghuEntity = yonghuService.selectOne(queryWrapper);if(yonghuEntity==null){yonghu.setCreateTime(new Date());yonghu.setPassword("123456");yonghuService.insert(yonghu);return R.ok();}else {return R.error(511,"账户或者用户手机号或者用户身份证号已经被使用");}}}