100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 基于Java+SpringBoot+Vue前后端分离商城系统设计与实现

基于Java+SpringBoot+Vue前后端分离商城系统设计与实现

时间:2021-09-07 19:08:48

相关推荐

基于Java+SpringBoot+Vue前后端分离商城系统设计与实现

博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战、定制、远程✌

博主作品:《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦

开源项目:点击这里克隆或者下载

🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

Java项目案例《100套》

/qq_57756904/category_12173599.html

uniapp小程序《100套》

/qq_57756904/category_12199600.html

✨【微服务】Nacos为什么丢弃短连接(http)而选择拥抱长连接(gRPC)

目录

一、前言

1、项目的背景和意义

2、国内外研究现状分析

2.1 国外电子商务发展与现状

2.2、国内电子商务发展与现状

3、研究内容及预期目标

二、系统设计

1、系统运行环境

2、系统架构设计​编辑

3、登录设计

4、管理员维护订单时序图设计:

三、数据库设计

1、实体E-R图

1.1、用户实体

1.2、产品实体

四、功能截图

1、登录界面

2、首页

3、商品管理

3.1、商品分类

3.2、商品管理

4、会员管理

4.1、会员信息

4.2、会员等级

4.3、 等级任务

5、订单管理

5.1、评论管理

5.2、物流管理

6、电子券管理

6.1、优惠券制作

6.2、已发布优惠券

6.3、优惠券领取记录

7、营销管理

7.1、拼团产品

7.2、拼团列表

7.3、秒杀产品

7.4、秒杀配置

7.5、砍价产品

五、实现代码

1、接口

2、实现类

六、获取源码

一、前言

1、项目的背景和意义

随着人们生活水平的提高,对物质要求也越来越高。人们网购的消费也逐年增长,所以电子商务发展十分迅速,网上商城应运而生,为人们的网上购物提供了好的平台。电子商城,跟在线购物有关。它是一个javaweb项目,为了增加用户体验,优化了前台页面,首页非常美观。

纵观当下世界,科学技术日新月异,信息技术节节攀高,经济活动也越发高涨。一方面,信息科技迅猛发展带来了信息时代的兴起,其中互联网技术自出现以来便吸引了全球人类的目光,深刻地变革了人类的生存及生活方式;而另一方面,经济活动的快速发展也对安全和便利提出了更高、更为严苛的要求。商业经济活动与互联网技术由此就慢慢结合起来,一种全新的、基于互联网的新型经济模式应运而生,即电子商务。经过一段时间的发展,电子商务逐步融入到每个人的生活,改变了市场的商务模式,并且在世界经济发展过程中发挥着举足轻重的作用。

电子商务是一种崭新的商业模式。企业利用前沿信息技术,将传统受制于时空的商务活动转变为跨越时空的虚拟交易,是传统商务经济活动的电子化与信息化。联合国经济合作与发展组织对电子商务是这样界定的:用电子化手段来从事商业活动,主要通过电子的数据处理和信息技术,例如文本、声音和图像等进行数据传输。而美国政府对电子商务的定义更加简单明了,电子商务是基于互联网进行的各项商务活动,其中商务活动包括广告、交易、支付、服务等,全球电子商务通达世界上的各个国家。自 1994 年亚马逊的成立开始,电子商务的规模壮大超出想象。发展速度已经把与商业相关其他领域甩在身后,由此而生的新业态和新模式无形中也推动了许多其他领域的转型与升级,目前是现代服务经济体系的先导性产业之一。电子商务包含许多商业模式,例如B2B,B2C,C2C,C2B,O2O,G2B 等模式。其中最典型和发展最快的是 B2C 商业模式,即商家与客户模式。在 B2C 的商业模式下,商家通过建立在线网络购物平台为消费者提供服务,这不仅打破时空界限,还提高了交易效率并降低商家的销售成本。近年来,除了一直领跑的天猫之外,京东商城、苏宁易购、国美在线等国内其他 B2C 电商平台也在稳步前进,并占据了很大一部分市场份额。历经多年的发展积淀,全球电子商务正在由开始的 1.0 时代快速地进入电子商务2.0 时代。这一新的 2.0 时代在电子商务产业的增长方向、地区结构、创新驱动力以及产业边界等方面也都具备新的特征。所以在这一新的发展时期,对于 B2C 电子商务的研究就显得尤为重要。

