feat(mall): 新增新人礼设置功能
- 新增新人礼设置页面和相关 API
- 实现新人礼状态切换、积分赠送和优惠券选择功能
- 优化订单支付逻辑,支持积分支付
6 files modified
2 files added
| | |
| | | |
| | | @Getter |
| | | public enum CommonDictionaryEnum { |
| | | /** |
| | | * 新人礼设置 |
| | | */ |
| | | NEW_GIFT_SETTING("NEW_GIFT_SETTING", "NEW_GIFT_SETTING"), |
| | | |
| | | /** |
| | | * 开屏页设置 |
| | |
| | | package cc.mrbird.febs.mall.controller; |
| | | |
| | | import cc.mrbird.febs.common.entity.FebsResponse; |
| | | import cc.mrbird.febs.common.enumerates.CommonDictionaryEnum; |
| | | import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; |
| | | import cc.mrbird.febs.mall.dto.ScoreSettingDto; |
| | | import cc.mrbird.febs.mall.dto.signActivity.ApiNewGiftSettingDto; |
| | | import cc.mrbird.febs.mall.service.ICommonService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | return new FebsResponse().success(); |
| | | } |
| | | |
| | | @PostMapping(value = "/addNewGiftSetting") |
| | | public FebsResponse addNewGiftSetting(ApiNewGiftSettingDto dto) { |
| | | commonService.addDataDic( |
| | | CommonDictionaryEnum.NEW_GIFT_SETTING.getType(), |
| | | CommonDictionaryEnum.NEW_GIFT_SETTING.getCode(), |
| | | dto, |
| | | "新人礼设置"); |
| | | return new FebsResponse().success(); |
| | | } |
| | | |
| | | } |
| | |
| | | package cc.mrbird.febs.mall.controller; |
| | | |
| | | import cc.mrbird.febs.common.entity.FebsConstant; |
| | | import cc.mrbird.febs.common.enumerates.CommonDictionaryEnum; |
| | | import cc.mrbird.febs.common.enumerates.DataDictionaryEnum; |
| | | import cc.mrbird.febs.common.utils.FebsUtil; |
| | | import cc.mrbird.febs.mall.dto.ScoreSettingDto; |
| | | import cc.mrbird.febs.mall.dto.signActivity.ApiNewGiftSettingDto; |
| | | import cc.mrbird.febs.mall.entity.DataDictionaryCustom; |
| | | import cc.mrbird.febs.mall.entity.MallGoods; |
| | | import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper; |
| | |
| | | return FebsUtil.view("modules/score/setting"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 新人礼设置 |
| | | * @param model |
| | | * @return |
| | | */ |
| | | @GetMapping("newGiftSetting") |
| | | public String newGiftSetting(Model model) { |
| | | DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( |
| | | CommonDictionaryEnum.NEW_GIFT_SETTING.getType(), |
| | | CommonDictionaryEnum.NEW_GIFT_SETTING.getCode() |
| | | ); |
| | | if (dic != null) { |
| | | model.addAttribute("obj", JSONObject.parseObject(dic.getValue(), ApiNewGiftSettingDto.class)); |
| | | } |
| | | return FebsUtil.view("modules/score/newGiftSetting"); |
| | | } |
| | | |
| | | @GetMapping("goods") |
| | | public String goodsList() { |
| | | return FebsUtil.view("modules/score/goodsList"); |
New file |
| | |
| | | package cc.mrbird.febs.mall.dto.signActivity; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "ApiNewGiftSettingDto", description = "参数类") |
| | | public class ApiNewGiftSettingDto { |
| | | /** |
| | | * 是否开启新人礼 |
| | | */ |
| | | private int state; |
| | | |
| | | /** |
| | | * 积分 |
| | | */ |
| | | private String prizeScore; |
| | | /** |
| | | * 优惠券ID |
| | | */ |
| | | private Long couponId; |
| | | } |
| | |
| | | return new FebsResponse().success().message("设置成功"); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | String pwd = SecureUtil.md5("123456"); |
| | | System.out.println(pwd); |
| | | } |
| | | |
| | | @Override |
| | | public FebsResponse modifyMemberInfo(ModifyMemberInfoDto modifyMemberInfoDto) { |
| | | MallMember member = LoginUserUtil.getLoginUser(); |
| | |
| | | return new FebsResponse().success().data(apiMoneyFlowHeaderVo); |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | Long userld = 16425L; |
| | | String shopAccount = "爱和美医疗"; |
| | | String shopPwd = "blnka2005"; |
| | | |
| | | HashMap<String, String> objectObjectHashMap = new HashMap<>(); |
| | | |
| | | objectObjectHashMap.put("shopAccount",shopAccount); |
| | | objectObjectHashMap.put("shopPwd",shopPwd); |
| | | objectObjectHashMap.put("userId",userld.toString()); |
| | | |
| | | //sign= MD5(shopAccount+shopPwd+userId) |
| | | StringBuffer stringBuffer = new StringBuffer(); |
| | | stringBuffer.append(shopAccount); |
| | | stringBuffer.append(shopPwd); |
| | | stringBuffer.append(userld); |
| | | String sign = MD5.MD5Encode(stringBuffer.toString()); |
| | | objectObjectHashMap.put("sign",sign); |
| | | |
| | | System.out.println(sign); |
| | | |
| | | System.out.println(objectObjectHashMap); |
| | | String url = "https://data.muchun.co/api/getCustomerCheckRecords"; |
| | | String result = HttpCurlUtil.sendPost(url, objectObjectHashMap); |
| | | Integer retCode = JSONUtil.parseObj(result).getInt("retCode"); |
| | | String message = JSONUtil.parseObj(result).getStr("message"); |
| | | if(0 != retCode){ |
| | | System.out.println(message); |
| | | } |
| | | |
| | | JSONArray data = JSONUtil.parseObj(result).getJSONArray("data"); |
| | | System.out.println(data); |
| | | } |
| | | // public static void main(String[] args) { |
| | | // Long userld = 16425L; |
| | | // String shopAccount = "爱和美医疗"; |
| | | // String shopPwd = "blnka2005"; |
| | | // |
| | | // HashMap<String, String> objectObjectHashMap = new HashMap<>(); |
| | | // |
| | | // objectObjectHashMap.put("shopAccount",shopAccount); |
| | | // objectObjectHashMap.put("shopPwd",shopPwd); |
| | | // objectObjectHashMap.put("userId",userld.toString()); |
| | | // |
| | | // //sign= MD5(shopAccount+shopPwd+userId) |
| | | // StringBuffer stringBuffer = new StringBuffer(); |
| | | // stringBuffer.append(shopAccount); |
| | | // stringBuffer.append(shopPwd); |
| | | // stringBuffer.append(userld); |
| | | // String sign = MD5.MD5Encode(stringBuffer.toString()); |
| | | // objectObjectHashMap.put("sign",sign); |
| | | // |
| | | // System.out.println(sign); |
| | | // |
| | | // System.out.println(objectObjectHashMap); |
| | | // String url = "https://data.muchun.co/api/getCustomerCheckRecords"; |
| | | // String result = HttpCurlUtil.sendPost(url, objectObjectHashMap); |
| | | // Integer retCode = JSONUtil.parseObj(result).getInt("retCode"); |
| | | // String message = JSONUtil.parseObj(result).getStr("message"); |
| | | // if(0 != retCode){ |
| | | // System.out.println(message); |
| | | // } |
| | | // |
| | | // JSONArray data = JSONUtil.parseObj(result).getJSONArray("data"); |
| | | // System.out.println(data); |
| | | // } |
| | | |
| | | |
| | | } |
| | |
| | | if (OrderStatusEnum.WAIT_PAY.getValue() != orderInfo.getStatus()) { |
| | | throw new FebsException("订单状态不能支付"); |
| | | } |
| | | |
| | | String payResultStr = ""; |
| | | String wxResultStr = ""; |
| | | if(orderInfo.getAmount().compareTo(BigDecimal.ZERO) <= 0){ |
| | | //先支付积分部分 |
| | | if(orderInfo.getScoreAmount().compareTo(BigDecimal.ZERO) > 0){ |
| | | balanceScorePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore"); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | member.getId(), |
| | | orderInfo.getAmount().negate(), |
| | | orderInfo.getScoreAmount().negate(), |
| | | ScoreFlowTypeEnum.PAY.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | FlowTypeEnum.PRIZE_SCORE.getValue(), |
| | |
| | | 2 |
| | | ); |
| | | } |
| | | |
| | | String payResultStr = ""; |
| | | String wxResultStr = ""; |
| | | if(orderInfo.getAmount().compareTo(BigDecimal.ZERO) <= 0){ |
| | | orderInfo.setPayOrderNo(orderInfo.getOrderNo()); |
| | | orderInfo.setPayMethod("积分支付"); |
| | | orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); |
| | |
| | | agentProducer.sendOrderReturn(orderInfo.getId()); |
| | | break; |
| | | case "3": |
| | | |
| | | payResultStr = balancePay(orderInfo, payOrderDto.getTradePwd(), "balance"); |
| | | |
| | | //先支付积分部分 |
| | | if(orderInfo.getScoreAmount().compareTo(BigDecimal.ZERO) > 0){ |
| | | balanceScorePay(orderInfo, payOrderDto.getTradePwd(), "prizeScore"); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | member.getId(), |
| | | orderInfo.getScoreAmount().negate(), |
| | | ScoreFlowTypeEnum.PAY.getValue(), |
| | | orderInfo.getOrderNo(), |
| | | FlowTypeEnum.PRIZE_SCORE.getValue(), |
| | | StrUtil.format(ScoreFlowTypeEnum.PAY.getDesc(),orderInfo.getScoreAmount()), |
| | | 2 |
| | | ); |
| | | } |
| | | |
| | | orderInfo.setPayOrderNo(orderInfo.getOrderNo()); |
| | | orderInfo.setPayMethod("余额支付"); |
| | | orderInfo.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue()); |
| | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | |
| | | order.setPayOrderNo(transaction_id); |
| | | mallOrderInfoMapper.updateById(order); |
| | | |
| | | |
| | | //先支付积分部分 |
| | | if(order.getScoreAmount().compareTo(BigDecimal.ZERO) > 0){ |
| | | memberWalletService.reduce(order.getScoreAmount(), order.getMemberId(), "prizeScore"); |
| | | mallMoneyFlowService.addMoneyFlow( |
| | | order.getMemberId(), |
| | | order.getScoreAmount().negate(), |
| | | ScoreFlowTypeEnum.PAY.getValue(), |
| | | order.getOrderNo(), |
| | | FlowTypeEnum.PRIZE_SCORE.getValue(), |
| | | StrUtil.format(ScoreFlowTypeEnum.PAY.getDesc(),order.getScoreAmount()), |
| | | 2 |
| | | ); |
| | | } |
| | | |
| | | agentProducer.sendOrderCoupon(order.getId()); |
| | | // agentProducer.sendGetScoreMsg(order.getId()); |
| | | |
New file |
| | |
| | | <div class="layui-fluid layui-anim febs-anim" id="new-gift-setting" lay-title="新人礼设置"> |
| | | <div class="layui-row layui-col-space8 febs-container"> |
| | | <form class="layui-form" action="" lay-filter="new-gift-setting-form"> |
| | | <div class="layui-card"> |
| | | <div class="layui-card-body"> |
| | | <blockquote class="layui-elem-quote blue-border">基本规则:</blockquote> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">新人礼:</label> |
| | | <div class="layui-input-block"> |
| | | <input type="radio" name="state" value="0" title="关闭" /> |
| | | <input type="radio" name="state" value="1" title="开启" checked/> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label ">赠送积分:</label> |
| | | <div class="layui-input-inline" style="width: 120px"> |
| | | <input type="text" name="prizeScore" lay-verify="number" th:value="${obj != null ? obj.prizeScore : null}" autocomplete="off" class="layui-input"> |
| | | </div> |
| | | </div> |
| | | <div class="layui-form-item"> |
| | | <label class="layui-form-label">优惠卷:</label> |
| | | <div class="layui-input-inline"> |
| | | <select name="couponId" class="coupon-select-category" id="couponCategarySelect"> |
| | | <option value="">请选择</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | |
| | | |
| | | </div> |
| | | |
| | | <div class="layui-card-footer"> |
| | | <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="new-gift-setting-form-submit" id="submit">保存</button> |
| | | </div> |
| | | </div> |
| | | </form> |
| | | |
| | | <!-- <div class="layui-form-item febs-hide">--> |
| | | <!-- <button class="layui-btn" lay-submit="" lay-filter="new-gift-setting-form-submit" id="submit-form"></button>--> |
| | | <!-- <button type="reset" class="layui-btn" id="reset"></button>--> |
| | | <!-- </div>--> |
| | | </div> |
| | | </div> |
| | | <style> |
| | | .layui-form-label { |
| | | width: 120px; |
| | | } |
| | | |
| | | .layui-form-item .layui-input-block { |
| | | margin-left: 150px; |
| | | } |
| | | |
| | | .layui-table-form .layui-form-item { |
| | | margin-bottom: 20px !important; |
| | | } |
| | | </style> |
| | | <script data-th-inline="javascript" type="text/javascript"> |
| | | layui.use(['dropdown', 'jquery', 'validate', 'febs', 'form', 'eleTree', 'xmSelect'], function () { |
| | | var $ = layui.jquery, |
| | | febs = layui.febs, |
| | | form = layui.form, |
| | | validate = layui.validate, |
| | | obj = [[${obj}]], |
| | | $view = $('#new-gift-setting'); |
| | | |
| | | //(下拉框) |
| | | $.get(ctx + 'admin/goods/coupon/tree', function (data) { |
| | | for (var k in data) |
| | | { |
| | | $(".coupon-select-category").append("<option value='" + data[k].couponId + "'>" + data[k].couponName + "</option>"); |
| | | } |
| | | layui.use('form', function () { |
| | | var form = layui.form; |
| | | // //如果obj.couponId不为空,则赋值 |
| | | // if (null != obj.couponId) { |
| | | $("#couponCategarySelect").val(obj.couponId); |
| | | // } |
| | | form.render(); |
| | | }); |
| | | }); |
| | | |
| | | form.verify(validate); |
| | | |
| | | initNewGiftValue(); |
| | | function initNewGiftValue() { |
| | | form.val("new-gift-setting-form", { |
| | | "state": obj.state, |
| | | "prizeScore": obj.prizeScore, |
| | | "couponId": obj.couponId, |
| | | }); |
| | | } |
| | | |
| | | |
| | | form.on('submit(new-gift-setting-form-submit)', function (data) { |
| | | console.log(data); |
| | | febs.post(ctx + 'admin/score/addNewGiftSetting', data.field, function (res) { |
| | | febs.alert.success('设置成功'); |
| | | }); |
| | | return false; |
| | | }); |
| | | }); |
| | | </script> |