据顶级数据统计网站Statista所发布的调查统计数据显示,预计到,全球

零售电子商务交易额将超过4万亿美元,这个数字是全年零售电子商务交易额的

3倍,由此可以看出电子商务增长之快。

作为电子商务最瞩目的商业模式之一,B2C 电子商务近年来的发展尤其迅速,预计到

年世界B2C电子商务交易额将达到2.356万亿美元,如图1.2所示。这一数字也比翻了一倍还多,清晰地表明B2C电子商务在电子商务领域占的比重与整体的发展速度是十分惊人的。

由于经济的快速增长,我国中产及以上阶层消费者数量已经逐渐增加。新生代消费者的崛起,成为中国消费市场的主导力量。未来的消费重心会逐步偏移。相较于产品,服务将成为未来若干年促使消费转型升级的驱动力。而在未来的社会,消费者对于高端产品及服务的需求也会与日俱增。人们的消费观念也将从买卖商品向体验服务转变,“满足日常需求”升级为“改善生活品质”。

2、国内外研究现状分析

2.1 国外电子商务发展与现状

从全球的角度来看,电子商务主要历经了三个阶段:萌芽时期,形成时期,发展时期。

萌芽时期可以追溯到19世纪前叶,电报的出现当即就引发了人们对于其在商务领域应用的讨论,这个时期莫尔斯密码可算是主要承载形式。形成时期则开始于电子计算机的出现,时间自20世纪中叶起始,EDI(电子数据交换)被公认为是形成时期的主要承载形式。发展时期则伴随着计算机网络技术尤其是网联网的出现,20世纪90年代后期,计算机、互联网技术迅速发展,信用卡的广泛使用,及电子安全交易协议的制定与推广,电子商务的规模真正意义上达到了一个新台阶。

从1994年亚马逊成立,到1995年美国宣布成立电子商务工作组,B2C这个概念也在次年被提出。美国从一开始在电子商务的发展上就居于领跑地位。无论是全球电子商务市场份额还是技术发展水平,美国都是执牛耳者,后来西欧等发达国家和地区也迎头赶上,引领新型商业模式并作为规模担当。

然而,近年来电子商务市场开始呈现新的特点:以中国为代表的新兴市场逐渐成为全球电子商务重心,美国和欧洲无论是规模还是从发展速度来看将逐渐处于劣势。亚太、拉美、中东等新兴市场的规模日益攀升,发展速度和规模也颇令人瞩目。新兴市场不断缩小与发达国家的发展差距,尤其是创新能力和基础设施差距,新兴市场国家在未来将领跑整个电子商务领域。

2.2、国内电子商务发展与现状

纵观世界其他国家电子商务的发展,我国开始发展的时间稍晚,然而发展的规模和速度仍然不容小觑,主要可以分为以下几个阶段:

1999-2002年是萌芽阶段,电子商务的发展开始正式起步。-是快速发展期,国外电子商务企业如亚马逊等开始进驻,带来许多先进的理念、技术和方法,与此同时国内阿里巴巴、当当等电商平台开始涌现。电子商务依旧十分热门,网上商城的市场依旧很大。好的商城系统是保证消费者愉快购物的关键。开始,中国的电子商务进入高速上升时期,越来越多的企业带来更多的资金和更先进的技术投入,天猫、京东等电商平台开始引爆中国,几乎绝大部分的国人也都或多或少参与到电子商务中来,为电商平台的更新升级与发展进步提供了推动力,人们的生产生活方式也出现翻天覆地的变化。

以淘宝为例,据中国电子商务研究中心监测数据,5月,淘宝手机客户端月活跃用户达到3.7亿,其中深度活跃用户平均每天登陆手机淘宝达7.2次,浏览商品约18 件商品,淘宝手机客户端平均产生2000万关于商品的评论和分享。大量用户在浏览商品、阅读及社区评论互动上花费的时间每天要超过1个小时。这庞大的用户数量和用户使用时间决定了在新兴国家中,中国电子商务市场的发展速度是最快的,规模也是最大的。可以想见到,未来相当长的一段时间内中国将在世界电商领域上领跑。

3、研究内容及预期目标

在线电子商城是基于javaweb技术实现的,包含前后端.预期目标是实现基础的业务流程,后期再拓展创新功能,能让使用者有很好的用户体验。

二、系统设计

1、系统运行环境

开发系统:Windows10

架构模式:MVC/前后端分离

JDK版本:Java JDK1.8

开发工具:IDEA

数据库版本:mysql5.7

数据库可视化工具:SQL yog或Navicat for MySQL

服务器:SpringBoot自带 apache tomcat

主要技术:Java、SpringBoot、MyBatis-plus、SpringSecurity、JWT、MySQL、Redis、Html、Vue、Elementui等

2、系统架构设计

3、登录设计

借鉴微服务单点登录设计

4、管理员维护订单时序图设计:

三、数据库设计

1、实体E-R图

1.1、用户实体

1.2、产品实体

四、功能截图

1、登录界面

系统用户需要输入账号密码之外,还要输入验证码,验证码只在一定时间内有效

2、首页

3、商品管理

3.1、商品分类

3.2、商品管理

4、会员管理

4.1、会员信息

4.2、会员等级

4.3、 等级任务

5、订单管理

5.1、评论管理

5.2、物流管理

6、电子券管理

6.1、优惠券制作

6.2、已发布优惠券

6.3、优惠券领取记录

7、营销管理

7.1、拼团产品

7.2、拼团列表

7.3、秒杀产品

7.4、秒杀配置

7.5、砍价产品

五、实现代码

1、接口

public interface CeamStoreOrderService extends BaseService<CeamStoreOrder> {/*** 查询数据分页* @param criteria 条件* @param pageable 分页参数* @return Map<String, Object>*/Map<String, Object> queryAll(CeamStoreOrderQueryCriteria criteria, Pageable pageable);/*** 查询所有数据不分页* @param criteria 条件参数* @return List<CeamStoreOrderDto>*/List<CeamStoreOrder> queryAll(CeamStoreOrderQueryCriteria criteria);CeamStoreOrderDto create(CeamStoreOrder resources);void update(CeamStoreOrder resources);/*** 导出数据* @param all 待导出的数据* @param response /* @throws IOException /*/void download(List<CeamStoreOrderDto> all, HttpServletResponse response) throws IOException;Map<String, Object> queryAll(List<String> ids);String orderType(Long id, Long pinkId, Long combinationId, Long seckillId,Long bargainId, int shippingType);void refund(CeamStoreOrder resources);OrderCountDto getOrderCount();OrderTimeDataDto getOrderTimeData();Map<String, Object> chartCount();}

2、实现类

@Slf4j@Service@AllArgsConstructor//@CacheConfig(cacheNames = "CeamStoreOrder")@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)public class CeamStoreOrderServiceImpl extends BaseServiceImpl<StoreOrderMapper, CeamStoreOrder> implements CeamStoreOrderService {private final IGenerator generator;private CeamUserService userService;private UserMapper userMapper;private CeamStorePinkService storePinkService;private CeamStoreOrderCartInfoService storeOrderCartInfoService;private final CeamUserBillService CeamUserBillService;private final CeamStoreOrderStatusService CeamStoreOrderStatusService;private final CeamPayService payService;private final CeamMiniPayService miniPayService;private final CeamSystemStoreService systemStoreService;private final CeamStoreCartService storeCartService;private final StoreOrderMapper CeamStoreOrderMapper;private final StoreProductMapper CeamStoreProductMapper;@Overridepublic OrderCountDto getOrderCount() {//获取所有订单转态为已支付的List<CountDto> nameList = storeCartService.findCateName();Map<String, Integer> childrenMap = new HashMap<>();nameList.forEach(i -> {if (i != null) {if (childrenMap.containsKey(i.getCatename())) {childrenMap.put(i.getCatename(), childrenMap.get(i.getCatename()) + 1);} else {childrenMap.put(i.getCatename(), 1);}}});List<OrderCountDto.OrderCountData> list = new ArrayList<>();List<String> columns = new ArrayList<>();childrenMap.forEach((k, v) -> {OrderCountDto.OrderCountData orderCountData = new OrderCountDto.OrderCountData();orderCountData.setName(k);orderCountData.setValue(v);columns.add(k);list.add(orderCountData);});OrderCountDto orderCountDto = new OrderCountDto();orderCountDto.setColumn(columns);orderCountDto.setOrderCountDatas(list);return orderCountDto;}@Override// 此处方法已经废弃public OrderTimeDataDto getOrderTimeData() {int today = OrderUtil.dateToTimestampT(DateUtil.beginOfDay(new Date()));int yesterday = OrderUtil.dateToTimestampT(DateUtil.beginOfDay(DateUtil.yesterday()));int lastWeek = OrderUtil.dateToTimestampT(DateUtil.beginOfDay(DateUtil.lastWeek()));int nowMonth = OrderUtil.dateToTimestampT(DateUtil.beginOfMonth(new Date()));OrderTimeDataDto orderTimeDataDTO = new OrderTimeDataDto();orderTimeDataDTO.setTodayCount(CeamStoreOrderMapper.countByPayTimeGreaterThanEqual(today));orderTimeDataDTO.setProCount(CeamStoreOrderMapper.countByPayTimeLessThanAndPayTimeGreaterThanEqual(today, yesterday));orderTimeDataDTO.setLastWeekCount(CeamStoreOrderMapper.countByPayTimeGreaterThanEqual(lastWeek));orderTimeDataDTO.setMonthCount(CeamStoreOrderMapper.countByPayTimeGreaterThanEqual(nowMonth));orderTimeDataDTO.setUserCount(userMapper.selectCount(new LambdaQueryWrapper<CeamUser>()));orderTimeDataDTO.setOrderCount(CeamStoreOrderMapper.selectCount(new LambdaQueryWrapper<CeamStoreOrder>()));orderTimeDataDTO.setPriceCount(CeamStoreOrderMapper.sumTotalPrice());orderTimeDataDTO.setGoodsCount(CeamStoreProductMapper.selectCount(new LambdaQueryWrapper<CeamStoreProduct>()));return orderTimeDataDTO;}@Overridepublic Map<String, Object> chartCount() {Map<String, Object> map = new LinkedHashMap<>();int nowMonth = OrderUtil.dateToTimestampT(DateUtil.beginOfMonth(new Date()));map.put("chart", CeamStoreOrderMapper.chartList(nowMonth));map.put("chartT", CeamStoreOrderMapper.chartListT(nowMonth));return map;}@Override//@Cacheablepublic Map<String, Object> queryAll(CeamStoreOrderQueryCriteria criteria, Pageable pageable) {getPage(pageable);PageInfo<CeamStoreOrder> page = new PageInfo<>(queryAll(criteria));List<CeamStoreOrderDto> storeOrderDTOS = new ArrayList<>();for (CeamStoreOrder CeamStoreOrder : page.getList()) {orderList(storeOrderDTOS, CeamStoreOrder);}Map<String, Object> map = new LinkedHashMap<>(2);map.put("content", storeOrderDTOS);map.put("totalElements", page.getTotal());return map;}/*** 代码提取* @param storeOrderDTOS* @param CeamStoreOrder*/private void orderList(List<CeamStoreOrderDto> storeOrderDTOS, CeamStoreOrder CeamStoreOrder) {CeamStoreOrderDto CeamStoreOrderDto = generator.convert(CeamStoreOrder, CeamStoreOrderDto.class);Integer _status = OrderUtil.orderStatus(CeamStoreOrder.getPaid(), CeamStoreOrder.getStatus(),CeamStoreOrder.getRefundStatus());if (CeamStoreOrder.getStoreId() > 0) {CeamSystemStore systemStore = systemStoreService.getById(CeamStoreOrder.getStoreId());if (Objects.nonNull(systemStore)) {String storeName = systemStore.getName();CeamStoreOrderDto.setStoreName(storeName);}}//订单状态String orderStatusStr = OrderUtil.orderStatusStr(CeamStoreOrder.getPaid(), CeamStoreOrder.getStatus(), CeamStoreOrder.getShippingType(), CeamStoreOrder.getRefundStatus());if (_status == 3) {String refundTime = OrderUtil.stampToDate(String.valueOf(CeamStoreOrder.getRefundReasonTime()));String str = "<b style='color:#f124c7'>申请退款</b><br/>" +"<span>退款原因:" + CeamStoreOrder.getRefundReasonWap() + "</span><br/>" +"<span>备注说明:" + CeamStoreOrder.getRefundReasonWapExplain() + "</span><br/>" +"<span>退款时间:" + refundTime + "</span><br/>";orderStatusStr = str;}CeamStoreOrderDto.setStatusName(orderStatusStr);CeamStoreOrderDto.set_status(_status);String payTypeName = OrderUtil.payTypeName(CeamStoreOrder.getPayType(), CeamStoreOrder.getPaid());CeamStoreOrderDto.setPayTypeName(payTypeName);CeamStoreOrderDto.setPinkName(orderType(CeamStoreOrder.getId(), CeamStoreOrder.getPinkId(), CeamStoreOrder.getCombinationId(), CeamStoreOrder.getSeckillId(), CeamStoreOrder.getBargainId(),CeamStoreOrder.getShippingType()));List<CeamStoreOrderCartInfo> cartInfos = storeOrderCartInfoService.list(new LambdaQueryWrapper<CeamStoreOrderCartInfo>().eq(CeamStoreOrderCartInfo::getOid, CeamStoreOrder.getId()));List<StoreOrderCartInfoDto> cartInfoDTOS = new ArrayList<>();for (CeamStoreOrderCartInfo cartInfo : cartInfos) {StoreOrderCartInfoDto cartInfoDTO = new StoreOrderCartInfoDto();cartInfoDTO.setCartInfoMap(JSON.parseObject(cartInfo.getCartInfo()));cartInfoDTOS.add(cartInfoDTO);}CeamStoreOrderDto.setCartInfoList(cartInfoDTOS);CeamStoreOrderDto.setUserDTO(generator.convert(userService.getById(CeamStoreOrder.getUid()), CeamUserDto.class));if (CeamStoreOrderDto.getUserDTO() == null) {CeamStoreOrderDto.setUserDTO(new CeamUserDto());}storeOrderDTOS.add(CeamStoreOrderDto);}@Override//@Cacheablepublic List<CeamStoreOrder> queryAll(CeamStoreOrderQueryCriteria criteria) {return baseMapper.selectList(QueryHelpPlus.getPredicate(CeamStoreOrder.class, criteria));}@Override@Transactional(rollbackFor = Exception.class)public CeamStoreOrderDto create(CeamStoreOrder resources) {if (this.getOne(new LambdaQueryWrapper<CeamStoreOrder>().eq(CeamStoreOrder::getUnique, resources.getUnique())) != null) {throw new EntityExistException(CeamStoreOrder.class, "unique", resources.getUnique());}this.save(resources);return generator.convert(resources, CeamStoreOrderDto.class);}@Override@Transactional(rollbackFor = Exception.class)public void update(CeamStoreOrder resources) {// CeamStoreOrder CeamStoreOrder = this.getById(resources.getId());// CeamStoreOrder CeamStoreOrder1 = this.getOne(new LambdaQueryWrapper<CeamStoreOrder>()//.eq(CeamStoreOrder::getUnique, resources.getUnique()));// if (CeamStoreOrder1 != null && !CeamStoreOrder1.getId().equals(CeamStoreOrder.getId())) {// throw new EntityExistException(CeamStoreOrder.class, "unique", resources.getUnique());// }// CeamStoreOrder.copy(resources);// this.saveOrUpdate(CeamStoreOrder);}@Overridepublic void download(List<CeamStoreOrderDto> all, HttpServletResponse response) throws IOException {List<Map<String, Object>> list = new ArrayList<>();for (CeamStoreOrderDto CeamStoreOrder : all) {Map<String, Object> map = new LinkedHashMap<>();map.put("订单号", CeamStoreOrder.getOrderId());map.put("用户id", CeamStoreOrder.getUid());map.put("用户姓名", CeamStoreOrder.getRealName());map.put("用户电话", CeamStoreOrder.getUserPhone());map.put("详细地址", CeamStoreOrder.getUserAddress());map.put("购物车id", CeamStoreOrder.getCartId());map.put("运费金额", CeamStoreOrder.getFreightPrice());map.put("订单商品总数", CeamStoreOrder.getTotalNum());map.put("订单总价", CeamStoreOrder.getTotalPrice());map.put("邮费", CeamStoreOrder.getTotalPostage());map.put("实际支付金额", CeamStoreOrder.getPayPrice());map.put("支付邮费", CeamStoreOrder.getPayPostage());map.put("抵扣金额", CeamStoreOrder.getDeductionPrice());map.put("优惠券id", CeamStoreOrder.getCouponId());map.put("优惠券金额", CeamStoreOrder.getCouponPrice());map.put("支付状态", CeamStoreOrder.getPaid());map.put("支付时间", CeamStoreOrder.getPayTime());map.put("支付方式", CeamStoreOrder.getPayType());map.put("订单状态(-1 : 申请退款 -2 : 退货成功 0:待发货;1:待收货;2:已收货;3:待评价;-1:已退款)", CeamStoreOrder.getStatus());map.put("0 未退款 1 申请中 2 已退款", CeamStoreOrder.getRefundStatus());map.put("退款图片", CeamStoreOrder.getRefundReasonWapImg());map.put("退款用户说明", CeamStoreOrder.getRefundReasonWapExplain());map.put("退款时间", CeamStoreOrder.getRefundReasonTime());map.put("前台退款原因", CeamStoreOrder.getRefundReasonWap());map.put("不退款的理由", CeamStoreOrder.getRefundReason());map.put("退款金额", CeamStoreOrder.getRefundPrice());map.put("快递公司编号", CeamStoreOrder.getDeliverySn());map.put("快递名称/送货人姓名", CeamStoreOrder.getDeliveryName());map.put("发货类型", CeamStoreOrder.getDeliveryType());map.put("快递单号/手机号", CeamStoreOrder.getDeliveryId());map.put("消费赚取积分", CeamStoreOrder.getGainIntegral());map.put("使用积分", CeamStoreOrder.getUseIntegral());map.put("给用户退了多少积分", CeamStoreOrder.getBackIntegral());map.put("备注", CeamStoreOrder.getMark());map.put("管理员备注", CeamStoreOrder.getRemark());map.put("拼团产品id0一般产品", CeamStoreOrder.getCombinationId());map.put("拼团id 0没有拼团", CeamStoreOrder.getPinkId());map.put("成本价", CeamStoreOrder.getCost());map.put("秒杀产品ID", CeamStoreOrder.getSeckillId());map.put("砍价id", CeamStoreOrder.getBargainId());map.put("核销码", CeamStoreOrder.getVerifyCode());map.put("门店id", CeamStoreOrder.getStoreId());map.put("配送方式 1=快递 ,2=门店自提", CeamStoreOrder.getShippingType());list.add(map);}FileUtil.downloadExcel(list, response);}@Overridepublic Map<String, Object> queryAll(List<String> ids) {List<CeamStoreOrder> CeamStoreOrders = this.list(new LambdaQueryWrapper<CeamStoreOrder>().in(CeamStoreOrder::getOrderId, ids));List<CeamStoreOrderDto> storeOrderDTOS = new ArrayList<>();for (CeamStoreOrder CeamStoreOrder : CeamStoreOrders) {CeamStoreOrderDto CeamStoreOrderDto = generator.convert(CeamStoreOrder, CeamStoreOrderDto.class);Integer _status = OrderUtil.orderStatus(CeamStoreOrder.getPaid(), CeamStoreOrder.getStatus(),CeamStoreOrder.getRefundStatus());if (CeamStoreOrder.getStoreId() > 0) {String storeName = systemStoreService.getById(CeamStoreOrder.getStoreId()).getName();CeamStoreOrderDto.setStoreName(storeName);}//订单状态String orderStatusStr = OrderUtil.orderStatusStr(CeamStoreOrder.getPaid(), CeamStoreOrder.getStatus(), CeamStoreOrder.getShippingType(), CeamStoreOrder.getRefundStatus());if (_status == 3) {String refundTime = OrderUtil.stampToDate(String.valueOf(CeamStoreOrder.getRefundReasonTime()));String str = "<b style='color:#f124c7'>申请退款</b><br/>" +"<span>退款原因:" + CeamStoreOrder.getRefundReasonWap() + "</span><br/>" +"<span>备注说明:" + CeamStoreOrder.getRefundReasonWapExplain() + "</span><br/>" +"<span>退款时间:" + refundTime + "</span><br/>";orderStatusStr = str;}CeamStoreOrderDto.setStatusName(orderStatusStr);CeamStoreOrderDto.set_status(_status);String payTypeName = OrderUtil.payTypeName(CeamStoreOrder.getPayType(), CeamStoreOrder.getPaid());CeamStoreOrderDto.setPayTypeName(payTypeName);CeamStoreOrderDto.setPinkName(orderType(CeamStoreOrder.getId(), CeamStoreOrder.getPinkId(), CeamStoreOrder.getCombinationId(), CeamStoreOrder.getSeckillId(), CeamStoreOrder.getBargainId(),CeamStoreOrder.getShippingType()));List<CeamStoreOrderCartInfo> cartInfos = storeOrderCartInfoService.list(new LambdaQueryWrapper<CeamStoreOrderCartInfo>().eq(CeamStoreOrderCartInfo::getOid, CeamStoreOrder.getId()));List<StoreOrderCartInfoDto> cartInfoDTOS = new ArrayList<>();for (CeamStoreOrderCartInfo cartInfo : cartInfos) {StoreOrderCartInfoDto cartInfoDTO = new StoreOrderCartInfoDto();cartInfoDTO.setCartInfoMap(JSON.parseObject(cartInfo.getCartInfo()));cartInfoDTOS.add(cartInfoDTO);}CeamStoreOrderDto.setCartInfoList(cartInfoDTOS);CeamStoreOrderDto.setUserDTO(generator.convert(userService.getOne(new LambdaQueryWrapper<CeamUser>().eq(CeamUser::getUid, CeamStoreOrder.getUid())), CeamUserDto.class));storeOrderDTOS.add(CeamStoreOrderDto);}Map<String, Object> map = new LinkedHashMap<>(2);map.put("content", storeOrderDTOS);return map;}@Overridepublic String orderType(Long id, Long pinkId, Long combinationId, Long seckillId,Long bargainId, int shippingType) {String str = "[普通订单]";if ( pinkId > 0 || combinationId > 0) {CeamStorePink storePink = storePinkService.getOne(new LambdaQueryWrapper<CeamStorePink>().eq(CeamStorePink::getOrderIdKey, id));if (ObjectUtil.isNull(storePink)) {str = "[拼团订单]";} else {switch (storePink.getStatus()) {case 1:str = "[拼团订单]正在进行中";break;case 2:str = "[拼团订单]已完成";break;case 3:str = "[拼团订单]未完成";break;default:str = "[拼团订单]历史订单";break;}}} else if (seckillId > 0) {str = "[秒杀订单]";} else if (bargainId > 0) {str = "[砍价订单]";}if (shippingType == 2) {str = "[核销订单]";}return str;}@Override@Transactional(rollbackFor = Exception.class)public void refund(CeamStoreOrder resources) {if (resources.getPayPrice().doubleValue() < 0) {throw new BadRequestException("请输入退款金额");}if ("yue".equals(resources.getPayType())) {//修改状态resources.setRefundStatus(2);resources.setRefundPrice(resources.getPayPrice());this.updateById(resources);//退款到余额CeamUserDto userDTO = generator.convert(userService.getOne(new LambdaQueryWrapper<CeamUser>().eq(CeamUser::getUid, resources.getUid())), CeamUserDto.class);userMapper.updateMoney(resources.getPayPrice().doubleValue(),resources.getUid());CeamUserBill userBill = new CeamUserBill();userBill.setUid(resources.getUid());userBill.setLinkId(resources.getId().toString());userBill.setPm(1);userBill.setTitle("商品退款");userBill.setCategory("now_money");userBill.setType("pay_product_refund");userBill.setNumber(resources.getPayPrice());userBill.setBalance(NumberUtil.add(resources.getPayPrice(), userDTO.getNowMoney()));userBill.setMark("订单退款到余额");userBill.setStatus(1);CeamUserBillService.save(userBill);CeamStoreOrderStatus storeOrderStatus = new CeamStoreOrderStatus();storeOrderStatus.setOid(resources.getId());storeOrderStatus.setChangeType("refund_price");storeOrderStatus.setChangeMessage("退款给用户:" + resources.getPayPrice() + "元");storeOrderStatus.setChangeTime(new Date());CeamStoreOrderStatusService.save(storeOrderStatus);} else {BigDecimal bigDecimal = new BigDecimal("100");try {payService.refundOrder(resources.getOrderId(),bigDecimal.multiply(resources.getPayPrice()).intValue());} catch (WxPayException e) {log.info("refund-error:{}", e.getMessage());throw new BadRequestException("退款失败:" + e.getMessage());}}}}

六、获取源码

大家点赞、收藏、关注、评论啦、关注下方公众号获取联系方式👇🏻👇🏻

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。