6个文件已删除
78个文件已修改
26个文件已添加
New file |
| | |
| | | delete from mall_app_version; |
| | | delete from mall_classify_one; |
| | | delete from mall_classify_two; |
| | | delete from mall_commission_settlement; |
| | | delete from mall_commission_settlement_month; |
| | | -- delete from mall_express_company; |
| | | delete from mall_goods; |
| | | delete from mall_goods_cart; |
| | | delete from mall_goods_detail; |
| | | delete from mall_goods_set; |
| | | delete from mall_goods_sku; |
| | | delete from mall_goods_spec; |
| | | delete from mall_goods_spec_value; |
| | | delete from mall_group_spec; |
| | | delete from mall_order; |
| | | delete from mall_order_detail; |
| | | delete from mall_order_detail_group_spec; |
| | | delete from mall_order_detail_group_spec_log; |
| | | delete from mall_order_detail_use; |
| | | delete from mall_order_main; |
| | | delete from mall_tag; |
| | | delete from mall_user_address; |
| | | delete from mall_user_collect; |
| | | delete from mall_user_evaluation; |
| | | delete from mall_user_report; |
| | | delete from mall_vip_equity; |
| | | -- delete from mem_member_grade; |
| | | -- delete from mem_member_grade_rule; |
| | | delete from mem_merchant; |
| | | delete from mem_merchant_bank; |
| | | delete from mem_uese_sales; |
| | | delete from mem_user where id != 1; |
| | | delete from mem_user_bank_detail where user_id != 1; |
| | | delete from mem_user_delete; |
| | | delete from mem_user_login; |
| | | delete from mem_user_relation where id != 1; |
| | | delete from merchant_notice; |
| | | -- delete from merchant_sys_menu; |
| | | -- delete from merchant_sys_relation; |
| | | -- delete from merchant_sys_role; |
| | | -- delete from merchant_sys_user; |
| | | delete from my_coupon; |
| | | delete from my_coupon_product; |
| | | delete from my_doctor; |
| | | delete from my_store_service; |
| | | delete from my_user_coupon; |
| | | delete from my_user_coupon_order; |
| | | delete from my_user_substance_coupon; |
| | | delete from sys_area_city; |
| | | -- delete from sys_dept; |
| | | -- delete from sys_dict; |
| | | delete from sys_expense; |
| | | delete from sys_login_log; |
| | | delete from sys_notice; |
| | | delete from sys_operation_log; |
| | | -- delete from sys_menu; |
| | | -- delete from sys_relation; |
| | | -- delete from sys_role; |
| | | -- delete from sys_user; |
| | | delete from system_notice; |
| | | -- delete from t_app_set; |
| | | delete from t_banner; |
| | | -- delete from t_city_region; |
| | | delete from t_feedback; |
| | | delete from t_notice; |
| | | delete from t_notice_message; |
| | | -- delete from t_remote_set; |
| | | delete from t_sms_record; |
| | | -- delete from t_system_set; |
| | | delete from t_system_set_audit; |
| | |
| | | package com.sinata.core.aop; |
| | | |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.sinata.core.common.annotion.BussinessLog; |
| | | import com.sinata.core.common.constant.dictmap.base.AbstractDictMap; |
| | | import com.sinata.core.log.LogManager; |
| | | import com.sinata.core.log.LogObjectHolder; |
| | | import com.sinata.core.log.factory.LogTaskFactory; |
| | | import com.sinata.core.shiro.ShiroKit; |
| | | import com.sinata.core.shiro.ShiroUser; |
| | | import com.sinata.core.support.HttpKit; |
| | | import com.sinata.core.util.Contrast; |
| | | import org.aspectj.lang.ProceedingJoinPoint; |
| | | import org.aspectj.lang.Signature; |
| | | import org.aspectj.lang.annotation.Around; |
| | |
| | | sb.append(" & "); |
| | | } |
| | | |
| | | //如果涉及到修改,比对变化 |
| | | // 如果涉及到修改,比对变化 |
| | | String msg; |
| | | if (bussinessName.indexOf("修改") != -1 || bussinessName.indexOf("编辑") != -1) { |
| | | Object obj1 = LogObjectHolder.me().get(); |
| | | Map<String, String> obj2 = HttpKit.getRequestParameters(); |
| | | msg = Contrast.contrastObj(dictClass, key, obj1, obj2); |
| | | //msg = Contrast.contrastObj(dictClass, key, obj1, obj2); |
| | | msg = key + "=" + obj2.get(key) |
| | | + ";" + JSONUtil.toJsonStr(obj1) |
| | | + ";" + JSONUtil.toJsonStr(obj2); |
| | | } else { |
| | | Map<String, String> parameters = HttpKit.getRequestParameters(); |
| | | AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); |
| | | msg = Contrast.parseMutiKey(dictMap, key, parameters); |
| | | //AbstractDictMap dictMap = (AbstractDictMap) dictClass.newInstance(); |
| | | //msg = Contrast.parseMutiKey(dictMap, key, parameters); |
| | | msg = JSONUtil.toJsonStr(parameters); |
| | | } |
| | | |
| | | LogManager.me().executeLog(LogTaskFactory.bussinessLog(user.getId(), bussinessName, className, methodName, msg, HttpKit.getIp())); |
| | |
| | | package com.sinata.core.shiro; |
| | | |
| | | import com.sinata.core.shiro.ShiroKit; |
| | | import com.sinata.core.shiro.ShiroUser; |
| | | import com.sinata.core.shiro.factory.IShiro; |
| | | import com.sinata.core.shiro.factory.ShiroFactroy; |
| | | import com.sinata.core.util.ToolUtil; |
| | |
| | | |
| | | import com.sinata.core.common.constant.Const; |
| | | import com.sinata.core.common.constant.factory.ConstantFactory; |
| | | import com.sinata.core.shiro.ShiroUser; |
| | | import com.sinata.core.util.ToolUtil; |
| | | import org.apache.shiro.SecurityUtils; |
| | | import org.apache.shiro.crypto.hash.Md5Hash; |
| | |
| | | package com.sinata.core.shiro; |
| | | |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.List; |
| | | |
| | |
| | | * @author fengshuonan |
| | | * @date 2016年12月5日 上午10:26:43 |
| | | */ |
| | | @Data |
| | | public class ShiroUser implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | |
| | | public String name; // 姓名 |
| | | public Integer deptId; // 部门id |
| | | public List<Integer> roleList; // 角色集 |
| | | public String cityCode; // 角色集 |
| | | public String deptName; // 部门名称 |
| | | public List<String> roleNames; // 角色名称集 |
| | | |
| | | |
| | | public Integer getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(Integer id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public String getAccount() { |
| | | return account; |
| | | } |
| | | |
| | | public void setAccount(String account) { |
| | | this.account = account; |
| | | } |
| | | |
| | | public String getName() { |
| | | return name; |
| | | } |
| | | |
| | | public void setName(String name) { |
| | | this.name = name; |
| | | } |
| | | |
| | | public Integer getDeptId() { |
| | | return deptId; |
| | | } |
| | | |
| | | public void setDeptId(Integer deptId) { |
| | | this.deptId = deptId; |
| | | } |
| | | |
| | | public List<Integer> getRoleList() { |
| | | return roleList; |
| | | } |
| | | |
| | | public void setRoleList(List<Integer> roleList) { |
| | | this.roleList = roleList; |
| | | } |
| | | |
| | | public String getDeptName() { |
| | | return deptName; |
| | | } |
| | | |
| | | public void setDeptName(String deptName) { |
| | | this.deptName = deptName; |
| | | } |
| | | |
| | | public List<String> getRoleNames() { |
| | | return roleNames; |
| | | } |
| | | |
| | | public void setRoleNames(List<String> roleNames) { |
| | | this.roleNames = roleNames; |
| | | } |
| | | |
| | | } |
| | |
| | | import com.sinata.core.listener.ConfigListener; |
| | | import com.sinata.core.shiro.ShiroKit; |
| | | import com.sinata.core.shiro.ShiroUser; |
| | | import com.sinata.core.shiro.check.ICheck; |
| | | import com.sinata.core.support.CollectionKit; |
| | | import com.sinata.core.support.HttpKit; |
| | | import com.sinata.core.util.SpringContextHolder; |
| | |
| | | */ |
| | | package com.sinata.core.shiro.check; |
| | | |
| | | import com.sinata.core.shiro.check.ICheck; |
| | | import com.sinata.core.util.SpringContextHolder; |
| | | |
| | | /** |
| | |
| | | import com.sinata.core.common.constant.factory.ConstantFactory; |
| | | import com.sinata.core.common.constant.state.ManagerStatus; |
| | | import com.sinata.core.shiro.ShiroUser; |
| | | import com.sinata.core.shiro.factory.IShiro; |
| | | import com.sinata.core.util.Convert; |
| | | import com.sinata.core.util.SpringContextHolder; |
| | | import com.sinata.modular.system.dao.MenuMapper; |
| | |
| | | import org.apache.shiro.authc.SimpleAuthenticationInfo; |
| | | import org.apache.shiro.crypto.hash.Md5Hash; |
| | | import org.apache.shiro.util.ByteSource; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.DependsOn; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | |
| | | @Transactional(readOnly = true) |
| | | public class ShiroFactroy implements com.sinata.core.shiro.factory.IShiro { |
| | | |
| | | @Autowired |
| | | @Resource |
| | | private UserMapper userMapper; |
| | | |
| | | @Autowired |
| | | @Resource |
| | | private MenuMapper menuMapper; |
| | | |
| | | public static com.sinata.core.shiro.factory.IShiro me() { |
| | |
| | | roleNameList.add(ConstantFactory.me().getSingleRoleName(roleId)); |
| | | } |
| | | shiroUser.setRoleList(roleList); |
| | | shiroUser.setCityCode(user.getProvinceCode()); |
| | | shiroUser.setRoleNames(roleNameList); |
| | | |
| | | return shiroUser; |
| | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.sinata.common.enums.EnumCityRole; |
| | | import com.sinata.core.base.controller.BaseController; |
| | | import com.sinata.core.base.tips.ErrorTip; |
| | | import com.sinata.core.base.tips.SuccessTip; |
| | | import com.sinata.core.common.annotion.BussinessLog; |
| | | import com.sinata.core.common.annotion.Permission; |
| | | import com.sinata.core.common.constant.factory.PageFactory; |
| | | import com.sinata.core.shiro.ShiroKit; |
| | | import com.sinata.core.shiro.ShiroUser; |
| | | import com.sinata.core.util.DateUtils2; |
| | | import com.sinata.core.util.ExcelExportUtil; |
| | | import com.sinata.core.util.ExcelImportUtil; |
| | |
| | | if (StrUtil.isNotBlank(endTime)) { |
| | | endTime = endTime.replace("-", ""); |
| | | } |
| | | |
| | | String cityCode = ""; |
| | | try { |
| | | // 【城市管理员】数据查询 |
| | | ShiroUser shiroUser = ShiroKit.getUser(); |
| | | if (shiroUser.getRoleList().contains(EnumCityRole.PROVINCE_ROLE.index)) { |
| | | // 省级城市管理员 |
| | | cityCode = shiroUser.getCityCode().substring(0, 2); |
| | | } else if (shiroUser.getRoleList().contains(EnumCityRole.CITY_ROLE.index)) { |
| | | // 市级城市管理员 |
| | | cityCode = shiroUser.getCityCode().substring(0, 4); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | // 查询数据列表 |
| | | page.setTotal(commissionSettlementMonthService.queryListCount(beginTime, endTime, condition, condition1, condition2, condition3, null)); |
| | | List<CommissionSettlementMonth> list = commissionSettlementMonthService.queryList(beginTime, endTime, condition, condition1, condition2, condition3, null, page.getCurrent(), page.getSize()); |
| | | page.setTotal(commissionSettlementMonthService.queryListCount(beginTime, endTime, condition, condition1, condition2, cityCode, condition3, null)); |
| | | List<CommissionSettlementMonth> list = commissionSettlementMonthService.queryList(beginTime, endTime, condition, condition1, condition2, cityCode, condition3, null, page.getCurrent(), page.getSize()); |
| | | page.setRecords(list); |
| | | return super.packForBT(page); |
| | | } |
| | |
| | | @Permission |
| | | @ResponseBody |
| | | @RequestMapping(value = "/export") |
| | | public void exportOrder(String beginTime, String endTime, String condition, String condition1, String condition2, Integer condition3, HttpServletResponse response) throws IOException { |
| | | public void exportOrder(String beginTime, String endTime, String condition, String condition1, String condition2, String cityCode, Integer condition3, HttpServletResponse response) throws IOException { |
| | | // 时间搜索 |
| | | if (StrUtil.isNotBlank(beginTime)) { |
| | | beginTime = beginTime.replace("-", ""); |
| | |
| | | endTime = endTime.replace("-", ""); |
| | | } |
| | | // 查询数据列表 |
| | | List<CommissionSettlementMonth> list = commissionSettlementMonthService.queryList(beginTime, endTime, condition, condition1, condition2, condition3, null, null, null); |
| | | List<CommissionSettlementMonth> list = commissionSettlementMonthService.queryList(beginTime, endTime, condition, condition1, condition2, cityCode, condition3, null, null, null); |
| | | |
| | | List<List<Object>> dataList = new ArrayList<>(); |
| | | List<Object> titles = CollUtil.newArrayList( |
| | |
| | | package com.sinata.modular.mall.controller; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | |
| | | import com.sinata.common.enums.EnumIsDelete; |
| | | import com.sinata.common.enums.mall.EnumMallGoodsGroupType; |
| | | import com.sinata.common.enums.mall.EnumMallGoodsState; |
| | | import com.sinata.common.model.GroupSpecGoodsSkuJsonVo; |
| | | import com.sinata.core.base.controller.BaseController; |
| | | import com.sinata.core.base.tips.ErrorTip; |
| | | import com.sinata.core.common.annotion.BussinessLog; |
| | |
| | | |
| | | @Autowired |
| | | private IMallGoodsService mallGoodsService; |
| | | |
| | | @Autowired |
| | | private IMallGroupSpecService groupSpecService; |
| | | |
| | | @Autowired |
| | | private IMallGoodsSkuService mallGoodsSkuService; |
| | |
| | | .in("id", ids.split(",")) |
| | | ); |
| | | } |
| | | |
| | | @ResponseBody |
| | | @BussinessLog(value = "获取商品列表") |
| | | @GetMapping(value = "/goodsByGoodsSpecId") |
| | | public List<Map<String, Object>> goodsByIdsList(String goodsIds, Integer groupSpecId, String oldGoodsSkuJson) { |
| | | List<MallGoods> goodsList = mallGoodsService.selectList( |
| | | new EntityWrapper<MallGoods>() |
| | | .eq("group_type", EnumMallGoodsGroupType.GOODS.index) |
| | | .in("id", goodsIds.split(",")) |
| | | ); |
| | | |
| | | List<Map<String, Object>> list; |
| | | if (groupSpecId != null) { |
| | | String goodsSkuJson = oldGoodsSkuJson; |
| | | if (StrUtil.isBlank(goodsSkuJson) || goodsSkuJson.equals("[]")) { |
| | | // 查询套餐规格组信息 |
| | | MallGroupSpec groupSpec = groupSpecService.selectById(groupSpecId); |
| | | goodsSkuJson = groupSpec.getGoodsSkuJson(); |
| | | } |
| | | |
| | | // 格式化套餐规格组数据 |
| | | List<GroupSpecGoodsSkuJsonVo> groupSpecGoodsSkuJsonVoList; |
| | | if (StrUtil.isBlank(goodsSkuJson) || goodsSkuJson.equals("[]")) { |
| | | groupSpecGoodsSkuJsonVoList = null; |
| | | } else { |
| | | groupSpecGoodsSkuJsonVoList = JSONUtil.parseArray(goodsSkuJson).toList(GroupSpecGoodsSkuJsonVo.class); |
| | | } |
| | | |
| | | list = goodsList.stream().map(o -> { |
| | | Map<String, Object> map = BeanUtil.beanToMap(o); |
| | | Integer goodsNum = 1; |
| | | if (groupSpecGoodsSkuJsonVoList != null) { |
| | | // 匹配商品数量 |
| | | for (GroupSpecGoodsSkuJsonVo groupSpecGoodsSkuJsonVo : groupSpecGoodsSkuJsonVoList) { |
| | | if (o.getId().equals(groupSpecGoodsSkuJsonVo.getGoodsId())) { |
| | | goodsNum = groupSpecGoodsSkuJsonVo.getGoodsNum(); |
| | | } |
| | | } |
| | | } |
| | | map.put("goodsNum", goodsNum); |
| | | return map; |
| | | }).collect(Collectors.toList()); |
| | | } else { |
| | | list = goodsList.stream().map(o -> { |
| | | Map<String, Object> map = BeanUtil.beanToMap(o); |
| | | map.put("goodsNum", 1); |
| | | return map; |
| | | }).collect(Collectors.toList()); |
| | | } |
| | | return list; |
| | | } |
| | | } |
| | |
| | | package com.sinata.modular.mall.controller; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | |
| | | import com.sinata.common.enums.EnumIsDelete; |
| | | import com.sinata.common.enums.mall.EnumMallGoodsGroupType; |
| | | import com.sinata.common.enums.mall.EnumMallGoodsState; |
| | | import com.sinata.common.model.GroupSpecGoodsSkuJsonVo; |
| | | import com.sinata.core.base.controller.BaseController; |
| | | import com.sinata.core.base.tips.ErrorTip; |
| | | import com.sinata.core.common.annotion.BussinessLog; |
| | |
| | | ); |
| | | |
| | | return list.stream().map(o -> { |
| | | String[] goodsIds = o.getGoodsIds().split(","); |
| | | // String[] goodsIds = o.getGoodsIds().split(","); |
| | | // List<MallGoods> mallGoodsList = goodsList.stream() |
| | | // .filter(ggg -> { |
| | | // for (String gid : goodsIds) { |
| | | // if (gid.equals(ggg.getId() + "")) { |
| | | // return true; |
| | | // } |
| | | // } |
| | | // return false; |
| | | // }).collect(Collectors.toList()); |
| | | // |
| | | // o.setGoodsNames( |
| | | // mallGoodsList.stream() |
| | | // .map(MallGoods::getGoodsName) |
| | | // .collect(Collectors.joining(",")) |
| | | // ); |
| | | |
| | | // 封装显示套餐规格组商品名称、数量 |
| | | List<GroupSpecGoodsSkuJsonVo> groupSpecGoodsSkuJsonVoList; |
| | | String goodsSkuJson = o.getGoodsSkuJson(); |
| | | if (ObjUtil.isNotEmpty(goodsSkuJson)) { |
| | | groupSpecGoodsSkuJsonVoList = JSONUtil.parseArray(goodsSkuJson).toList(GroupSpecGoodsSkuJsonVo.class); |
| | | } else { |
| | | groupSpecGoodsSkuJsonVoList = null; |
| | | } |
| | | List<MallGoods> mallGoodsList = goodsList.stream() |
| | | .filter(ggg -> { |
| | | for (String gid : goodsIds) { |
| | | if (gid.equals(ggg.getId() + "")) { |
| | | return true; |
| | | if (groupSpecGoodsSkuJsonVoList != null) { |
| | | for (GroupSpecGoodsSkuJsonVo groupSpecGoodsSkuJsonVo : groupSpecGoodsSkuJsonVoList) { |
| | | if (groupSpecGoodsSkuJsonVo.getGoodsId().equals(ggg.getId())) { |
| | | ggg.setStock(groupSpecGoodsSkuJsonVo.getGoodsNum()); |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | }).collect(Collectors.toList()); |
| | | |
| | | o.setGoodsNames( |
| | | mallGoodsList.stream() |
| | | .map(MallGoods::getGoodsName) |
| | | .map(ggg -> ggg.getGoodsName() + "x" + ggg.getStock()) |
| | | .collect(Collectors.joining(",")) |
| | | ); |
| | | |
| | | o.setTotalPrice( |
| | | mallGoodsList.stream() |
| | | .map(MallGoods::getPrice) |
| | | .map(ggg -> ggg.getPrice().multiply(BigDecimal.valueOf(ggg.getStock()))) |
| | | .reduce(BigDecimal.ZERO, BigDecimal::add) |
| | | ); |
| | | |
| | |
| | | package com.sinata.modular.mall.controller; |
| | | |
| | | import cn.hutool.core.util.ObjUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.sinata.common.enums.EnumIsDelete; |
| | | import com.sinata.common.enums.mall.EnumMallGoodsGroupType; |
| | | import com.sinata.common.enums.mall.EnumMallGoodsState; |
| | | import com.sinata.common.model.GroupSpecGoodsSkuJsonVo; |
| | | import com.sinata.core.base.controller.BaseController; |
| | | import com.sinata.core.base.tips.ErrorTip; |
| | | import com.sinata.core.common.annotion.BussinessLog; |
| | |
| | | .orElse(null) |
| | | ); |
| | | |
| | | String[] ids = (o.get("goodsIds") + "").split(","); |
| | | // String[] ids = (o.get("goodsIds") + "").split(","); |
| | | // o.put("goodsNames", goodsList.stream() |
| | | // .filter(ggg -> { |
| | | // for (String gid : ids) { |
| | | // if (gid.equals(ggg.getId() + "")) { |
| | | // return true; |
| | | // } |
| | | // } |
| | | // return false; |
| | | // }) |
| | | // .map(MallGoods::getGoodsName) |
| | | // .collect(Collectors.joining(","))); |
| | | |
| | | // 封装显示套餐规格组商品名称、数量 |
| | | List<GroupSpecGoodsSkuJsonVo> groupSpecGoodsSkuJsonVoList; |
| | | Object goodsSkuJson = o.get("goodsSkuJson"); |
| | | if (ObjUtil.isNotEmpty(goodsSkuJson)) { |
| | | groupSpecGoodsSkuJsonVoList = JSONUtil.parseArray(goodsSkuJson.toString()).toList(GroupSpecGoodsSkuJsonVo.class); |
| | | } else { |
| | | groupSpecGoodsSkuJsonVoList = null; |
| | | } |
| | | o.put("goodsNames", goodsList.stream() |
| | | .filter(ggg -> { |
| | | for (String gid : ids) { |
| | | if (gid.equals(ggg.getId() + "")) { |
| | | return true; |
| | | if (groupSpecGoodsSkuJsonVoList != null) { |
| | | for (GroupSpecGoodsSkuJsonVo groupSpecGoodsSkuJsonVo : groupSpecGoodsSkuJsonVoList) { |
| | | if (groupSpecGoodsSkuJsonVo.getGoodsId().equals(ggg.getId())) { |
| | | ggg.setStock(groupSpecGoodsSkuJsonVo.getGoodsNum()); |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | }) |
| | | .map(MallGoods::getGoodsName) |
| | | .map(ggg -> ggg.getGoodsName() + "x" + ggg.getStock()) |
| | | .collect(Collectors.joining(","))); |
| | | return o; |
| | | }).collect(Collectors.toList()); |
| | |
| | | import cn.hutool.core.collection.CollUtil; |
| | | import cn.hutool.core.convert.Convert; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONObject; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.baomidou.mybatisplus.enums.SqlLike; |
| | | import com.baomidou.mybatisplus.mapper.Condition; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.google.common.collect.Lists; |
| | | import com.sinata.common.enums.EnumCityRole; |
| | | import com.sinata.common.enums.EnumMemberGrade; |
| | | import com.sinata.common.enums.mall.EnumMallGoodsGroupType; |
| | | import com.sinata.common.enums.mall.EnumMallOrderState; |
| | | import com.sinata.core.base.controller.BaseController; |
| | | import com.sinata.core.common.annotion.BussinessLog; |
| | | import com.sinata.core.common.annotion.Permission; |
| | | import com.sinata.core.common.constant.factory.PageFactory; |
| | | import com.sinata.core.shiro.ShiroKit; |
| | | import com.sinata.core.shiro.ShiroUser; |
| | | import com.sinata.core.util.DateUtils2; |
| | | import com.sinata.core.util.ExcelExportUtil; |
| | | import com.sinata.core.util.ExpressApi; |
| | | import com.sinata.core.util.PayUtil; |
| | | import com.sinata.modular.mall.dto.OrderSearchDto; |
| | | import com.sinata.modular.mall.model.MallGoods; |
| | | import com.sinata.modular.mall.model.MallGoodsSet; |
| | | import com.sinata.modular.mall.model.MallOrder; |
| | | import com.sinata.modular.mall.model.MallOrderDetail; |
| | | import com.sinata.modular.mall.model.*; |
| | | import com.sinata.modular.mall.service.*; |
| | | import com.sinata.modular.member.model.MemUser; |
| | | import com.sinata.modular.member.model.MemUserRelation; |
| | | import com.sinata.modular.member.service.IMemUserRelationService; |
| | | import com.sinata.modular.member.service.IMemUserService; |
| | | import com.sinata.modular.system.service.IMallOrderDetailUseService; |
| | | import com.sinata.modular.system.service.IMyCouponService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Controller; |
| | |
| | | private IMemUserService memUserService; |
| | | |
| | | @Resource |
| | | private IMemUserRelationService userRelationService; |
| | | |
| | | @Resource |
| | | private IMyCouponService myCouponService; |
| | | |
| | | @Autowired |
| | | private IMallOrderService mallOrderService; |
| | | |
| | | @Resource |
| | | private IMallOrderDetailUseService useService; |
| | | |
| | | @Resource |
| | | private IMallGoodsSetService mallGoodsSetService; |
| | |
| | | |
| | | @Resource |
| | | private IMallExpressCompanyService mallExpressCompanyService; |
| | | |
| | | @Resource |
| | | private IMallOrderDetailGroupSpecService mallOrderDetailGroupSpecService; |
| | | |
| | | |
| | | private MallOrder selectById(String orderNo) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 订单发货页面 |
| | | * 退款页面 |
| | | */ |
| | | @RequestMapping(value = "/deliverAuth/{orderNo}") |
| | | public String deliverAuth(@PathVariable String orderNo, Model model) { |
| | |
| | | /** |
| | | * 跳转商品订单详情 |
| | | */ |
| | | @RequestMapping(value = "/detail/{orderNo}") |
| | | public Object detail(@PathVariable("orderNo") String orderNo, Model model) { |
| | | @RequestMapping(value = "/detail") |
| | | public Object detail(String orderNo, Integer orderType, Model model) { |
| | | Page<MallOrder> page = new PageFactory().defaultPage(1, 0); |
| | | |
| | | Wrapper<?> wrapper = new EntityWrapper<MallOrder>() |
| | |
| | | |
| | | // 订单详情 |
| | | List<MallOrderDetail> orderDetailList = this.mallOrderDetailService.selectList(new EntityWrapper<MallOrderDetail>().eq("order_no", orderNo)); |
| | | |
| | | |
| | | // 订单详情-商品信息 |
| | | List<Integer> goodsIdList = orderDetailList.stream().map(MallOrderDetail::getGoodsId).collect(Collectors.toList()); |
| | | |
| | | // 订单详情套餐规格组商品 |
| | | List<MallOrderDetailGroupSpec> mallOrderDetailGroupSpecList = mallOrderDetailGroupSpecService.selectList(new EntityWrapper<MallOrderDetailGroupSpec>().eq("order_no", mallOrder.getOrderNo())); |
| | | if (CollUtil.isNotEmpty(mallOrderDetailGroupSpecList)) { |
| | | List<Integer> mallOrderDetailGroupSpecGroupSpecGoodsIds = mallOrderDetailGroupSpecList.stream().map(MallOrderDetailGroupSpec::getGroupSpecGoodsId).collect(Collectors.toList()); |
| | | goodsIdList.addAll(mallOrderDetailGroupSpecGroupSpecGoodsIds); |
| | | } |
| | | |
| | | List<MallGoods> goodsList = mallGoodsService.selectList(new EntityWrapper<MallGoods>().in("id", goodsIdList)); |
| | | |
| | | // 封装商品信息 |
| | |
| | | mallOrder.setUserPhone(memUser.getPhone()); |
| | | mallOrder.setUserNickname(memUser.getNickName()); |
| | | } |
| | | mallOrder.setUseList(useService.getUseList(mallOrder.getOrderNo())); |
| | | //mallOrder.setUseList(useService.getUseList(mallOrder.getOrderNo())); |
| | | mallOrder.setUseOrderDetailGroupSpecList(mallOrderDetailGroupSpecService.getUseOrderDetailGroupSpec(mallOrder.getOrderNo())); |
| | | model.addAttribute("item", mallOrder); |
| | | |
| | | String v4ShowId = "", v4Team = "", v5ShowId = "", v5Team = ""; |
| | | |
| | | // 计算订单业绩 |
| | | BigDecimal saleGoodsMoney = BigDecimal.ZERO; |
| | |
| | | if (saleUser.getMemberGradeId() == EnumMemberGrade.G_5.index) { |
| | | saleGoodsMoney = mallOrder.getPayMoney().multiply(goodsSet.getV5BuyCoef()); |
| | | } |
| | | |
| | | // 获取合伙人、市场总监 |
| | | MemUserRelation saleUserRelation = userRelationService.selectById(mallOrder.getSaleUserId()); |
| | | Integer saleUserMemberGradeId = saleUser.getMemberGradeId(); |
| | | MemUser[] parentV4V5User = userRelationService.getParentV4V5ByRelationPath(null, null, saleUserRelation.getRelationPath(), saleUserMemberGradeId); |
| | | if (parentV4V5User[0] != null) { |
| | | v4ShowId = parentV4V5User[0].getShowId(); |
| | | v4Team = parentV4V5User[0].getRealName(); |
| | | } |
| | | if (parentV4V5User[1] != null) { |
| | | v5ShowId = parentV4V5User[1].getShowId(); |
| | | v5Team = parentV4V5User[1].getRealName(); |
| | | } |
| | | |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | model.addAttribute("v4ShowId", v4ShowId); |
| | | model.addAttribute("v4Team", v4Team); |
| | | model.addAttribute("v5ShowId", v5ShowId); |
| | | model.addAttribute("v5Team", v5Team); |
| | | |
| | | model.addAttribute("saleGoodsMoney", saleGoodsMoney.setScale(2, BigDecimal.ROUND_HALF_UP)); |
| | | |
| | | return PREFIX + "mallOrder_detail.html"; |
| | | model.addAttribute("orderType", orderType); |
| | | if (orderType == null || orderType == EnumMallGoodsGroupType.GOODS.index) { |
| | | // 普通商品 |
| | | return PREFIX + "mallOrder_detail.html"; |
| | | } else { |
| | | model.addAttribute("mallOrderDetailGroupSpecList", mallOrderDetailGroupSpecList.stream() |
| | | .map(o -> { |
| | | JSONObject json = JSONUtil.parseObj(o); |
| | | |
| | | for (MallGoods g : goodsList) { |
| | | if (g.getId().equals(o.getGroupSpecGoodsId())) { |
| | | json.set("groupSpecGoodsName", g.getGoodsName()); |
| | | json.set("groupSpecGoodsNo", g.getGoodsNo()); |
| | | json.set("groupSpecGoodsImage", g.getGoodsImage()); |
| | | } |
| | | } |
| | | |
| | | return json; |
| | | }) |
| | | .collect(Collectors.toList())); |
| | | |
| | | // 套餐商品 |
| | | return PREFIX + "mallOrder_detail_group.html"; |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | .eq(StrUtil.isNotBlank(dto.getUserShowId()), "u.show_id", dto.getUserShowId()) |
| | | .eq(StrUtil.isNotBlank(dto.getUserPhone()), "u.phone", dto.getUserPhone()) |
| | | //.like(StrUtil.isNotBlank(dto.getUserNickname()), "user.nick_name", dto.getUserNickname()); |
| | | .like(StrUtil.isNotBlank(dto.getUserNickname()), "o.take_name", dto.getUserNickname()); |
| | | .like(StrUtil.isNotBlank(dto.getUserNickname()), "o.take_name", dto.getUserNickname()) |
| | | .like(StrUtil.isNotBlank(dto.getGoodsName()), "order_goods.goods_name", dto.getGoodsName()); |
| | | |
| | | try { |
| | | // 【城市管理员】数据查询 |
| | | ShiroUser shiroUser = ShiroKit.getUser(); |
| | | if (shiroUser.getRoleList().contains(EnumCityRole.PROVINCE_ROLE.index)) { |
| | | // 省级城市管理员 |
| | | wrapper.like("o.city_code", shiroUser.getCityCode().substring(0, 2), SqlLike.RIGHT); |
| | | } else if (shiroUser.getRoleList().contains(EnumCityRole.CITY_ROLE.index)) { |
| | | // 市级城市管理员 |
| | | wrapper.like("o.city_code", shiroUser.getCityCode().substring(0, 4), SqlLike.RIGHT); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | if (null != dto.getState()) { |
| | | if (dto.getState().equals(1)) { |
| | |
| | | "商品名称", |
| | | "规格组", |
| | | "购买数量", |
| | | "下单用户昵称", |
| | | "客户姓名", |
| | | "下单用户手机", |
| | | "预约门店", |
| | | "核销次数", |
| | |
| | | |
| | | |
| | | /** |
| | | * 退款 |
| | | * 退款操作 |
| | | */ |
| | | @ResponseBody |
| | | @RequestMapping(value = "/orderShip") |
| | |
| | | * @since 2023-04-22 |
| | | */ |
| | | public interface CommissionSettlementMonthMapper extends BaseMapper<CommissionSettlementMonth> { |
| | | List<CommissionSettlementMonth> queryList(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("name") String name, @Param("showId") String showId, @Param("area") String area, @Param("gradeId") Integer gradeId, @Param("month") String month, @Param("offset") Integer offset, @Param("size") Integer size); |
| | | Integer queryListCount(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("name") String name, @Param("showId") String showId, @Param("area") String area, @Param("gradeId") Integer gradeId, @Param("month") String month); |
| | | List<CommissionSettlementMonth> queryList(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("name") String name, @Param("showId") String showId, @Param("area") String area, @Param("cityCode") String cityCode, @Param("gradeId") Integer gradeId, @Param("month") String month, @Param("offset") Integer offset, @Param("size") Integer size); |
| | | Integer queryListCount(@Param("beginTime") String beginTime, @Param("endTime") String endTime, @Param("name") String name, @Param("showId") String showId, @Param("area") String area, @Param("cityCode") String cityCode, @Param("gradeId") Integer gradeId, @Param("month") String month); |
| | | void addList(@Param("addMonthList") List<CommissionSettlementMonth> addMonthList); |
| | | } |
New file |
| | |
| | | package com.sinata.modular.mall.dao; |
| | | |
| | | import com.sinata.modular.mall.model.MallOrderDetailGroupSpec; |
| | | import com.baomidou.mybatisplus.mapper.BaseMapper; |
| | | import com.sinata.modular.mall.model.vo.VoUseOrderDetailGroupSpec; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-21 |
| | | */ |
| | | public interface MallOrderDetailGroupSpecMapper extends BaseMapper<MallOrderDetailGroupSpec> { |
| | | |
| | | List<VoUseOrderDetailGroupSpec> getUseOrderDetailGroupSpec(@Param("orderNo") String orderNo); |
| | | |
| | | } |
| | |
| | | county.`name` like CONCAT("%",#{area},"%") |
| | | ) |
| | | </if> |
| | | <if test="cityCode != null and cityCode !=''"> |
| | | and ( |
| | | cm.cityCode like CONCAT(#{cityCode},"%") |
| | | OR cm.countyCode like CONCAT(#{cityCode},"%") |
| | | ) |
| | | </if> |
| | | <if test="gradeId != null"> |
| | | and mu.member_grade_id = #{gradeId} |
| | | </if> |
| | |
| | | <id column="id" property="id"/> |
| | | <result column="spec_name" property="specName"/> |
| | | <result column="goods_ids" property="goodsIds"/> |
| | | <result column="goods_sku_json" property="goodsSkuJson"/> |
| | | <result column="goods_names" property="goodsNames"/> |
| | | <result column="classify_id_one" property="classifyIdOne"/> |
| | | <result column="classify_id_two" property="classifyIdTwo"/> |
| | |
| | | |
| | | <!-- 通用查询结果列 --> |
| | | <sql id="Base_Column_List"> |
| | | id, spec_name, goods_ids, goods_names, classify_id_one, classify_id_two, start_time, end_time, stock, area_city_id, remark, create_time, is_lock, is_delete, province_code, province_name |
| | | id, spec_name, goods_ids, goods_sku_json, goods_names, classify_id_one, classify_id_two, start_time, end_time, stock, area_city_id, remark, create_time, is_lock, is_delete, province_code, province_name |
| | | </sql> |
| | | |
| | | </mapper> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.sinata.modular.mall.dao.MallOrderDetailGroupSpecMapper"> |
| | | |
| | | <!-- 通用查询映射结果 --> |
| | | <resultMap id="BaseResultMap" type="com.sinata.modular.mall.model.MallOrderDetailGroupSpec"> |
| | | <id column="id" property="id" /> |
| | | <result column="order_no" property="orderNo" /> |
| | | <result column="order_detail_no" property="orderDetailNo" /> |
| | | <result column="goods_id" property="goodsId" /> |
| | | <result column="sku_id" property="skuId" /> |
| | | <result column="sku_num" property="skuNum" /> |
| | | <result column="group_spec_id" property="groupSpecId" /> |
| | | <result column="group_spec_goods_id" property="groupSpecGoodsId" /> |
| | | <result column="group_spec_goods_num" property="groupSpecGoodsNum" /> |
| | | <result column="group_spec_use" property="groupSpecUse" /> |
| | | <result column="is_use" property="isUse" /> |
| | | <result column="use_date_time" property="useDateTime" /> |
| | | <result column="use_merchant_id" property="useMerchantId" /> |
| | | </resultMap> |
| | | |
| | | <!-- 通用查询结果列 --> |
| | | <sql id="Base_Column_List"> |
| | | id, order_no, order_detail_no, goods_id, sku_id, sku_num, group_spec_id, group_spec_goods_id, group_spec_goods_num, group_spec_use, is_use, use_date_time, use_merchant_id |
| | | </sql> |
| | | |
| | | <select id="getUseOrderDetailGroupSpec" resultType="com.sinata.modular.mall.model.vo.VoUseOrderDetailGroupSpec"> |
| | | SELECT |
| | | o.*, |
| | | m.linkman, m.merchant_name, |
| | | g.goods_no, g.goods_name |
| | | FROM |
| | | mall_order_detail_group_spec_log o |
| | | LEFT JOIN mem_merchant m ON m.id = o.use_merchant_id |
| | | LEFT JOIN mall_goods g ON g.id = o.group_spec_goods_id |
| | | <where> |
| | | <if test="orderNo != null and orderNo != ''"> |
| | | AND o.order_no = #{orderNo} |
| | | </if> |
| | | </where> |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | <result column="useNum" property="useNum"/> |
| | | <result column="refund_price" property="refundPrice"/> |
| | | <result column="refund_time" property="refundTime"/> |
| | | <result column="sale_nick_name" property="saleNickName"/> |
| | | <result column="sale_user_name" property="saleUserName"/> |
| | | <result column="sale_show_id" property="saleShowId"/> |
| | | </resultMap> |
| | |
| | | order_goods.goods_name as goods_name, |
| | | order_goods.grep_name as grep_name, |
| | | mm.merchant_name, |
| | | user2.nick_name as sale_user_name, |
| | | user2.nick_name as sale_nick_name, |
| | | user2.real_name as sale_user_name, |
| | | user2.show_id as sale_show_id, |
| | | (select count(1) from mall_order_detail_use where order_no = o.order_no) useNum |
| | | FROM mall_order o |
| | |
| | | * 下单用户昵称 |
| | | */ |
| | | private String userNickname; |
| | | |
| | | /** |
| | | * 商品名称 |
| | | */ |
| | | private String goodsName; |
| | | } |
| | |
| | | @TableField("goods_ids") |
| | | @ApiModelProperty(value = "商品ID串") |
| | | private String goodsIds; |
| | | @TableField("goods_sku_json") |
| | | @ApiModelProperty(value = "商品规格json") |
| | | private String goodsSkuJson; |
| | | /** |
| | | * 商品名串 |
| | | */ |
| | |
| | | import com.baomidou.mybatisplus.annotations.TableLogic; |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | | import com.sinata.common.enums.mall.EnumMallOrderState; |
| | | import com.sinata.modular.mall.model.vo.VoUseOrderDetailGroupSpec; |
| | | import com.sinata.modular.system.model.MallOrderDetailUse; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | |
| | | private String stateName; |
| | | |
| | | @TableField(exist = false) |
| | | private String saleNickName; |
| | | |
| | | @TableField(exist = false) |
| | | private String saleUserName; |
| | | |
| | | @TableField(exist = false) |
| | | private String saleShowId; |
| | | |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "核销记录") |
| | | private List<MallOrderDetailUse> useList; |
| | | |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "核销商品列表") |
| | | private List<VoUseOrderDetailGroupSpec> useOrderDetailGroupSpecList; |
| | | |
| | | public String getStateName() { |
| | | return EnumMallOrderState.getMarkByIndex(state); |
New file |
| | |
| | | package com.sinata.modular.mall.model; |
| | | |
| | | import com.baomidou.mybatisplus.enums.IdType; |
| | | import java.util.Date; |
| | | import com.baomidou.mybatisplus.annotations.TableId; |
| | | import com.baomidou.mybatisplus.annotations.TableField; |
| | | import com.baomidou.mybatisplus.activerecord.Model; |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | | import java.io.Serializable; |
| | | import lombok.Data; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-21 |
| | | */ |
| | | @Data |
| | | @TableName("mall_order_detail_group_spec") |
| | | @ApiModel(value = "订单详情套餐规格组商品") |
| | | public class MallOrderDetailGroupSpec extends Model<MallOrderDetailGroupSpec> { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | @ApiModelProperty(value = "ID") |
| | | private Integer id; |
| | | /** |
| | | * 子订单编号 |
| | | */ |
| | | @TableField("order_no") |
| | | @ApiModelProperty(value = "子订单编号") |
| | | private String orderNo; |
| | | /** |
| | | * 订单详细编号 |
| | | */ |
| | | @TableField("order_detail_no") |
| | | @ApiModelProperty(value = "订单详细编号") |
| | | private String orderDetailNo; |
| | | /** |
| | | * 商品ID |
| | | */ |
| | | @TableField("goods_id") |
| | | @ApiModelProperty(value = "商品ID") |
| | | private Integer goodsId; |
| | | /** |
| | | * 商品SkuId |
| | | */ |
| | | @TableField("sku_id") |
| | | @ApiModelProperty(value = "商品SkuId") |
| | | private Integer skuId; |
| | | /** |
| | | * 商品Sku数量 |
| | | */ |
| | | @TableField("sku_num") |
| | | @ApiModelProperty(value = "商品Sku数量") |
| | | private Integer skuNum; |
| | | /** |
| | | * 套餐规格组ID |
| | | */ |
| | | @TableField("group_spec_id") |
| | | @ApiModelProperty(value = "套餐规格组ID") |
| | | private Integer groupSpecId; |
| | | /** |
| | | * 套餐规格组商品ID |
| | | */ |
| | | @TableField("group_spec_goods_id") |
| | | @ApiModelProperty(value = "套餐规格组商品ID") |
| | | private Integer groupSpecGoodsId; |
| | | /** |
| | | * 套餐规格组商品数量 |
| | | */ |
| | | @TableField("group_spec_goods_num") |
| | | @ApiModelProperty(value = "套餐规格组商品数量") |
| | | private Integer groupSpecGoodsNum; |
| | | /** |
| | | * 套餐规格组商品核销数 |
| | | */ |
| | | @TableField("group_spec_use") |
| | | @ApiModelProperty(value = "套餐规格组商品核销数") |
| | | private Integer groupSpecUse; |
| | | /** |
| | | * 是否核销完成,0否,1核销完成 |
| | | */ |
| | | @TableField("is_use") |
| | | @ApiModelProperty(value = "是否核销完成,0否,1核销完成") |
| | | private Integer isUse; |
| | | /** |
| | | * 核销时间 |
| | | */ |
| | | @TableField("use_date_time") |
| | | @ApiModelProperty(value = "核销时间") |
| | | private Date useDateTime; |
| | | /** |
| | | * 核销门店 |
| | | */ |
| | | @TableField("use_merchant_id") |
| | | @ApiModelProperty(value = "核销门店") |
| | | private Integer useMerchantId; |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.id; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.sinata.modular.mall.model.vo; |
| | | |
| | | import com.sinata.modular.mall.model.MallOrderDetailGroupSpec; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-21 |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "订单详情套餐规格组商品") |
| | | public class VoUseOrderDetailGroupSpec extends MallOrderDetailGroupSpec { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | @ApiModelProperty(value = "门店名称") |
| | | private String merchantName; |
| | | |
| | | @ApiModelProperty(value = "核销人") |
| | | private String linkman; |
| | | |
| | | @ApiModelProperty(value = "商品编号") |
| | | private String goodsNo; |
| | | |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
| | | |
| | | |
| | | } |
| | |
| | | */ |
| | | public interface ICommissionSettlementMonthService extends IService<CommissionSettlementMonth> { |
| | | |
| | | List<CommissionSettlementMonth> queryList(String beginTime, String endTime, String name, String showId, String area, Integer gradeId, String month, Integer pageNo, Integer pageSize); |
| | | Integer queryListCount(String beginTime, String endTime, String name, String showId, String area, Integer gradeId, String month); |
| | | List<CommissionSettlementMonth> queryList(String beginTime, String endTime, String name, String showId, String area, String cityCode, Integer gradeId, String month, Integer pageNo, Integer pageSize); |
| | | Integer queryListCount(String beginTime, String endTime, String name, String showId, String area, String cityCode, Integer gradeId, String month); |
| | | |
| | | void addList(List<CommissionSettlementMonth> addMonthList); |
| | | |
New file |
| | |
| | | package com.sinata.modular.mall.service; |
| | | |
| | | import com.sinata.modular.mall.model.MallOrderDetailGroupSpec; |
| | | import com.baomidou.mybatisplus.service.IService; |
| | | import com.sinata.modular.mall.model.vo.VoUseOrderDetailGroupSpec; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品 服务类 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-21 |
| | | */ |
| | | public interface IMallOrderDetailGroupSpecService extends IService<MallOrderDetailGroupSpec> { |
| | | |
| | | List<VoUseOrderDetailGroupSpec> getUseOrderDetailGroupSpec(String orderNo); |
| | | |
| | | } |
| | |
| | | public class CommissionSettlementMonthServiceImpl extends ServiceImpl<CommissionSettlementMonthMapper, CommissionSettlementMonth> implements ICommissionSettlementMonthService { |
| | | |
| | | @Override |
| | | public List<CommissionSettlementMonth> queryList(String beginTime, String endTime, String name, String showId, String area, Integer gradeId, String month, Integer pageNo, Integer pageSize) { |
| | | public List<CommissionSettlementMonth> queryList(String beginTime, String endTime, String name, String showId, String area, String cityCode, Integer gradeId, String month, Integer pageNo, Integer pageSize) { |
| | | Integer offset = null; |
| | | if (pageNo != null && pageSize != null) { |
| | | offset = (pageNo - 1 ) * pageSize; |
| | | } |
| | | return baseMapper.queryList(beginTime, endTime, name, showId, area, gradeId, month, offset, pageSize); |
| | | return baseMapper.queryList(beginTime, endTime, name, showId, area, cityCode, gradeId, month, offset, pageSize); |
| | | } |
| | | @Override |
| | | public Integer queryListCount(String beginTime, String endTime, String name, String showId, String area, Integer gradeId, String month) { |
| | | return baseMapper.queryListCount(beginTime, endTime, name, showId, area, gradeId, month); |
| | | public Integer queryListCount(String beginTime, String endTime, String name, String showId, String area, String cityCode, Integer gradeId, String month) { |
| | | return baseMapper.queryListCount(beginTime, endTime, name, showId, area, cityCode, gradeId, month); |
| | | } |
| | | |
| | | @Override |
| | |
| | | public void addSystemNotice(MallGoods oldGoods, MallGoods newGoods) { |
| | | try { |
| | | StringBuffer updateStr = new StringBuffer(); |
| | | if (oldGoods.getPrice().compareTo(newGoods.getPrice()) != 0) { |
| | | if (oldGoods.getPrice() != null && newGoods.getPrice() != null && |
| | | oldGoods.getPrice().compareTo(newGoods.getPrice()) != 0) { |
| | | updateStr.append("将市场价" + oldGoods.getPrice() + "元修改为" + newGoods.getPrice() + "元。"); |
| | | } |
| | | if (oldGoods.getPriceSale().compareTo(newGoods.getPriceSale()) != 0) { |
| | | if (oldGoods.getPriceSale() != null && newGoods.getPriceSale() != null && |
| | | oldGoods.getPriceSale().compareTo(newGoods.getPriceSale()) != 0) { |
| | | updateStr.append("将美天销售价" + oldGoods.getPriceSale() + "元修改为" + newGoods.getPriceSale() + "元。"); |
| | | } |
| | | if (oldGoods.getPriceMember().compareTo(newGoods.getPriceMember()) != 0) { |
| | | if (oldGoods.getPriceMember() != null && newGoods.getPriceMember() != null && |
| | | oldGoods.getPriceMember().compareTo(newGoods.getPriceMember()) != 0) { |
| | | updateStr.append("将会员价" + oldGoods.getPriceMember() + "元修改为" + newGoods.getPriceMember() + "元。"); |
| | | } |
| | | |
New file |
| | |
| | | package com.sinata.modular.mall.service.impl; |
| | | |
| | | import com.sinata.modular.mall.model.MallOrderDetailGroupSpec; |
| | | import com.sinata.modular.mall.dao.MallOrderDetailGroupSpecMapper; |
| | | import com.sinata.modular.mall.service.IMallOrderDetailGroupSpecService; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import com.sinata.modular.mall.model.vo.VoUseOrderDetailGroupSpec; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-21 |
| | | */ |
| | | @Service |
| | | public class MallOrderDetailGroupSpecServiceImpl extends ServiceImpl<MallOrderDetailGroupSpecMapper, MallOrderDetailGroupSpec> implements IMallOrderDetailGroupSpecService { |
| | | |
| | | @Override |
| | | public List<VoUseOrderDetailGroupSpec> getUseOrderDetailGroupSpec(String orderNo) { |
| | | return this.baseMapper.getUseOrderDetailGroupSpec(orderNo); |
| | | } |
| | | |
| | | } |
| | |
| | | package com.sinata.modular.member.controller; |
| | | |
| | | import com.baomidou.mybatisplus.enums.SqlLike; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.sinata.common.enums.EnumCityRole; |
| | | import com.sinata.common.enums.EnumIsDelete; |
| | | import com.sinata.common.enums.EnumIsLock; |
| | | import com.sinata.common.enums.EnumMemberGrade; |
| | | import com.sinata.core.base.controller.BaseController; |
| | | import com.sinata.core.common.annotion.BussinessLog; |
| | | import com.sinata.core.common.annotion.Permission; |
| | | import com.sinata.core.common.constant.factory.PageFactory; |
| | | import com.sinata.core.shiro.ShiroKit; |
| | | import com.sinata.core.shiro.ShiroUser; |
| | | import com.sinata.core.util.Convert; |
| | | import com.sinata.core.util.DateUtils2; |
| | | import com.sinata.core.util.ExcelExportUtil; |
| | |
| | | wrapper.le("o.create_time", endTime + " 23:59:59"); |
| | | } |
| | | |
| | | try { |
| | | // 【城市管理员】数据查询 |
| | | ShiroUser shiroUser = ShiroKit.getUser(); |
| | | if (shiroUser.getRoleList().contains(EnumCityRole.PROVINCE_ROLE.index)) { |
| | | // 省级城市管理员 |
| | | wrapper.like("o.city_code", shiroUser.getCityCode().substring(0, 2), SqlLike.RIGHT); |
| | | } else if (shiroUser.getRoleList().contains(EnumCityRole.CITY_ROLE.index)) { |
| | | // 市级城市管理员 |
| | | wrapper.like("o.city_code", shiroUser.getCityCode().substring(0, 4), SqlLike.RIGHT); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | // 查询数据列表 |
| | | List<Map<String, Object>> list; |
| | | if (page != null) { |
| | |
| | | } |
| | | } |
| | | |
| | | @Permission |
| | | @BussinessLog(value = "用户管理-冻结/解冻") |
| | | @ResponseBody |
| | | @RequestMapping(value = "/updateState") |
| | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.enums.SqlLike; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.mapper.Wrapper; |
| | | import com.baomidou.mybatisplus.plugins.Page; |
| | | import com.sinata.common.enums.EnumAuditState; |
| | | import com.sinata.common.enums.EnumIsDelete; |
| | | import com.sinata.common.enums.EnumIsSystemNotice; |
| | | import com.sinata.common.enums.EnumMemberGrade; |
| | | import com.sinata.common.enums.*; |
| | | import com.sinata.common.enums.mall.EnumMallGoodsGroupType; |
| | | import com.sinata.common.enums.mall.EnumMallOrderState; |
| | | import com.sinata.core.base.controller.BaseController; |
| | | import com.sinata.core.base.tips.ErrorTip; |
| | | import com.sinata.core.base.tips.SuccessTip; |
| | | import com.sinata.core.common.annotion.BussinessLog; |
| | | import com.sinata.core.common.annotion.Permission; |
| | | import com.sinata.core.common.constant.factory.PageFactory; |
| | | import com.sinata.core.shiro.ShiroKit; |
| | | import com.sinata.core.shiro.ShiroUser; |
| | | import com.sinata.core.util.Convert; |
| | | import com.sinata.core.util.ExcelExportUtil; |
| | | import com.sinata.core.util.SqlUtil; |
| | |
| | | wrapper.le("apply_time", endTime + " 23:59:59"); |
| | | } |
| | | |
| | | try { |
| | | // 【城市管理员】数据查询 |
| | | ShiroUser shiroUser = ShiroKit.getUser(); |
| | | if (shiroUser.getRoleList().contains(EnumCityRole.PROVINCE_ROLE.index)) { |
| | | // 省级城市管理员 |
| | | wrapper.like("o.city_code", shiroUser.getCityCode().substring(0, 2), SqlLike.RIGHT); |
| | | } else if (shiroUser.getRoleList().contains(EnumCityRole.CITY_ROLE.index)) { |
| | | // 市级城市管理员 |
| | | wrapper.like("o.city_code", shiroUser.getCityCode().substring(0, 4), SqlLike.RIGHT); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | // 查询数据列表 |
| | | List<Map<String, Object>> list; |
| | | if (page != null) { |
| | |
| | | map.put("v4Team", map.get("real_name")); |
| | | } |
| | | if (userMemberGradeId == EnumMemberGrade.G_5.index) { |
| | | // 当是:市场总监后,城市合伙人无数据时,城市合伙人信息需显示本人的信息(只是做展示,不影响任何功能) |
| | | map.put("v4ShowId", map.get("show_id")); |
| | | map.put("v4Team", map.get("real_name")); |
| | | map.put("v5ShowId", map.get("show_id")); |
| | | map.put("v5Team", map.get("real_name")); |
| | | } |
| | |
| | | /** |
| | | * 导出用户列表 |
| | | */ |
| | | @Permission |
| | | @ResponseBody |
| | | @RequestMapping(value = "/export") |
| | | public void export(String beginTime, String endTime, String nickName, String phone, String showId, Integer isLock, Integer isLeaveOffice, Integer memberGradeId, HttpServletResponse response) { |
| | |
| | | List<Object> shellList = new ArrayList<>(); |
| | | shellList.add("工号"); |
| | | shellList.add("提交时间"); |
| | | shellList.add("推荐人工号"); |
| | | shellList.add("推荐人"); |
| | | shellList.add("推荐人所在城市"); |
| | | shellList.add("姓名"); |
| | |
| | | shellList.add("银行卡号"); |
| | | shellList.add("品行分"); |
| | | shellList.add("审核状态"); |
| | | shellList.add("职级"); |
| | | shellList.add("佣金等级"); |
| | | shellList.add("积分"); |
| | | shellList.add("入司时间"); |
| | | shellList.add("状态"); |
| | |
| | | shellList = new ArrayList<>(); |
| | | shellList.add(map.get("show_id")); |
| | | shellList.add(map.get("apply_time")); |
| | | shellList.add(map.get("equityUserShowId")); |
| | | shellList.add(map.get("equityUserRealName")); |
| | | shellList.add(map.get("equityUserCityCode")); |
| | | shellList.add(map.get("real_name")); |
| | |
| | | shellList.add(map.get("bank_number")); |
| | | shellList.add(map.get("credit_score")); |
| | | shellList.add(EnumAuditState.getMarkByIndex(Convert.toInt(map.get("audit_state")))); |
| | | shellList.add(EnumMemberGrade.getMarkByIndex(Convert.toInt(map.get("member_grade_id")))); |
| | | shellList.add(EnumMemberGrade.getAliasByIndex(Convert.toInt(map.get("member_grade_id")))); |
| | | shellList.add(map.get("integral")); |
| | | shellList.add(map.get("audit_time")); |
| | | Integer isLeaveOfficeNum = Convert.toInt(map.get("is_leave_office")); |
| | |
| | | return PREFIX + "memUserSales_audit.html"; |
| | | } |
| | | |
| | | @Permission |
| | | @BussinessLog(value = "营销人员管理-审核") |
| | | @ResponseBody |
| | | @RequestMapping(value = "/audit") |
| | |
| | | } |
| | | |
| | | String setSql = "audit_state = " + state |
| | | + ", audit_time = NOW()" |
| | | + ", remark = " + SqlUtil.addSingleQuotes(remark); |
| | | if (state == 1) { |
| | | // 获取最新工号 |
| | |
| | | |
| | | // 设置工号 |
| | | setSql += ", show_id = " + SqlUtil.addSingleQuotes(Convert.toInt(showId) + 1) |
| | | + ", audit_time = NOW()" |
| | | + ", is_leave_office = 0"; |
| | | |
| | | |
| | | // 购买套餐成功 即 VIP会员,申请入司 为 黄金营销员/城市合伙人 |
| | | MallOrder order = mallOrderService.selectById(memUser.getEquityOrderNo()); |
| | |
| | | + ", member_grade_time = NOW()" |
| | | + ", credit_score = 100"; |
| | | } |
| | | |
| | | // 当用户已申请并通过成为营销员,用户所在城市需显示营销员的城市,营销员的城市取套餐推荐人的所在城市 |
| | | MemUser saleUser = memUserService.selectById(order.getSaleUserId()); |
| | | if (saleUser != null && StrUtil.isNotBlank(saleUser.getCityCode())) { |
| | | String province = StrUtil.sub(saleUser.getCityCode(), 0, 2) + "0000"; |
| | | String city = StrUtil.sub(saleUser.getCityCode(), 0, 4) + "00"; |
| | | String county = saleUser.getCityCode(); |
| | | |
| | | setSql += ", city_code = " + SqlUtil.addSingleQuotes(saleUser.getCityCode()) |
| | | + ", agent_province_code = " + SqlUtil.addSingleQuotes(province) |
| | | + ", agent_city_code = " + SqlUtil.addSingleQuotes(city) |
| | | + ", agent_county_code = " + SqlUtil.addSingleQuotes(county); |
| | | } |
| | | } |
| | | |
| | | // 查询上级 |
| | | MemUserRelation shareUserRelation = memUserRelationService.selectById(order.getSaleUserId()); |
| | | // 更新用户关系表 |
| | | memUserRelationService.insertOrUpdate( |
| | | MemUserRelation.builder() |
| | | .id(userId) |
| | | .parentId(shareUserRelation.getId()) |
| | | .relationPath(shareUserRelation.getRelationPath() + "/" + userId) |
| | | .build() |
| | | ); |
| | | } else if (state == 2) { |
| | | // 重置申请条件 |
| | | setSql += ", is_leave_office = -1"; |
| | | } |
| | | |
| | | boolean flag = memUserService.updateForSet(setSql, new EntityWrapper<MemUser>().eq("id", userId)); |
| | | if (flag) { |
| | | if (state == 2) { |
| | | // 订单材料受赠人,0未申请入司 |
| | | mallOrderService.updateForSet("use_user_id = 0", |
| | | new EntityWrapper<MallOrder>() |
| | | .eq("order_no", memUser.getEquityOrderNo()) |
| | | ); |
| | | } |
| | | // 清除后台通知 |
| | | cleanSystemNotice(memUser.getId()); |
| | | } |
| | |
| | | ); |
| | | } |
| | | map.put("equityUser", equityUser); |
| | | |
| | | MemUser parentUser = memUserRelationService.getParentUserById(memUserId); |
| | | if (parentUser != null) { |
| | | model.addAttribute("equityUserRealName", parentUser.getRealName()); |
| | | model.addAttribute("equityUserCityCode", cityRegionService.getProvinceCityCountyNameByAll(null, parentUser.getCityCode()).stream() |
| | | .map(TCityRegion::getName) |
| | | .collect(Collectors.joining("-"))); |
| | | } |
| | | |
| | | model.addAttribute("item", map); |
| | | } |
| | |
| | | /** |
| | | * 修改品行分 |
| | | */ |
| | | @Permission |
| | | @BussinessLog(value = "营销人员管理-修改品行分") |
| | | @ResponseBody |
| | | @RequestMapping(value = "/editCreditScore") |
| | |
| | | /** |
| | | * 修改职级 |
| | | */ |
| | | @Permission |
| | | @BussinessLog(value = "营销人员管理-修改职级") |
| | | @ResponseBody |
| | | @RequestMapping(value = "/editUserLevel") |
| | | public Object editUserLevel(Integer userId, String memberGradeId) { |
| | | // MemUser memUser = memUserService.selectById(userId); |
| | | // if (memUser == null || memUser.getAuditState() == EnumAuditState.WAIT_AUDIT.index) { |
| | | // return returnByFlag(false, "营销人员状态错误!"); |
| | | // } |
| | | String whereSql = "member_grade_id = " + memberGradeId; |
| | | boolean flag = memUserService.updateForSet(whereSql, new EntityWrapper<MemUser>().eq("id", userId)); |
| | | return returnByFlag(flag, null); |
| | | } |
| | | |
| | | @RequestMapping(value = "/openEditCityCode/{userId}") |
| | | public String openEditCityCode(Model model, @PathVariable("userId") Integer userId) { |
| | | // 省市区三级联动 |
| | | List<TCityRegion> cityList = cityRegionService.selectList( |
| | | new EntityWrapper<TCityRegion>() |
| | | .setSqlSelect("code, name") |
| | | .eq("parent_id", 0) |
| | | ); |
| | | model.addAttribute("cityList", cityList); |
| | | |
| | | MemUser item = memUserService.selectOne( |
| | | new EntityWrapper<MemUser>() |
| | | .setSqlSelect("id, city_code") |
| | | .eq("id", userId) |
| | | ); |
| | | |
| | | model.addAttribute("item", item); |
| | | return PREFIX + "edit_city_code.html"; |
| | | } |
| | | |
| | | @Permission |
| | | @BussinessLog(value = "营销人员管理-修改城市", key = "userId") |
| | | @ResponseBody |
| | | @RequestMapping(value = "/editCityCode") |
| | | public Object editCityCode(Integer userId, String cityCode) { |
| | | // 下级用户列表 |
| | | List<MemUserRelation> subUserList = memUserRelationService.selectList( |
| | | new EntityWrapper<MemUserRelation>() |
| | | .setSqlSelect("id, relation_path") |
| | | .like("relation_path", "/" + userId + "/") |
| | | ); |
| | | |
| | | // 获取下级用户ID |
| | | List<Integer> userIdList = subUserList.stream().map(MemUserRelation::getId).collect(Collectors.toList()); |
| | | // 添加自己 |
| | | userIdList.add(userId); |
| | | |
| | | String province = StrUtil.sub(cityCode, 0, 2) + "0000"; |
| | | String city = StrUtil.sub(cityCode, 0, 4) + "00"; |
| | | String county = cityCode; |
| | | |
| | | String whereSql = "city_code = " + SqlUtil.addSingleQuotes(cityCode) |
| | | + ", agent_province_code = " + SqlUtil.addSingleQuotes(province) |
| | | + ", agent_city_code = " + SqlUtil.addSingleQuotes(city) |
| | | + ", agent_county_code = " + SqlUtil.addSingleQuotes(county); |
| | | |
| | | boolean flag = memUserService.updateForSet(whereSql, new EntityWrapper<MemUser>().in("id", userIdList)); |
| | | return returnByFlag(flag, null); |
| | | } |
| | | |
| | | @Permission |
| | | @BussinessLog(value = "营销人员管理-离职") |
| | | @ResponseBody |
| | | @RequestMapping(value = "/updateLeaveOffice") |
| | |
| | | return returnByFlag(flag, null); |
| | | } |
| | | |
| | | |
| | | @Permission |
| | | @ResponseBody |
| | | @BussinessLog(value = "营销人员管理-冻结/解冻") |
| | | @RequestMapping(value = "/updateState") |
| | |
| | | |
| | | <!-- 获取用户上级推荐人信息 --> |
| | | <select id="getParentUserById" resultType="com.sinata.modular.member.model.MemUser"> |
| | | SELECT u.nick_name nickName,u.phone,u.show_id showId FROM mem_user u |
| | | SELECT u.nick_name nickName,u.phone,u.show_id showId,u.real_name,u.city_code FROM mem_user u |
| | | LEFT JOIN mem_user_relation ur ON u.id = ur.parent_id |
| | | WHERE 1=1 |
| | | <if test="userId != null"> |
| | |
| | | package com.sinata.modular.member.model; |
| | | |
| | | import java.util.Date; |
| | | |
| | | import com.baomidou.mybatisplus.annotations.TableField; |
| | | import com.baomidou.mybatisplus.activerecord.Model; |
| | | import com.baomidou.mybatisplus.annotations.TableField; |
| | | import com.baomidou.mybatisplus.annotations.TableName; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | import lombok.Data; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | * @since 2023-03-23 |
| | | */ |
| | | @Data |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | @TableName("mem_user_relation") |
| | | @ApiModel(value = "会员邀请关系") |
| | | public class MemUserRelation extends Model<MemUserRelation> { |
| | |
| | | couponProduct.setProductType(jsonObject.getInteger("type")); |
| | | myCouponProductList.add(couponProduct); |
| | | } |
| | | myCouponProductService.insertBatch(myCouponProductList); |
| | | if (myCouponProductList.size() > 0) { |
| | | myCouponProductService.insertBatch(myCouponProductList); |
| | | } |
| | | } |
| | | if(StrUtil.isNotEmpty(myCoupon.getUserInfo())){ |
| | | List<String> idList = Arrays.asList( |
| | |
| | | package com.sinata.modular.system.controller; |
| | | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.sinata.common.enums.EnumIsDelete; |
| | | import com.sinata.core.base.controller.BaseController; |
| | | import com.sinata.core.base.tips.Tip; |
| | | import com.sinata.core.common.annotion.BussinessLog; |
| | |
| | | import com.sinata.modular.system.controller.util.UploadUtil; |
| | | import com.sinata.modular.system.dao.UserMapper; |
| | | import com.sinata.modular.system.factory.UserFactory; |
| | | import com.sinata.modular.system.model.AreaCity; |
| | | import com.sinata.modular.system.model.TCityRegion; |
| | | import com.sinata.modular.system.model.User; |
| | | import com.sinata.modular.system.service.IAreaCityService; |
| | | import com.sinata.modular.system.service.ITCityRegionService; |
| | | import com.sinata.modular.system.service.IUserService; |
| | | import com.sinata.modular.system.transfer.UserDto; |
| | | import com.sinata.modular.system.warpper.UserWarpper; |
| | |
| | | |
| | | import javax.naming.NoPermissionException; |
| | | import javax.validation.Valid; |
| | | import java.util.Arrays; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 系统管理员控制器 |
| | |
| | | @Autowired |
| | | private IAreaCityService areaCityService; |
| | | |
| | | @Autowired |
| | | private ITCityRegionService cityRegionService; |
| | | |
| | | /** |
| | | * 跳转到查看管理员列表的页面 |
| | | */ |
| | |
| | | */ |
| | | @RequestMapping("/user_add") |
| | | public String addView(Model model) { |
| | | model.addAttribute("provinceList", areaCityService.selectList( |
| | | new EntityWrapper<AreaCity>() |
| | | .groupBy("province_code") |
| | | .eq("is_open", 1) |
| | | .eq("is_delete", EnumIsDelete.EXISTED.index) |
| | | )); |
| | | // model.addAttribute("provinceList", areaCityService.selectList( |
| | | // new EntityWrapper<AreaCity>() |
| | | // .groupBy("province_code") |
| | | // .eq("is_open", 1) |
| | | // .eq("is_delete", EnumIsDelete.EXISTED.index) |
| | | // )); |
| | | // 省市区三级联动 |
| | | List<TCityRegion> cityList = cityRegionService.selectList( |
| | | new EntityWrapper<TCityRegion>() |
| | | .setSqlSelect("code, name") |
| | | .eq("parent_id", 0) |
| | | ); |
| | | model.addAttribute("cityList", cityList); |
| | | return PREFIX + "user_add.html"; |
| | | } |
| | | |
| | |
| | | model.addAttribute("deptName", ConstantFactory.me().getDeptName(user.getDeptid())); |
| | | LogObjectHolder.me().set(user); |
| | | |
| | | model.addAttribute("provinceList", areaCityService.selectList( |
| | | new EntityWrapper<AreaCity>() |
| | | .groupBy("province_code") |
| | | .eq("is_open", 1) |
| | | .eq("is_delete", EnumIsDelete.EXISTED.index) |
| | | )); |
| | | // model.addAttribute("provinceList", areaCityService.selectList( |
| | | // new EntityWrapper<AreaCity>() |
| | | // .groupBy("province_code") |
| | | // .eq("is_open", 1) |
| | | // .eq("is_delete", EnumIsDelete.EXISTED.index) |
| | | // )); |
| | | // 省市区三级联动 |
| | | List<TCityRegion> cityList = cityRegionService.selectList( |
| | | new EntityWrapper<TCityRegion>() |
| | | .setSqlSelect("code, name") |
| | | .eq("parent_id", 0) |
| | | ); |
| | | model.addAttribute("cityList", cityList); |
| | | if (StrUtil.isBlank(user.getProvinceCode()) || "-1".equals(user.getProvinceCode())) { |
| | | user.setProvinceCode("000000"); |
| | | } |
| | | model.addAttribute("provinceCode", user.getProvinceCode().substring(0, 2) + "0000"); |
| | | model.addAttribute("cityCode", user.getProvinceCode().substring(0, 4) + "00"); |
| | | model.addAttribute("countyCode", user.getProvinceCode()); |
| | | |
| | | return PREFIX + "user_edit.html"; |
| | | } |
| | |
| | | @Permission |
| | | @ResponseBody |
| | | public Object list(@RequestParam(required = false) String name, @RequestParam(required = false) String beginTime, @RequestParam(required = false) String endTime, @RequestParam(required = false) Integer deptid) { |
| | | List<Map<String, Object>> users; |
| | | if (ShiroKit.isAdmin()) { |
| | | List<Map<String, Object>> users = userService.selectUsers(null, name, beginTime, endTime, deptid); |
| | | return new UserWarpper(users).warp(); |
| | | users = userService.selectUsers(null, name, beginTime, endTime, deptid); |
| | | } else { |
| | | DataScope dataScope = new DataScope(ShiroKit.getDeptDataScope()); |
| | | List<Map<String, Object>> users = userService.selectUsers(dataScope, name, beginTime, endTime, deptid); |
| | | return new UserWarpper(users).warp(); |
| | | users = userService.selectUsers(dataScope, name, beginTime, endTime, deptid); |
| | | } |
| | | for (Map<String, Object> map : users) { |
| | | String[] provinceCityCountyName = cityRegionService.getProvinceCityCountyName((String) map.get("provinceCode")); |
| | | String provinceName = Arrays.stream(provinceCityCountyName).collect(Collectors.joining("")); |
| | | map.put("provinceName", provinceName); |
| | | } |
| | | return new UserWarpper(users).warp(); |
| | | } |
| | | |
| | | /** |
| | |
| | | and mu.nick_name like CONCAT('%',#{condition},'%') |
| | | </if> |
| | | <if test="status != null"> |
| | | and md.status != #{status} |
| | | and md.status = #{status} |
| | | </if> |
| | | </where> |
| | | ORDER BY md.status ASC |
| | |
| | | <result column="version" property="version"/> |
| | | <result column="create_time" property="createTime"/> |
| | | <result column="system_notice_type" property="systemNoticeType"/> |
| | | <result column="cityRole" property="cityRole"/> |
| | | </resultMap> |
| | | |
| | | <sql id="Base_Column_List"> |
| | | id, num, pid, name, deptid, tips, create_time, system_notice_type |
| | | id, num, pid, name, deptid, tips, create_time, system_notice_type, cityRole |
| | | </sql> |
| | | |
| | | <select id="selectRoles" resultType="map"> |
| | |
| | | @ApiModelProperty(value = "消息类型配置") |
| | | private String systemNoticeType; |
| | | |
| | | @ApiModelProperty(value = "城市管理员,0否,1省,2市,3区") |
| | | private Integer cityRole; |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.id; |
| | |
| | | private Integer version; |
| | | |
| | | private String companyAddress; |
| | | /** |
| | | * 城市code |
| | | */ |
| | | private String provinceCode; |
| | | /** |
| | | * 城市名称 |
| | | */ |
| | | private String provinceName; |
| | | private Integer adminId; |
| | | |
| | |
| | | String province = StrUtil.sub(countyCode, 0, 2) + "0000"; |
| | | String city = StrUtil.sub(countyCode, 0, 4) + "00"; |
| | | |
| | | if (cityAll == null) { |
| | | cityAll = this.selectList(new EntityWrapper<>()); |
| | | } |
| | | |
| | | return cityAll.stream() |
| | | .filter(o -> { |
| | | if (o.getCode().equals(province) || o.getCode().equals(city) || o.getCode().equals(countyCode)) { |
| | |
| | | if ( $btnContainer.find( "#" + self.uId + "BtnId").length > 0) { |
| | | $btnContainer.find( "#" + self.uId + "BtnId").remove(); |
| | | self.$imgUpload && self.$imgUpload.destroy(); |
| | | |
| | | // 重新赋值 |
| | | self.$input && self.$input.val( self.upImgUrls.join(",")); |
| | | } |
| | | $btnContainer.prepend('' + |
| | | '<div class="upload-btn" style="margin: 0 0 1em 1em;margin-top: 0px!important;" id="'+ self.uId +'BtnId">' + |
| | |
| | | <th style="text-align: center;">市场价</th> |
| | | <th style="text-align: center;">美天销售价</th> |
| | | <th style="text-align: center;">商品库存</th> |
| | | <th style="text-align: center;">数量</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody id="goodsSelectTbody"></tbody> |
| | |
| | | <th style="text-align: center;">市场价</th> |
| | | <th style="text-align: center;">美天销售价</th> |
| | | <th style="text-align: center;">商品库存</th> |
| | | <th style="text-align: center;">数量</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody id="goodsSelectTbody"></tbody> |
| | |
| | | <#NameCon id="userPhone" name="下单用户手机" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="userNickname" name="下单用户昵称" /> |
| | | <input id="userShowId" type="hidden" /> |
| | | <#NameCon id="userNickname" name="客户姓名" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="userShowId" name="商品名称" /> |
| | | <#NameCon id="goodsName" name="商品名称" /> |
| | | </div> |
| | | </div> |
| | | <div class="hidden-xs" id="MallOrderTableToolbar" role="group"> |
| | |
| | | @if(shiro.hasPermission("/mallOrder/export")){ |
| | | <#button name="导出数据" icon="fa-export" clickFun="MallOrder.export()"/> |
| | | @} |
| | | <!-- 删除订单 --> |
| | | @if(shiro.hasPermission("/mallOrder/delete")){ |
| | | <input id="deleteAuth" type="hidden" value="true"> |
| | | <!-- 核销记录 --> |
| | | @if(shiro.hasPermission("/mallOrder/useCheck")){ |
| | | <input id="useCheckAuth" type="hidden" value="true"> |
| | | @} |
| | | <!-- 查看物流 --> |
| | | @if(shiro.hasPermission("/mallOrder/logistics")){ |
| | | <input id="logisticsAuth" type="hidden" value="true"> |
| | | <!-- 处理退款 --> |
| | | @if(shiro.hasPermission("/mallOrder/orderShip")){ |
| | | <input id="orderShipAuth" type="hidden" value="true"> |
| | | @} |
| | | </div> |
| | | <#table id="MallOrderTable"/> |
| | |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">下单用户昵称</label> |
| | | <label class="col-sm-4 control-label">客户姓名</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.takeName} |
| | | </div> |
| | |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">市场监工号</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | |
| | | </div> |
| | | <label class="col-sm-4 control-label">市场总监工号</label> |
| | | <div class="col-sm-8 form-control-static">${v5ShowId}</div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">市场监工姓名</label> |
| | | <div class="col-sm-8 form-control-static"></div> |
| | | <label class="col-sm-4 control-label">市场总监姓名</label> |
| | | <div class="col-sm-8 form-control-static">${v5Team}</div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">退款时间</label> |
| | |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">合伙人工号</label> |
| | | <div class="col-sm-8 form-control-static"></div> |
| | | <label class="col-sm-4 control-label">城市合伙人工号</label> |
| | | <div class="col-sm-8 form-control-static">${v4ShowId}</div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">合伙人姓名</label> |
| | | <div class="col-sm-8 form-control-static"></div> |
| | | <label class="col-sm-4 control-label">城市合伙人姓名</label> |
| | | <div class="col-sm-8 form-control-static">${v4Team}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <table class="table table-bordered table-hover table-striped"> |
| | | <thead> |
| | | <tr> |
| | | <th>商品名称</th> |
| | | <th>商品编号</th> |
| | | <th>商品名称</th> |
| | | <th>商品预览</th> |
| | | <th>商品规格</th> |
| | | <th>购买数量</th> |
| | |
| | | @if(isNotEmpty(item.orderDetails)){ |
| | | @for(info in item.orderDetails) { |
| | | <tr> |
| | | <td>${info.goodsName}</td> |
| | | <td>${info.goodsNo}</td> |
| | | <td>${info.goodsName}</td> |
| | | <td> |
| | | <img src="${info.goodsImage}" alt="" style="width: 50px; height: 50px;"> |
| | | </td> |
New file |
| | |
| | | @layout("/common/_container.html"){ |
| | | <div class="ibox float-e-margins"> |
| | | <div class="ibox-content"> |
| | | <div class="form-horizontal"> |
| | | <div class="row"> |
| | | <div class="panel panel-default"> |
| | | <div class="panel-heading"><h5 class="panel-title">订单信息</h5></div> |
| | | <div class="panel-body"> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">下单时间</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.createTime, dateFormat="yyyy-MM-dd HH:mm:SS"} |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">订单状态</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | <span id="state_show"></span> |
| | | <select id="state_name" style="display: none"> |
| | | <option value="0">待支付</option> |
| | | <option value="1">待核销</option> |
| | | <option value="2">使用中</option> |
| | | <option value="3">已完成</option> |
| | | <option value="4">已申请实物券</option> |
| | | <option value="10">已取消</option> |
| | | <option value="11">待退款</option> |
| | | <option value="12">已退款</option> |
| | | <option value="13">退款失败</option> |
| | | </select> |
| | | <script>$(function () { |
| | | $( "#state_show").text( Feng.getOptionFormatter( "#state_name")("${item.state}")); |
| | | })</script> |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">订单编号</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.orderNo} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">客户姓名</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.takeName} |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">下单用户电话</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.userPhone} |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">预约门店</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.merchantName} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">订单来源</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.saleUserId != 0 ? '推广链接':'自然'} |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">订单类型</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.orderType==0?'普通商品':item.orderType==1?'黄金套餐':'钻石套餐'} |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">核销次数</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.useNum} |
| | | </div> |
| | | </div> |
| | | <!--<div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">核销门店</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.merchantName} |
| | | </div> |
| | | </div>--> |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">营销员工号</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.saleShowId} |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">营销员姓名</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.saleUserName} |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">营销员业绩</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.saleShowId != null ? saleGoodsMoney : "-"} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">市场总监工号</label> |
| | | <div class="col-sm-8 form-control-static">${v5ShowId}</div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">市场总监姓名</label> |
| | | <div class="col-sm-8 form-control-static">${v5Team}</div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">退款时间</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.refundTime, dateFormat="yyyy-MM-dd HH:mm:ss"} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">城市合伙人工号</label> |
| | | <div class="col-sm-8 form-control-static">${v4ShowId}</div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">城市合伙人姓名</label> |
| | | <div class="col-sm-8 form-control-static">${v4Team}</div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="panel panel-default"> |
| | | <div class="panel-heading"><h5 class="panel-title">商品信息</h5></div> |
| | | <div class="panel-body"> |
| | | <h5 class="panel-title" style="padding-bottom: 10px;">套餐信息</h5> |
| | | <style> th,td{ text-align: center} </style> |
| | | <table class="table table-bordered table-hover table-striped"> |
| | | <thead> |
| | | <tr> |
| | | <th>商品编号</th> |
| | | <th>套餐名称</th> |
| | | <th>商品预览</th> |
| | | <th>规格组</th> |
| | | <th>购买数量</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | @if(isNotEmpty(item.orderDetails)){ |
| | | @for(info in item.orderDetails) { |
| | | <tr> |
| | | <td>${info.goodsNo}</td> |
| | | <td>${info.goodsName}</td> |
| | | <td><img src="${info.goodsImage}" style="width: 50px; height: 50px;"></td> |
| | | <td>${info.grepName}</td> |
| | | <td>${info.goodsNum}</td> |
| | | </tr> |
| | | <tr> |
| | | <td colspan="5" style="text-align: left;"><b>规格组信息</b></td> |
| | | </tr> |
| | | <tr> |
| | | <td colspan="5"> |
| | | <table class="table table-bordered table-hover"> |
| | | <tr> |
| | | <th>商品编号</th> |
| | | <th>商品名称</th> |
| | | <th>商品预览</th> |
| | | <th>数量</th> |
| | | </tr> |
| | | @for( groupGoodsInfo in mallOrderDetailGroupSpecList ) { |
| | | @if( (groupGoodsInfo.groupSpecId + '') == info.specGrep ){ |
| | | <tr> |
| | | <td>${groupGoodsInfo.groupSpecGoodsNo}</td> |
| | | <td>${groupGoodsInfo.groupSpecGoodsName}</td> |
| | | <td><img src="${groupGoodsInfo.groupSpecGoodsImage}" style="width: 50px; height: 50px;"></td> |
| | | <td>${groupGoodsInfo.groupSpecGoodsNum}</td> |
| | | </tr> |
| | | @} |
| | | @} |
| | | </table> |
| | | </td> |
| | | </tr> |
| | | @} |
| | | @}else{ |
| | | <tr> |
| | | <td colspan="10000">暂无数据</td> |
| | | </tr> |
| | | @} |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | </div> |
| | | <div class="panel panel-default"> |
| | | <div class="panel-heading"><h5 class="panel-title">费用信息</h5></div> |
| | | <div class="panel-body"> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">订单金额</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.goodsMoney} |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">实付金额</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.payMoney} |
| | | </div> |
| | | </div> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">优惠金额</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.goodsMoney - item.payMoney} |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div class="panel panel-default"> |
| | | <div class="panel-heading"><h5 class="panel-title">核销列表</h5></div> |
| | | <div class="panel-body"> |
| | | <table class="table table-bordered table-hover table-striped"> |
| | | <thead> |
| | | <tr> |
| | | <th>核销时间</th> |
| | | <th>核销门店</th> |
| | | <th>核销商品</th> |
| | | <th>核销数量</th> |
| | | <th>核销人</th> |
| | | <th>状态</th> |
| | | </tr> |
| | | </thead> |
| | | <tbody> |
| | | @if(isNotEmpty(item.useList)){ |
| | | @for(info in item.useList) { |
| | | <tr> |
| | | <td>${info.useTime, dateFormat="yyyy-MM-dd HH:mm:ss"}</td> |
| | | <td>${info.merchantName}</td> |
| | | <td>${info.grepName}</td> |
| | | <td>${info.useNum}</td> |
| | | <td>${info.linkman}</td> |
| | | <td>已核销</td> |
| | | </tr> |
| | | @} |
| | | @} |
| | | @if(isNotEmpty(item.useOrderDetailGroupSpecList)){ |
| | | @for(info in item.useOrderDetailGroupSpecList) { |
| | | <tr> |
| | | <td>${info.useDateTime, dateFormat="yyyy-MM-dd HH:mm:ss"}</td> |
| | | <td>${info.merchantName}</td> |
| | | <td>${info.goodsName}</td> |
| | | <td>${info.groupSpecUse}</td> |
| | | <td>${info.linkman}</td> |
| | | <td>${info.isUse == 1 ? "已核销" : "核销中"}</td> |
| | | </tr> |
| | | @} |
| | | @} |
| | | </tbody> |
| | | </table> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </div> |
| | | <script src="${ctxPath}/static/modular/mall/mallOrder/mallOrder_info.js"></script> |
| | | @} |
New file |
| | |
| | | @layout("/common/_container.html"){ |
| | | <div class="ibox float-e-margins"> |
| | | <div class="ibox-content"> |
| | | <div class="form-horizontal"> |
| | | <input type="hidden" id="userId" name="userId" value="${item.id}"> |
| | | <div class="row"> |
| | | <div class="col-sm-10"> |
| | | <div class="form-group"> |
| | | <label class="col-sm-3 control-label">城市</label> |
| | | <div class="col-sm-9"> |
| | | <div class="col-sm-4" style="padding-left: 0px; padding-right: 0px;"> |
| | | <select class="form-control" id="cityCode1" name="cityCode1" onchange="Feng.selectCity1();"> |
| | | <option value="-1">请选择</option> |
| | | @for(city in cityList) { |
| | | <option value="${city.code}">${city.name}</option> |
| | | @} |
| | | </select> |
| | | </div> |
| | | <div class="col-sm-4" style="padding-left: 0px; padding-right: 0px;"> |
| | | <select class="form-control" id="cityCode2" name="cityCode2" onchange="Feng.selectCity2();"> |
| | | <option value="-1">请选择</option> |
| | | </select> |
| | | </div> |
| | | <div class="col-sm-4" style="padding-left: 0px; padding-right: 0px;"> |
| | | <select class="form-control" id="cityCode" name="cityCode"> |
| | | <option value="-1">请选择</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <div class="row btn-group-m-t"> |
| | | <div class="col-sm-10 col-sm-offset-5"> |
| | | <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="DialogInfo.editSubmit()"/> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <script type="text/javascript"> |
| | | var DialogInfo = {}; |
| | | DialogInfo.editSubmit = function () { |
| | | let cityCode = $("#cityCode").val(); |
| | | if(cityCode == null || cityCode == "-1") { |
| | | Feng.error("请选择城市!"); |
| | | return; |
| | | } |
| | | |
| | | //提交信息 |
| | | var ajax = new $ax(Feng.ctxPath + "/memUserSales/editCityCode", function (data) { |
| | | if(data.code == 200){ |
| | | parent.layer.close(window.parent.MemUserSales.layerIndex); |
| | | window.parent.MemUserSales.table.refresh(); |
| | | Feng.success("操作成功!"); |
| | | } else { |
| | | Feng.error("操作失败!" + data.message); |
| | | } |
| | | }, function (data) { |
| | | Feng.error("操作失败!"); |
| | | }); |
| | | ajax.set("userId", $("#userId").val()); |
| | | ajax.set("cityCode", cityCode); |
| | | ajax.start(); |
| | | } |
| | | </script> |
| | | @} |
| | |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <div class="input-group"> |
| | | <span class="input-group-addon">职级</span> |
| | | <span class="input-group-addon">佣金等级</span> |
| | | <select id="memberGradeId" class="form-control"> |
| | | <option value="-1">全部</option> |
| | | <option value="1">普通会员</option> |
| | | <!--<option value="1">普通会员</option> |
| | | <option value="2">VIP会员</option> |
| | | <option value="3">黄金营销员</option> |
| | | <option value="4">城市合伙人</option> |
| | | <option value="5">市场总监</option> |
| | | <option value="5">市场总监</option>--> |
| | | <option value="1">Y</option> |
| | | <option value="2">Y</option> |
| | | <option value="3">S</option> |
| | | <option value="4">E</option> |
| | | <option value="5">X</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | |
| | | @if(shiro.hasPermission("/memUserSales/editUserLevel")){ |
| | | <button type="button" class="btn btn-primary" onclick="MemUserSales.openEditUserLevel()">调整职级</button> |
| | | @} |
| | | @if(shiro.hasPermission("/memUserSales/editCityCode")){ |
| | | <button type="button" class="btn btn-primary" onclick="MemUserSales.openEditCityCode()">修改城市</button> |
| | | @} |
| | | @if(shiro.hasPermission("/memUserSales/updateState")){ |
| | | <input id='updateStateAuth' type="hidden" value='true'> |
| | | @} |
| | |
| | | <div class="panel-body"> |
| | | <div class="form-group"> |
| | | <label class="col-sm-2 control-label">推荐人</label> |
| | | <div class="col-sm-2 form-control-static">${item.equityUser.realName!}</div> |
| | | <div class="col-sm-2 form-control-static">${equityUserRealName!}</div> |
| | | |
| | | <label class="col-sm-2 control-label"></label> |
| | | <div class="col-sm-2 form-control-static">${item.equityUser.cityCode!}</div> |
| | | <div class="col-sm-2 form-control-static">${equityUserCityCode!}</div> |
| | | </div> |
| | | <div class="form-group"> |
| | | <label class="col-sm-2 control-label">权益转让</label> |
| | |
| | | <div class="col-sm-4" style="padding-left: 0px; padding-right: 0px;"> |
| | | <select class="form-control" id="cityCode1" name="cityCode1" onchange="Feng.selectCity1();"> |
| | | <option value="-1">请选择</option> |
| | | @for(city in cityList){ |
| | | @for(city in cityList) { |
| | | <option value="${city.code}">${city.name}</option> |
| | | @} |
| | | </select> |
| | |
| | | <div class="col-sm-6 b-r"> |
| | | <#input id="account" name="账户" underline="true"/> |
| | | <#input id="password" name="密码" underline="true" value="123456" type="password"/> |
| | | <#input id="rePassword" name="确认密码" type="password" value="123456" underline="true"/> |
| | | <#input id="citySel" name="部门" underline="true" readonly="readonly" hidden="deptid" clickFun="UserInfoDlg.showDeptSelectTree(); return false;" style="background-color: #ffffff !important;"/> |
| | | <#input id="companyAddress" name="公司地址" type="text" underline="true"/> |
| | | </div> |
| | | <div class="col-sm-6"> |
| | | <div id="driverInfoContent"> |
| | | <input id="birthday" name="birthday" type="hidden"/> |
| | | <#input id="name" name="姓名" underline="true"/> |
| | | <#input id="rePassword" name="确认密码" type="password" value="123456" underline="true"/> |
| | | <#input id="phone" name="联系电话" underline="true"/> |
| | | <#input id="citySel" name="部门" underline="true" readonly="readonly" hidden="deptid" |
| | | clickFun="UserInfoDlg.showDeptSelectTree(); return false;" style="background-color: #ffffff !important;"/> |
| | | |
| | | <div class="form-group"> |
| | | <label class="col-sm-3 control-label">选择省</label> |
| | | <label class="col-sm-3 control-label">所属城市</label> |
| | | <div class="col-sm-9"> |
| | | <select class="form-control" id="provinceCode" name="provinceCode"> |
| | | @for(cityArea in provinceList) { |
| | | <option value="${cityArea.provinceCode}">${cityArea.provinceName}</option> |
| | | <select class="form-control" id="cityCode1" name="cityCode1" onchange="Feng.selectCity1();"> |
| | | <option value="-1">请选择</option> |
| | | @for(city in cityList) { |
| | | <option value="${city.code}">${city.name}</option> |
| | | @} |
| | | </select> |
| | | <select class="form-control" id="cityCode2" name="cityCode2" onchange="Feng.selectCity2();"> |
| | | <option value="-1">请选择</option> |
| | | </select> |
| | | <select class="form-control" id="cityCode" name="cityCode"> |
| | | <option value="-1">请选择</option> |
| | | </select> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | <div class="row"> |
| | | <div class="col-sm-6 b-r"> |
| | | <#input id="account" name="账户" underline="true" value="${user.account}"/> |
| | | <#input id="citySel" name="部门" underline="true" readonly="readonly" hidden="deptid" hiddenValue="${user.deptid}" value="${deptName}" clickFun="UserInfoDlg.showDeptSelectTree(); return false;" style="background-color: #ffffff !important;"/> |
| | | <#input id="companyAddress" name="公司地址" value="${user.companyAddress}" underline="true" type="text"/> |
| | | </div> |
| | | <div class="col-sm-6"> |
| | |
| | | <input id="birthday" name="birthday" value="${user.birthday}" type="hidden"/> |
| | | <#input id="name" name="姓名" underline="true" value="${user.name}"/> |
| | | <#input id="phone" name="联系电话" value="${user.phone}" underline="true"/> |
| | | <#input id="citySel" name="部门" underline="true" readonly="readonly" hidden="deptid" hiddenValue="${user.deptid}" value="${deptName}" clickFun="UserInfoDlg.showDeptSelectTree(); return false;" style="background-color: #ffffff !important;"/> |
| | | <div class="form-group"> |
| | | <label class="col-sm-3 control-label">选择省</label> |
| | | <label class="col-sm-3 control-label">所属城市</label> |
| | | <div class="col-sm-9"> |
| | | <select class="form-control" id="provinceCode" name="provinceCode"> |
| | | @for(cityArea in provinceList) { |
| | | <option value="${cityArea.provinceCode}" ${cityArea.provinceCode==user.provinceCode?'selected="selected"':''}>${cityArea.provinceName}</option> |
| | | <select class="form-control" id="cityCode1" name="cityCode1" onchange="Feng.selectCity1();"> |
| | | @for(city in cityList){ |
| | | <option value="${city.code}" ${city.code==provinceCode?'selected="selected"':''}>${city.name}</option> |
| | | @} |
| | | </select> |
| | | <select class="form-control" id="cityCode2" name="cityCode2" onchange="Feng.selectCity2();"> |
| | | <option value="-1">请选择</option> |
| | | </select> |
| | | <select class="form-control" id="cityCode" name="cityCode"> |
| | | <option value="-1">请选择</option> |
| | | </select> |
| | | |
| | | <input type="hidden" id="cityCode2Str" value="${cityCode}"> |
| | | <input type="hidden" id="cityCode3Str" value="${countyCode}"> |
| | | <script type="text/javascript"> |
| | | var cityCode2Str = $("#cityCode2Str").val(); |
| | | var cityCode3Str = $("#cityCode3Str").val(); |
| | | |
| | | var code1 = $("#cityCode1").val(); |
| | | $.ajax({ |
| | | type: "GET", |
| | | url: Feng.ctxPath + "/cityRegion/getListByParentId", |
| | | data: {code1: code1}, |
| | | success: function(data) { |
| | | var options = '<option value="-1">请选择</option>'; |
| | | $(data).each(function (i, item) { |
| | | var selectedStr = ""; |
| | | if (cityCode2Str == item.code) { |
| | | selectedStr = 'selected="selected"'; |
| | | } |
| | | options += "<option value='" + item.code + "' " + selectedStr + ">" + item.name + "</option>" |
| | | }); |
| | | $("#cityCode2").html(options); |
| | | |
| | | var code2 = $("#cityCode2").val(); |
| | | $.ajax({ |
| | | type: "GET", |
| | | url: Feng.ctxPath + "/cityRegion/getListByParentId", |
| | | data: {code2: code2}, |
| | | success: function(data) { |
| | | var options = '<option value="-1">请选择</option>'; |
| | | $(data).each(function (i, item) { |
| | | var selectedStr = ""; |
| | | if (cityCode3Str == item.code) { |
| | | selectedStr = 'selected="selected"'; |
| | | } |
| | | options += "<option value='" + item.code + "' " + selectedStr + ">" + item.name + "</option>" |
| | | }); |
| | | $("#cityCode").html(options); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | </script> |
| | | </div> |
| | | </div> |
| | | </div> |
| | |
| | | + "<input class='inputSpec' type='hidden' value='" + item.specName + "'>" |
| | | + item.specName + "</td>" |
| | | + "<td>" + item.goodsNames + "</td>" |
| | | + "<td><input class='inputSpec' type='hidden' value='" + item.stock + "'>" + item.stock + "</td>" |
| | | + "<td>" + item.provinceName + "</td>" |
| | | + "<td><input class='inputSpec' type='number' value='" + item.priceMerchant + "'></td>" |
| | | + "<td style='text-align: center;'><input class='inputSpec' type='hidden' value='" + item.stock + "'>" + item.stock + "</td>" |
| | | + "<td style='text-align: center;'>" + item.provinceName + "</td>" |
| | | + "<td style='text-align: center;'><input class='inputSpec' type='number' value='" + item.priceMerchant + "'></td>" |
| | | + "</tr>" |
| | | }); |
| | | |
| | |
| | | + item.specName + "</td>" |
| | | + "<td>" + item.goodsNames + "</td>" |
| | | + "<td>" + item.totalPrice + "</td>" |
| | | + "<td><input class='inputSpec' type='hidden' value='" + item.stock + "'>" + item.stock + "</td>" |
| | | + "<td>" + item.provinceName + "</td>" |
| | | + "<td><input class='inputSpec' type='number' value='" + item.priceMerchant + "'></td>" |
| | | + "<td style='text-align: center;'><input class='inputSpec' type='hidden' value='" + item.stock + "'>" + item.stock + "</td>" |
| | | + "<td style='text-align: center;'>" + item.provinceName + "</td>" |
| | | + "<td style='text-align: center;'><input class='inputSpec' type='number' value='" + item.priceMerchant + "'></td>" |
| | | + "</tr>" |
| | | }); |
| | | |
| | |
| | | * 收集数据 |
| | | */ |
| | | MallGroupSpecInfoDlg.collectData = function() { |
| | | let goodsSkuJson = MallGroupSpecInfoDlg.getGoodsSkuJson(1); |
| | | if (goodsSkuJson == 'ERROR') { |
| | | return false; |
| | | } |
| | | |
| | | this |
| | | .set('id') |
| | | .set('specName') |
| | | .set('goodsIds', Feng.getMultipleSelectVal("goodsIds")) |
| | | .set('goodsSkuJson', goodsSkuJson) |
| | | .set('goodsNames') |
| | | .set('classifyIdOne') |
| | | .set('classifyIdTwo') |
| | |
| | | .set('isDelete') |
| | | .set('provinceCode') |
| | | .set('provinceName', $('#provinceCode option:selected').text()); |
| | | |
| | | return true; |
| | | }; |
| | | |
| | | MallGroupSpecInfoDlg.getGoodsSkuJson = function(isCheck) { |
| | | let result = ''; |
| | | let goodsSkuJson = []; |
| | | $(".goods_sku_json").each(function() { |
| | | let inputs = $(this).find("input"); // 找到当前<td>元素中的所有输入框 |
| | | let input1Value = $(inputs[0]).val(); // 获取第一个输入框的内容-商品id |
| | | let input2Value = $(inputs[1]).val(); // 获取第二个输入框的内容-输入数量 |
| | | let input3Value = $(inputs[2]).val(); // 获取第三个输入框的内容-库存 |
| | | |
| | | // 是否需要验证 |
| | | if(isCheck == 1) { |
| | | if(input3Value - input2Value < 0) { |
| | | Feng.error("数量不能大于商品库存"); |
| | | // 错误标记 |
| | | result = "ERROR"; |
| | | // 中断each()循环 |
| | | return false; |
| | | } |
| | | if(input2Value == 0) { |
| | | Feng.error("数量不能小于1"); |
| | | // 错误标记 |
| | | result = "ERROR"; |
| | | // 中断each()循环 |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | let json = { |
| | | "goodsId": input1Value, |
| | | "goodsNum": input2Value |
| | | }; |
| | | |
| | | goodsSkuJson.push(json); |
| | | }); |
| | | if (result == '') { |
| | | result = JSON.stringify(goodsSkuJson); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | MallGroupSpecInfoDlg.chooseGoods = function() { |
| | | // $.ajax({ |
| | | // url : Feng.ctxPath + "/mallGoods/goodsByIdsList", |
| | | // type : "get", |
| | | // data : {"ids": Feng.getMultipleSelectVal("goodsIds")}, |
| | | // dataType : "json", |
| | | // success : function (list) { |
| | | // let goodsSelectTbodyStr = ''; |
| | | // $.each(list, function(i, item) { |
| | | // goodsSelectTbodyStr += "<tr>" |
| | | // + "<td> " + item.goodsNo + " </td>" |
| | | // + "<td> " + item.goodsName + " </td>" |
| | | // + "<td> " + item.price + " </td>" |
| | | // + "<td> " + item.priceSale + " </td>" |
| | | // + "<td> " + item.stock + " </td>" |
| | | // + "<td style='text-align: center;' class='goods_sku_json'>" + |
| | | // "<input type='hidden' value='" + item.goodsNo + "'>" + |
| | | // "<input type='text' value='0'>" + |
| | | // "</td>" |
| | | // + "</tr>" |
| | | // }); |
| | | // |
| | | // $("#goodsSelectTbody").html(goodsSelectTbodyStr); |
| | | // } |
| | | // }); |
| | | $.ajax({ |
| | | url : Feng.ctxPath + "/mallGoods/goodsByIdsList", |
| | | url : Feng.ctxPath + "/mallGoods/goodsByGoodsSpecId", |
| | | type : "get", |
| | | data : {"ids": Feng.getMultipleSelectVal("goodsIds")}, |
| | | data : { |
| | | "goodsIds": Feng.getMultipleSelectVal("goodsIds"), |
| | | "groupSpecId": $("#id").val(), |
| | | "oldGoodsSkuJson": MallGroupSpecInfoDlg.getGoodsSkuJson(0) |
| | | }, |
| | | dataType : "json", |
| | | success : function (list) { |
| | | let goodsSelectTbodyStr = ''; |
| | |
| | | + "<td> " + item.price + " </td>" |
| | | + "<td> " + item.priceSale + " </td>" |
| | | + "<td> " + item.stock + " </td>" |
| | | + "<td style='text-align: center;' class='goods_sku_json'>" + |
| | | "<input type='hidden' value='" + item.id + "'>" + |
| | | "<input type='text' value='" + item.goodsNum + "'>" + |
| | | "<input type='hidden' value='" + item.stock + "'>" + |
| | | "</td>" |
| | | + "</tr>" |
| | | }); |
| | | |
| | |
| | | */ |
| | | MallGroupSpecInfoDlg.addSubmit = function() { |
| | | this.clearData(); |
| | | this.collectData(); |
| | | let checkForm = this.collectData(); |
| | | if (!checkForm) { |
| | | return; |
| | | } |
| | | |
| | | //提交信息 |
| | | var ajax = new $ax(Feng.ctxPath + "/mallGroupSpec/add", function(data){ |
| | |
| | | */ |
| | | MallGroupSpecInfoDlg.editSubmit = function() { |
| | | this.clearData(); |
| | | this.collectData(); |
| | | let checkForm = this.collectData(); |
| | | if (!checkForm) { |
| | | return; |
| | | } |
| | | |
| | | //提交信息 |
| | | var ajax = new $ax(Feng.ctxPath + "/mallGroupSpec/update", function(data){ |
| | |
| | | {title: '商品名称', field: 'goodsName', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '规格组', field: 'grepName', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '数量', field: 'goodsNum', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '下单用户昵称', field: 'takeName', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '客户姓名', field: 'takeName', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '下单用户手机', field: 'userPhone', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '预约门店', field: 'merchantName', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '到店消费次数', field: 'useNum', visible: true, align: 'center', valign: 'middle'}, |
| | |
| | | formatter: function (value, row) { |
| | | var opts = Feng.Opts(), state = row.state; |
| | | |
| | | opts.add("MallOrder.detailAuth('"+row.orderNo+"');", "订单详情"); |
| | | if(state ==11){ |
| | | opts.add("MallOrder.deliverAuth('"+row.orderNo+"');", "处理退款"); |
| | | if ($("#detailAuth").val() == 'true') { |
| | | opts.add("MallOrder.openDetail('" + row.orderNo + "','" + row.orderType + "');", "订单详情"); |
| | | } |
| | | if(state ==2 || state ==3){ |
| | | opts.add("MallOrder.detailAuth('"+row.orderNo+"');", "核销记录"); |
| | | if (state == 11 && $("#orderShipAuth").val() == 'true') { |
| | | opts.add("MallOrder.deliverAuth('" + row.orderNo + "');", "处理退款"); |
| | | } |
| | | if ( (state == 2 || state == 3) && $("#useCheckAuth").val() == 'true' ) { |
| | | opts.add("MallOrder.openDetail('" + row.orderNo + "','" + row.orderType + "');", "核销记录"); |
| | | } |
| | | return opts.getOpts(); |
| | | } |
| | | } |
| | | |
| | | ]; |
| | | }; |
| | | |
| | |
| | | fix: false, //不固定 |
| | | maxmin: true, |
| | | content: Feng.ctxPath + '/mallOrder/logisticsAuth/' + id |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * 点击 打开订单详情页面 |
| | | */ |
| | | MallOrder.detailAuth = function ( id) { |
| | | this.layerIndex = layer.open({ |
| | | type: 2, |
| | | title: '订单详情', |
| | | area: ['80%', '80%'], //宽高 |
| | | fix: false, //不固定 |
| | | maxmin: true, |
| | | content: Feng.ctxPath + '/mallOrder/detailAuth/' + id |
| | | }); |
| | | }; |
| | | |
| | |
| | | /** |
| | | * 打开查看商品订单详情 |
| | | */ |
| | | MallOrder.detailAuth = function (id) { |
| | | var index = layer.open({ |
| | | MallOrder.openDetail = function (orderNo, orderType) { |
| | | this.layerIndex = layer.open({ |
| | | type: 2, |
| | | title: '商品订单详情', |
| | | area: ['80%', '80%'], //宽高 |
| | | area: ['95%', '95%'], //宽高 |
| | | fix: false, //不固定 |
| | | maxmin: true, |
| | | content: Feng.ctxPath + '/mallOrder/detail/' + id |
| | | content: Feng.ctxPath + '/mallOrder/detail?orderNo=' + orderNo + '&orderType=' + orderType |
| | | }); |
| | | this.layerIndex = index; |
| | | }; |
| | | |
| | | /** |
| | |
| | | queryData['userShowId'] = $("#userShowId").val(); |
| | | queryData['userPhone'] = $("#userPhone").val(); |
| | | queryData['userNickname'] = $("#userNickname").val(); |
| | | queryData['goodsName'] = $("#goodsName").val(); |
| | | return queryData; |
| | | } |
| | | |
| | |
| | | $("#userShowId").val(""); |
| | | $("#userPhone").val(""); |
| | | $("#userNickname").val(""); |
| | | $("#goodsName").val(""); |
| | | MallOrder.search(); |
| | | }; |
| | | $(function () { |
| | |
| | | return {0: "待处理", 1: "通过", 2: "拒绝"}[value]; |
| | | } |
| | | }, |
| | | {title: '职级', field: 'member_grade_id', visible: true, align: 'center', valign: 'middle', |
| | | {title: '佣金等级', field: 'member_grade_id', visible: true, align: 'center', valign: 'middle', |
| | | formatter: function (value, row) { |
| | | return {1: "普通会员", 2: "VIP会员", 3: "黄金营销员", 4: "城市合伙人", 5: "市场总监"}[value]; |
| | | //return {1: "普通会员", 2: "VIP会员", 3: "黄金营销员", 4: "城市合伙人", 5: "市场总监"}[value]; |
| | | return {1: "Y", 2: "Y", 3: "S", 4: "E", 5: "X"}[value]; |
| | | } |
| | | }, |
| | | {title: '积分', field: 'integral', visible: true, align: 'center', valign: 'middle'}, |
| | |
| | | fix: false, //不固定 |
| | | maxmin: true, |
| | | content: Feng.ctxPath + '/memUserSales/openEditUserLevel/' + MemUserSales.seItem.id |
| | | }); |
| | | }; |
| | | |
| | | /** |
| | | * 点击 修改城市 |
| | | */ |
| | | MemUserSales.openEditCityCode = function () { |
| | | if (!MemUserSales.checkTableOnlyId()) { |
| | | return; |
| | | } |
| | | |
| | | this.layerIndex = layer.open({ |
| | | type: 2, |
| | | title: '', |
| | | area: ['80%', '60%'], //宽高 |
| | | fix: false, //不固定 |
| | | maxmin: true, |
| | | content: Feng.ctxPath + '/memUserSales/openEditCityCode/' + MemUserSales.seItem.id |
| | | }); |
| | | }; |
| | | |
| | |
| | | ajax.set("state", state); |
| | | ajax.start(); |
| | | }; |
| | | Feng.confirm("是否 " + (state == 0 ? "解冻" : "解冻") + " 该用户?", operation); |
| | | Feng.confirm("是否 " + (state == 0 ? "解冻" : "冻结") + " 该用户?", operation); |
| | | }; |
| | | |
| | | /** |
| | |
| | | {title: '公司地址', field: 'companyAddress', align: 'center', valign: 'middle', sortable: false}, |
| | | {title: '创建时间', field: 'createtime', align: 'center', valign: 'middle', sortable: false}, |
| | | {title: '创建人', field: 'adminName', align: 'center', valign: 'middle', sortable: false}, |
| | | {title: '所属省', field: 'provinceName', align: 'center', valign: 'middle', sortable: false}, |
| | | {title: '所属城市', field: 'provinceName', align: 'center', valign: 'middle', sortable: false}, |
| | | {title: '状态', field: 'statusName', align: 'center', valign: 'middle', sortable: false}]; |
| | | return columns; |
| | | }; |
| | |
| | | var index = layer.open({ |
| | | type: 2, |
| | | title: '添加管理员', |
| | | area: ['800px', '560px'], //宽高 |
| | | area: ['800px', '650px'], //宽高 |
| | | fix: false, //不固定 |
| | | maxmin: true, |
| | | content: Feng.ctxPath + '/mgr/user_add' |
| | |
| | | var index = layer.open({ |
| | | type: 2, |
| | | title: '编辑管理员', |
| | | area: ['800px', '450px'], //宽高 |
| | | area: ['800px', '650px'], //宽高 |
| | | fix: false, //不固定 |
| | | maxmin: true, |
| | | content: Feng.ctxPath + '/mgr/user_edit/' + this.seItem.id |
| | |
| | | } |
| | | |
| | | this.userInfoData['companyAddress']= $("#companyAddress").val(); |
| | | this.userInfoData['provinceCode']= $("#provinceCode").val(); |
| | | this.userInfoData['provinceName']= $('#provinceCode option:selected').text(); |
| | | |
| | | let provinceCode = $("#cityCode").val(); |
| | | if (provinceCode == -1) { |
| | | provinceCode = $("#cityCode2").val(); |
| | | } |
| | | if (provinceCode == -1) { |
| | | provinceCode = $("#cityCode1").val(); |
| | | } |
| | | this.userInfoData['provinceCode']= provinceCode; |
| | | |
| | | return this; |
| | | }; |
New file |
| | |
| | | package com.sinata.common.enums; |
| | | |
| | | /** |
| | | * 城市管理员 |
| | | */ |
| | | public enum EnumCityRole { |
| | | |
| | | NOT_ROLE(1, "非城市管理员"), |
| | | PROVINCE_ROLE(2, "省级城市管理员"), |
| | | CITY_ROLE(3, "市级城市管理员"), |
| | | COUNTY_ROLE(4, "区级城市管理员"), |
| | | ; |
| | | |
| | | public final int index; |
| | | public final String mark; |
| | | |
| | | EnumCityRole(int index, String mark) { |
| | | this.index = index; |
| | | this.mark = mark; |
| | | } |
| | | |
| | | public int getIndex() { |
| | | return index; |
| | | } |
| | | |
| | | public String getMark() { |
| | | return mark; |
| | | } |
| | | |
| | | /** |
| | | * 通过index查询说明 |
| | | */ |
| | | public static String getMarkByIndex(Integer index) { |
| | | if (index != null) { |
| | | for (EnumCityRole obj : values()) { |
| | | if (obj.getIndex() == index) { |
| | | return obj.getMark(); |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
| | |
| | | } |
| | | return null; |
| | | } |
| | | public static String getAliasByIndex(Integer index) { |
| | | switch (index) { |
| | | case 3: |
| | | return "S"; |
| | | case 4: |
| | | return "E"; |
| | | case 5: |
| | | return "X"; |
| | | default: |
| | | return "Y"; |
| | | } |
| | | } |
| | | } |
| | |
| | | EXC_ORDER_TIME("exc_order_time", "每日挂单时间"), |
| | | REDIS_TOKEN_OPEN("redis_token_open", "Redis中token开关"), |
| | | TOKEN("token", "用户token"), |
| | | TOKEN_SHOP("toke_shop", "商户token"), |
| | | TOKEN_SHOP("toke_shop", "门店token"), |
| | | MAP_ACCOUNT_CHECK("map_account_check", "用户账号防爆验证"), |
| | | MAP_MEM_ADMIN_CHECK("map_mem_admin_check", "会员后台账号防爆验证"), |
| | | MAP_EXC_ADMIN_CHECK("map_exc_admin_check", "交易所后台账号防爆验证"), |
| | | MAP_MER_ADMIN_CHECK("map_mer_admin_check", "商家后台账号防爆验证"), |
| | | MAP_MEM_ADMIN_CHECK("map_mem_admin_check", "后台账号防爆验证"), |
| | | MAP_EXC_ADMIN_CHECK("map_exc_admin_check", "后台账号防爆验证"), |
| | | MAP_MER_ADMIN_CHECK("map_mer_admin_check", "门店后台账号防爆验证"), |
| | | ORDER_ID_INDEX("order_id_index", "订单ID序号"), |
| | | WX_CODE("wx_code:", "微信Code"), |
| | | ; |
New file |
| | |
| | | package com.sinata.common.model; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class GroupSpecGoodsSkuJsonVo { |
| | | private Integer goodsId; |
| | | private Integer goodsNum; |
| | | } |
| | |
| | | package com.sinata.rest.modular.auth.filter; |
| | | |
| | | import cn.hutool.core.io.FileUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.google.common.collect.ImmutableSet; |
| | | import lombok.extern.slf4j.Slf4j; |
| | |
| | | try { |
| | | // 请求地址 |
| | | String url = request.getRequestURL().toString(); |
| | | if (!url.endsWith(".css") && !url.endsWith(".js") && !url.endsWith(".ico") |
| | | if (StrUtil.isBlank(FileUtil.getSuffix(url)) |
| | | && !url.contains("/doc.html") |
| | | && !url.contains("/swagger") |
| | | && !url.contains("/webjars") |
| | |
| | | } |
| | | } |
| | | |
| | | log.error( |
| | | log.debug( |
| | | "url: " + url + " method: " + request.getMethod() |
| | | + "\nheader: " + JSONUtil.toJsonStr(header) |
| | | + "\nparams: " + request.getQueryString() |
| | |
| | | import com.sinata.rest.common.ApiUtils; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoGoods; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoGoodsDetail; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoGoodsSpec; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoGoodsSpecSet; |
| | | import com.sinata.rest.modular.mall.model.MallGoods; |
| | | import com.sinata.rest.modular.mall.model.MallGoodsSku; |
| | |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | @ApiOperation(value = "推广商品") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "userId", value = "用户ID", defaultValue = "1", dataType = "Int", paramType = "query", required = true), |
| | | @ApiImplicitParam(name = "cityCode", value = "城市code", defaultValue = "1", dataType = "String", paramType = "query", required = true), |
| | | @ApiImplicitParam(name = "cityCode", value = "城市code", dataType = "String", paramType = "query", required = true), |
| | | @ApiImplicitParam(name = "current", value = "当前页数", defaultValue = "1", dataType = "Int", required = true, paramType = "query"), |
| | | @ApiImplicitParam(name = "size", value = "每页条数", defaultValue = "20", dataType = "Int", required = true, paramType = "query"), |
| | | }) |
| | |
| | | @ApiOperation(value = "获取商品适用门店") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "id", value = "商品ID", dataType = "Int", defaultValue = "1", paramType = "path"), |
| | | @ApiImplicitParam(name = "cityCode", value = "城市code", dataType = "Int", defaultValue = "1", paramType = "query") |
| | | @ApiImplicitParam(name = "cityCode", value = "城市code", dataType = "Int", paramType = "query") |
| | | }) |
| | | public ApiUtils<List<MemMerchant>> merchant(@PathVariable("id") Integer id, String cityCode) { |
| | | MallGoods goods = goodsService.getById(id); |
| | |
| | | package com.sinata.rest.modular.mall.controller; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.sinata.common.enums.EnumIsDelete; |
| | | import com.sinata.common.enums.mall.EnumMallOrderState; |
| | |
| | | import com.sinata.rest.modular.mall.controller.vo.VoGoodsSku; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrder; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrderDetail; |
| | | import com.sinata.rest.modular.mall.model.*; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrderDetailGroupSpecGoods; |
| | | import com.sinata.rest.modular.mall.model.MallOrder; |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetail; |
| | | import com.sinata.rest.modular.mall.model.MallOrderMain; |
| | | import com.sinata.rest.modular.mall.service.*; |
| | | import com.sinata.rest.modular.member.model.MemUser; |
| | | import com.sinata.rest.modular.member.model.MyCoupon; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 订单接口 |
| | |
| | | @Autowired |
| | | private IMallGroupSpecService mallGroupSpecService; |
| | | |
| | | @Autowired |
| | | private IMallOrderDetailGroupSpecService mallOrderDetailGroupSpecService; |
| | | |
| | | @GetMapping(value = "/list") |
| | | @ApiOperation(value = "获取订单列表", notes = "获取订单列表") |
| | | @ApiImplicitParams({ |
| | |
| | | @ApiImplicitParam(name = "orderNo", value = "订单编号", defaultValue = "1", dataType = "String", paramType = "query", required = true), |
| | | }) |
| | | public ApiUtils<VoMallOrder> detail(String orderNo) { |
| | | VoMallOrder order = orderService.getOrderByOrderNo(orderNo); |
| | | if (order == null) { |
| | | VoMallOrder o = orderService.getOrderByOrderNo(orderNo); |
| | | if (o == null) { |
| | | return ApiUtils.returnNG(null, "订单信息不存在"); |
| | | } |
| | | wrapperVoMallOrder(orderNo, o); |
| | | return ApiUtils.returnOK(o); |
| | | } |
| | | |
| | | public VoMallOrder wrapperVoMallOrder(String orderNo, VoMallOrder voMallOrder) { |
| | | try { |
| | | order.setOrderCode(QRCodeUtils.crateQRCode(orderNo, 200, 200)); |
| | | voMallOrder.setOrderCode(QRCodeUtils.crateQRCode(orderNo, 200, 200)); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | List<VoMallOrderDetail> detailList = orderService.getOrderDetailByOrderNoList(orderNo); |
| | | for (VoMallOrderDetail od : detailList) { |
| | | List<Integer> groupSpecGoodsIdList = new ArrayList<>(); |
| | | MallGoodsSku goodsSku = mallGoodsSkuService.getOne( |
| | | Wrappers.<MallGoodsSku>query().lambda() |
| | | .eq(MallGoodsSku::getGoodsId, od.getGoodsId()) |
| | | .eq(MallGoodsSku::getMerchantId, 0) |
| | | .last("LIMIT 1") |
| | | ); |
| | | if (goodsSku != null && StrUtil.isNotBlank(goodsSku.getSpecIds())) { |
| | | String[] specIdArray = goodsSku.getSpecIds().split(","); |
| | | List<MallGroupSpec> groupSpecList = mallGroupSpecService.list( |
| | | Wrappers.<MallGroupSpec>query().lambda() |
| | | .in(MallGroupSpec::getId, specIdArray) |
| | | ); |
| | | for (MallGroupSpec mallGroupSpec : groupSpecList) { |
| | | groupSpecGoodsIdList.addAll( |
| | | Arrays.stream(mallGroupSpec.getGoodsIds().split(",")).map(Integer::parseInt).collect(Collectors.toList()) |
| | | ); |
| | | } |
| | | } |
| | | if (groupSpecGoodsIdList != null && groupSpecGoodsIdList.size() > 0) { |
| | | List<MallGoods> groupSpecGoodsList = mallGoodsService.list( |
| | | Wrappers.<MallGoods>query().lambda() |
| | | .in(MallGoods::getId, groupSpecGoodsIdList) |
| | | ); |
| | | od.setGroupSpecGoodsList(groupSpecGoodsList); |
| | | } |
| | | List<VoMallOrderDetailGroupSpecGoods> voMallOrderDetailGroupSpecGoodsList = mallOrderDetailGroupSpecService.getListByOrderNo(null, od.getOrderDetailNo()); |
| | | od.setGroupSpecGoodsList(voMallOrderDetailGroupSpecGoodsList); |
| | | // List<Integer> groupSpecGoodsIdList = new ArrayList<>(); |
| | | // MallGoodsSku goodsSku = mallGoodsSkuService.getById(od.getSkuId()); |
| | | // if (goodsSku != null && StrUtil.isNotBlank(goodsSku.getSpecIds())) { |
| | | // String[] specIdArray = goodsSku.getSpecIds().split(","); |
| | | // List<MallGroupSpec> groupSpecList = mallGroupSpecService.list( |
| | | // Wrappers.<MallGroupSpec>query().lambda() |
| | | // .in(MallGroupSpec::getId, specIdArray) |
| | | // ); |
| | | // for (MallGroupSpec mallGroupSpec : groupSpecList) { |
| | | // groupSpecGoodsIdList.addAll( |
| | | // Arrays.stream(mallGroupSpec.getGoodsIds().split(",")).map(Integer::parseInt).collect(Collectors.toList()) |
| | | // ); |
| | | // } |
| | | // } |
| | | // if (groupSpecGoodsIdList != null && groupSpecGoodsIdList.size() > 0) { |
| | | // List<MallGoods> groupSpecGoodsList = mallGoodsService.list( |
| | | // Wrappers.<MallGoods>query().lambda() |
| | | // .in(MallGoods::getId, groupSpecGoodsIdList) |
| | | // ); |
| | | // od.setGroupSpecGoodsList(groupSpecGoodsList); |
| | | // } |
| | | } |
| | | order.setDetailList(detailList); |
| | | return ApiUtils.returnOK(order); |
| | | voMallOrder.setDetailList(detailList); |
| | | return voMallOrder; |
| | | } |
| | | |
| | | @GetMapping(value = "/getOrderDetailGroupSpecGoods") |
| | | @ApiOperation(value = "获取订单套餐规格组商品列表", notes = "获取订单套餐规格组商品列表") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "orderNo", value = "订单编号", dataType = "String", paramType = "query", required = true), |
| | | }) |
| | | public ApiUtils<List<VoMallOrderDetailGroupSpecGoods>> getOrderDetailGroupSpecGoods(String orderNo) { |
| | | return ApiUtils.returnOK(mallOrderDetailGroupSpecService.getListByOrderNo(orderNo, null)); |
| | | } |
| | | |
| | | @GetMapping(value = "/getSkuByMerchant") |
| | | @ApiOperation(value = "获取门店sku信息", notes = "获取门店sku信息") |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "skuIds", value = "商品Sku串(逗号分隔)", defaultValue = "1", dataType = "String", paramType = "query", required = true), |
| | | @ApiImplicitParam(name = "skuIds", value = "商品Sku串(逗号分隔)", dataType = "String", paramType = "query", required = true), |
| | | @ApiImplicitParam(name = "merchantId", value = "门店ID", defaultValue = "1", dataType = "String", paramType = "query", required = true), |
| | | }) |
| | | public List<VoGoodsSku> getSkuByMerchant(String skuIds, Integer merchantId) { |
| | |
| | | @ApiModelProperty(value = "规格ID") |
| | | private String specGrep; |
| | | |
| | | @ApiModelProperty(value = "规格属性ids") |
| | | private String specIds; |
| | | |
| | | @ApiModelProperty(value = "商品图") |
| | | private String imgUrl; |
| | | |
New file |
| | |
| | | package com.sinata.rest.modular.mall.controller.vo; |
| | | |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpec; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * <p> |
| | | * 商品列表 |
| | | * </p> |
| | | * |
| | | * @ClassName com.sinata.rest.modular.mall.controller.vo.VoGoods |
| | | * @Description 商品列表 |
| | | * @Author sl |
| | | * @Date 2023/3/12 17:45 |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "套餐规格组商品-响应") |
| | | public class VoGroupSpecGoods extends MallOrderDetailGroupSpec { |
| | | |
| | | @ApiModelProperty(value = "ID") |
| | | private Integer id; |
| | | |
| | | @ApiModelProperty(value = "商品编号") |
| | | private String goodsNo; |
| | | |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
| | | |
| | | @ApiModelProperty(value = "商品副标题") |
| | | private String goodsTitle; |
| | | |
| | | @ApiModelProperty(value = "商品列表图") |
| | | private String goodsImage; |
| | | |
| | | @ApiModelProperty(value = "市场价") |
| | | private BigDecimal price; |
| | | |
| | | @ApiModelProperty(value = "美天销售价") |
| | | private BigDecimal priceSale; |
| | | |
| | | @ApiModelProperty(value = "会员价") |
| | | private BigDecimal priceMember; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "门店销售价") |
| | | private BigDecimal priceMerchant; |
| | | |
| | | @ApiModelProperty(value = "商品SkuId") |
| | | private Integer skuId; |
| | | |
| | | @ApiModelProperty(value = "商品ID") |
| | | private Integer goodsId; |
| | | |
| | | @ApiModelProperty(value = "套餐规格商品列表") |
| | | private List<MallGoods> groupSpecGoodsList; |
| | | private List<VoMallOrderDetailGroupSpecGoods> groupSpecGoodsList; |
| | | |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
New file |
| | |
| | | package com.sinata.rest.modular.mall.controller.vo; |
| | | |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpec; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | |
| | | @Data |
| | | @ApiModel(value = "订单详情套餐规格组商品-响应") |
| | | public class VoMallOrderDetailGroupSpecGoods extends MallOrderDetailGroupSpec implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | @ApiModelProperty(value = "商品编号") |
| | | private String goodsNo; |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String goodsName; |
| | | @ApiModelProperty(value = "商品副标题") |
| | | private String goodsTitle; |
| | | @ApiModelProperty(value = "商品列表图") |
| | | private String goodsImage; |
| | | @ApiModelProperty(value = "市场价") |
| | | private BigDecimal price; |
| | | @ApiModelProperty(value = "美天销售价") |
| | | private BigDecimal priceSale; |
| | | @ApiModelProperty(value = "会员价") |
| | | private BigDecimal priceMember; |
| | | |
| | | } |
New file |
| | |
| | | package com.sinata.rest.modular.mall.dao; |
| | | |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpecLog; |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品核销记录 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-22 |
| | | */ |
| | | public interface MallOrderDetailGroupSpecLogMapper extends BaseMapper<MallOrderDetailGroupSpecLog> { |
| | | |
| | | } |
New file |
| | |
| | | package com.sinata.rest.modular.mall.dao; |
| | | |
| | | import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrderDetailGroupSpecGoods; |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpec; |
| | | import org.apache.ibatis.annotations.Param; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品 Mapper 接口 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-04 |
| | | */ |
| | | public interface MallOrderDetailGroupSpecMapper extends BaseMapper<MallOrderDetailGroupSpec> { |
| | | |
| | | List<VoMallOrderDetailGroupSpecGoods> getListByOrderNo(@Param("orderNo") String orderNo, @Param("orderDetailNo") String orderDetailNo); |
| | | |
| | | } |
| | |
| | | */ |
| | | List<VoMallOrder> getOrderByUserIdList(@Param("userId") Integer userId, @Param("saleUserId") Integer saleUserId, @Param("stateArray") Object[] stateArray); |
| | | List<VoMallOrder> getOrderByUserIdList(@Param("userId") Integer userId, @Param("saleUserId") Integer saleUserId, @Param("state")Integer state, @Param("page") Page page); |
| | | VoMallOrder getOrderByOrderNo(@Param("orderNo") String orderNo); |
| | | List<VoMallOrder> getOrderListByOrderNo(@Param("orderNo") String orderNo); |
| | | /** |
| | | * 获取用户详细订单列表 |
| | | */ |
| | |
| | | <id column="id" property="id" /> |
| | | <result column="userId" property="userId" /> |
| | | <result column="showId" property="showId" /> |
| | | <result column="order_no" property="orderNo" /> |
| | | <result column="province_code" property="provinceCode" /> |
| | | <result column="city_code" property="cityCode" /> |
| | | <result column="county_code" property="countyCode" /> |
| | | <result column="orderNo" property="orderNo" /> |
| | | <result column="provinceCode" property="provinceCode" /> |
| | | <result column="cityCode" property="cityCode" /> |
| | | <result column="countyCode" property="countyCode" /> |
| | | <result column="salesCommissionGoods" property="salesCommissionGoods" /> |
| | | <result column="salesCommissionGroup" property="salesCommissionGroup" /> |
| | | <result column="manageProfitGoods" property="manageProfitGoods" /> |
| | |
| | | <result column="month" property="month" /> |
| | | <result column="remark" property="remark" /> |
| | | </resultMap> |
| | | |
| | | |
| | | |
| | | <select id="getNotCommissionSettlementList" resultType="com.sinata.rest.modular.mall.model.MallCommissionSettlementMonth"> |
| | | SELECT |
| | |
| | | <select id="getGoodsBySkuIdArray" resultType="com.sinata.rest.modular.mall.controller.vo.VoGoodsSku"> |
| | | SELECT |
| | | goods.id goods_id, goods.goods_name,goods.goods_image, goods.state, mall_group_spec.start_time, mall_group_spec.end_time, goods.group_type, |
| | | sku.id, sku.sku_id, sku.grep_name, sku.spec_grep, sku.img_url, sku.price, sku.price_sale, sku.price_member, sku.price_merchant, sku.stock, sku.merchant_id, |
| | | sku.id, sku.sku_id, sku.grep_name, sku.spec_grep, sku.spec_ids, sku.img_url, sku.price, sku.price_sale, sku.price_member, sku.price_merchant, sku.stock, sku.merchant_id, |
| | | city.province_code, city.city_code, city.county_code |
| | | FROM mall_goods_sku sku |
| | | LEFT JOIN mall_group_spec ON mall_group_spec.id = sku.spec_ids |
| | |
| | | <select id="getGoodsBySkuIdMerchant" resultType="com.sinata.rest.modular.mall.controller.vo.VoGoodsSku"> |
| | | SELECT |
| | | goods.id goods_id, goods.goods_name, goods.state, goods.start_time, goods.end_time, goods.group_type, |
| | | sku.id, sku.sku_id, sku.grep_name, sku.spec_grep, sku.img_url, sku.price, sku.price_sale, sku.price_member, sku.price_merchant, sku.stock, sku.merchant_id, |
| | | sku.id, sku.sku_id, sku.grep_name, sku.spec_grep, sku.spec_ids, sku.img_url, sku.price, sku.price_sale, sku.price_member, sku.price_merchant, sku.stock, sku.merchant_id, |
| | | city.province_code, city.city_code, city.county_code |
| | | FROM mall_goods_sku sku |
| | | LEFT JOIN mall_goods goods ON sku.goods_id = goods.id |
| | |
| | | <id column="id" property="id" /> |
| | | <result column="spec_name" property="specName" /> |
| | | <result column="goods_ids" property="goodsIds" /> |
| | | <result column="goods_sku_json" property="goodsSkuJson"/> |
| | | <result column="goods_names" property="goodsNames" /> |
| | | <result column="classify_id_one" property="classifyIdOne" /> |
| | | <result column="classify_id_two" property="classifyIdTwo" /> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.sinata.rest.modular.mall.dao.MallOrderDetailGroupSpecLogMapper"> |
| | | |
| | | <!-- 通用查询映射结果 --> |
| | | <resultMap id="BaseResultMap" type="com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpecLog"> |
| | | <id column="id" property="id" /> |
| | | <result column="order_no" property="orderNo" /> |
| | | <result column="order_detail_no" property="orderDetailNo" /> |
| | | <result column="goods_id" property="goodsId" /> |
| | | <result column="sku_id" property="skuId" /> |
| | | <result column="sku_num" property="skuNum" /> |
| | | <result column="group_spec_id" property="groupSpecId" /> |
| | | <result column="group_spec_goods_id" property="groupSpecGoodsId" /> |
| | | <result column="group_spec_goods_num" property="groupSpecGoodsNum" /> |
| | | <result column="group_spec_use" property="groupSpecUse" /> |
| | | <result column="is_use" property="isUse" /> |
| | | <result column="use_date_time" property="useDateTime" /> |
| | | <result column="use_merchant_id" property="useMerchantId" /> |
| | | </resultMap> |
| | | |
| | | </mapper> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="com.sinata.rest.modular.mall.dao.MallOrderDetailGroupSpecMapper"> |
| | | |
| | | <!-- 通用查询映射结果 --> |
| | | <resultMap id="BaseResultMap" type="com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpec"> |
| | | <id column="id" property="id" /> |
| | | <result column="order_detail_no" property="orderDetailNo" /> |
| | | <result column="order_no" property="orderNo" /> |
| | | <result column="goods_id" property="goodsId" /> |
| | | <result column="sku_id" property="skuId" /> |
| | | <result column="sku_num" property="skuNum" /> |
| | | <result column="group_spec_goods_id" property="groupSpecGoodsId" /> |
| | | <result column="group_spec_goods_num" property="groupSpecGoodsNum" /> |
| | | <result column="group_spec_use" property="groupSpecUse" /> |
| | | <result column="is_use" property="isUse" /> |
| | | <result column="use_date_time" property="useDateTime" /> |
| | | <result column="use_merchant_id" property="useMerchantId" /> |
| | | </resultMap> |
| | | |
| | | <select id="getListByOrderNo" resultType="com.sinata.rest.modular.mall.controller.vo.VoMallOrderDetailGroupSpecGoods"> |
| | | SELECT |
| | | o.*, |
| | | goods_no, goods_name, goods_title, goods_image, price, price_sale, price_member |
| | | FROM |
| | | mall_order_detail_group_spec o |
| | | LEFT JOIN mall_goods g ON o.group_spec_goods_id = g.id |
| | | <where> |
| | | <if test="orderNo != null and orderNo != ''"> |
| | | AND o.order_no = #{orderNo} |
| | | </if> |
| | | <if test="orderDetailNo != null and orderDetailNo != ''"> |
| | | AND o.order_detail_no = #{orderDetailNo} |
| | | </if> |
| | | </where> |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | ORDER BY o.order_no DESC |
| | | </select> |
| | | |
| | | <select id="getOrderByOrderNo" resultType="com.sinata.rest.modular.mall.controller.vo.VoMallOrder"> |
| | | <select id="getOrderListByOrderNo" resultType="com.sinata.rest.modular.mall.controller.vo.VoMallOrder"> |
| | | SELECT |
| | | o.*, |
| | | merchant.id merchant_id, |
| | |
| | | public void run() { |
| | | List<MemUser> list = memUserService.list( |
| | | Wrappers.<MemUser>query().lambda() |
| | | .isNull(MemUser::getAgentProvinceCode) |
| | | .isNull(MemUser::getCityCode) |
| | | ); |
| | | for (MemUser u : list) { |
| | | if (StrUtil.isBlank(u.getCityCode())) { |
| | |
| | | @Scheduled(cron = "0 1 0 1 * *") |
| | | public void run() { |
| | | log.info("佣金月结算"); |
| | | mallCommissionSettlementMonthService.commissionSettlemenMonth(); |
| | | mallCommissionSettlementMonthService.commissionSettlementMonth(); |
| | | } |
| | | |
| | | } |
| | |
| | | package com.sinata.rest.modular.mall.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.extension.activerecord.Model; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import java.time.LocalDateTime; |
| | | import java.io.Serializable; |
| | | import lombok.Data; |
| | | import com.baomidou.mybatisplus.extension.activerecord.Model; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.time.LocalDateTime; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | @ApiModelProperty(value = "商品ID串") |
| | | private String goodsIds; |
| | | @ApiModelProperty(value = "商品规格json") |
| | | private String goodsSkuJson; |
| | | /** |
| | | * 商品名串 |
| | | */ |
New file |
| | |
| | | package com.sinata.rest.modular.mall.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.extension.activerecord.Model; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Builder; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-04 |
| | | */ |
| | | @Data |
| | | @Builder |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | @ApiModel(value = "订单详情套餐规格组商品") |
| | | public class MallOrderDetailGroupSpec extends Model<MallOrderDetailGroupSpec> { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | @ApiModelProperty(value = "ID") |
| | | private Integer id; |
| | | /** |
| | | * 子订单编号 |
| | | */ |
| | | @ApiModelProperty(value = "子订单编号") |
| | | private String orderNo; |
| | | /** |
| | | * 订单详细编号 |
| | | */ |
| | | @ApiModelProperty(value = "订单详细编号") |
| | | private String orderDetailNo; |
| | | /** |
| | | * 商品ID |
| | | */ |
| | | @ApiModelProperty(value = "商品ID") |
| | | private Integer goodsId; |
| | | /** |
| | | * 商品SkuId |
| | | */ |
| | | @ApiModelProperty(value = "商品SkuId") |
| | | private Integer skuId; |
| | | /** |
| | | * 商品Sku数量 |
| | | */ |
| | | @ApiModelProperty(value = "商品Sku数量") |
| | | private Integer skuNum; |
| | | /** |
| | | * 套餐规格组ID |
| | | */ |
| | | @ApiModelProperty(value = "套餐规格组ID") |
| | | private Integer groupSpecId; |
| | | /** |
| | | * 套餐规格组商品ID |
| | | */ |
| | | @ApiModelProperty(value = "套餐规格组商品ID") |
| | | private Integer groupSpecGoodsId; |
| | | /** |
| | | * 套餐规格组商品数量 |
| | | */ |
| | | @ApiModelProperty(value = "套餐规格组商品数量") |
| | | private Integer groupSpecGoodsNum; |
| | | /** |
| | | * 套餐规格组商品核销数 |
| | | */ |
| | | @ApiModelProperty(value = "套餐规格组商品核销数") |
| | | private Integer groupSpecUse; |
| | | /** |
| | | * 是否核销完成,0否,1核销完成 |
| | | */ |
| | | @ApiModelProperty(value = "是否核销完成,0否,1核销完成") |
| | | private Integer isUse; |
| | | /** |
| | | * 核销时间 |
| | | */ |
| | | @ApiModelProperty(value = "核销时间") |
| | | private Date useDateTime; |
| | | /** |
| | | * 核销门店 |
| | | */ |
| | | @ApiModelProperty(value = "核销门店") |
| | | private Integer useMerchantId; |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.id; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.sinata.rest.modular.mall.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.extension.activerecord.Model; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import java.time.LocalDateTime; |
| | | import java.io.Serializable; |
| | | import lombok.Data; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品核销记录 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-22 |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "订单详情套餐规格组商品核销记录") |
| | | public class MallOrderDetailGroupSpecLog extends Model<MallOrderDetailGroupSpecLog> { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * ID |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | @ApiModelProperty(value = "ID") |
| | | private Integer id; |
| | | /** |
| | | * 子订单编号 |
| | | */ |
| | | @ApiModelProperty(value = "子订单编号") |
| | | private String orderNo; |
| | | /** |
| | | * 订单详细编号 |
| | | */ |
| | | @ApiModelProperty(value = "订单详细编号") |
| | | private String orderDetailNo; |
| | | /** |
| | | * 商品ID |
| | | */ |
| | | @ApiModelProperty(value = "商品ID") |
| | | private Integer goodsId; |
| | | /** |
| | | * 商品SkuId |
| | | */ |
| | | @ApiModelProperty(value = "商品SkuId") |
| | | private Integer skuId; |
| | | /** |
| | | * 商品Sku数量 |
| | | */ |
| | | @ApiModelProperty(value = "商品Sku数量") |
| | | private Integer skuNum; |
| | | /** |
| | | * 套餐规格组ID |
| | | */ |
| | | @ApiModelProperty(value = "套餐规格组ID") |
| | | private Integer groupSpecId; |
| | | /** |
| | | * 套餐规格组商品ID |
| | | */ |
| | | @ApiModelProperty(value = "套餐规格组商品ID") |
| | | private Integer groupSpecGoodsId; |
| | | /** |
| | | * 套餐规格组商品数量 |
| | | */ |
| | | @ApiModelProperty(value = "套餐规格组商品数量") |
| | | private Integer groupSpecGoodsNum; |
| | | /** |
| | | * 套餐规格组商品核销数 |
| | | */ |
| | | @ApiModelProperty(value = "套餐规格组商品核销数") |
| | | private Integer groupSpecUse; |
| | | /** |
| | | * 是否核销完成,0否,1核销完成 |
| | | */ |
| | | @ApiModelProperty(value = "是否核销完成,0否,1核销完成") |
| | | private Integer isUse; |
| | | /** |
| | | * 核销时间 |
| | | */ |
| | | @ApiModelProperty(value = "核销时间") |
| | | private LocalDateTime useDateTime; |
| | | /** |
| | | * 核销门店 |
| | | */ |
| | | @ApiModelProperty(value = "核销门店") |
| | | private Integer useMerchantId; |
| | | |
| | | @Override |
| | | protected Serializable pkVal() { |
| | | return this.id; |
| | | } |
| | | |
| | | } |
| | |
| | | */ |
| | | List<MallCommissionSettlementMonth> getNotCommissionSettlementList(String beginTime, String endTime); |
| | | |
| | | void commissionSettlemenMonth(); |
| | | void commissionSettlementMonth(); |
| | | |
| | | } |
New file |
| | |
| | | package com.sinata.rest.modular.mall.service; |
| | | |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpecLog; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品核销记录 服务类 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-22 |
| | | */ |
| | | public interface IMallOrderDetailGroupSpecLogService extends IService<MallOrderDetailGroupSpecLog> { |
| | | |
| | | } |
New file |
| | |
| | | package com.sinata.rest.modular.mall.service; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrderDetailGroupSpecGoods; |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpec; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品 服务类 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-04 |
| | | */ |
| | | public interface IMallOrderDetailGroupSpecService extends IService<MallOrderDetailGroupSpec> { |
| | | |
| | | List<VoMallOrderDetailGroupSpecGoods> getListByOrderNo(String orderNo, String orderDetailNo); |
| | | |
| | | } |
| | |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrderDetail; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrderPayInfo; |
| | | import com.sinata.rest.modular.mall.model.MallOrder; |
| | | import com.sinata.rest.modular.member.controller.common.body.BodyMallOrderDetailUse; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.concurrent.TimeoutException; |
| | | |
| | | /** |
| | | * <p> |
| | |
| | | */ |
| | | List<VoMallOrder> getOrderByUserIdList(Integer userId, Integer saleUserId, Integer state, Page page); |
| | | VoMallOrder getOrderByOrderNo(String orderNo); |
| | | List<VoMallOrder> getOrderListByOrderNo(String orderNo); |
| | | |
| | | /** |
| | | * 获取订单详细信息 |
| | |
| | | */ |
| | | List<VoMallOrder> getNotCommissionSettlementOrderList(); |
| | | |
| | | Boolean use(BodyMallOrderDetailUse body) throws TimeoutException; |
| | | |
| | | } |
| | |
| | | import cn.hutool.core.date.DatePattern; |
| | | import cn.hutool.core.date.DateTime; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.sinata.rest.modular.mall.dao.MallCommissionSettlementMonthMapper; |
| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void commissionSettlemenMonth() { |
| | | public void commissionSettlementMonth() { |
| | | // 上月时间 |
| | | DateTime lastMonth = DateUtil.offsetMonth(DateUtil.date(), -1); |
| | | String beginLastMonth = DateUtil.beginOfMonth(lastMonth).toString(); |
| | |
| | | for (MallCommissionSettlementMonth m : notCommissionSettlementList) { |
| | | for (MemUser u : memUserList) { |
| | | // 匹配用户城市 |
| | | if (u.getId().equals(m.getUserId())) { |
| | | m.setProvinceCode(u.getAgentProvinceCode()); |
| | | m.setCityCode(u.getAgentCityCode()); |
| | | m.setCountyCode(u.getAgentCountyCode()); |
| | | if (u.getId().equals(m.getUserId()) && StrUtil.isNotBlank(u.getCityCode())) { |
| | | m.setProvinceCode(u.getCityCode().substring(0, 2) + "0000"); |
| | | m.setCityCode(u.getCityCode().substring(0, 4) + "00"); |
| | | m.setCountyCode(u.getCityCode()); |
| | | break; |
| | | } |
| | | } |
| | |
| | | |
| | | // 获取销售人员关系 |
| | | MemUserRelation userRelation = memUserRelationService.getById(mallOrder.getSaleUserId()); |
| | | if (userRelation == null && StrUtil.isBlank(userRelation.getRelationPath())) { |
| | | if (userRelation == null || StrUtil.isBlank(userRelation.getRelationPath())) { |
| | | log.error("【核销订单-分佣】营销员团队关系{}错误!", userRelation); |
| | | return ApiUtils.returnNG("营销员团队关系错误!"); |
| | | } |
New file |
| | |
| | | package com.sinata.rest.modular.mall.service.impl; |
| | | |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpecLog; |
| | | import com.sinata.rest.modular.mall.dao.MallOrderDetailGroupSpecLogMapper; |
| | | import com.sinata.rest.modular.mall.service.IMallOrderDetailGroupSpecLogService; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品核销记录 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-22 |
| | | */ |
| | | @Service |
| | | public class MallOrderDetailGroupSpecLogServiceImpl extends ServiceImpl<MallOrderDetailGroupSpecLogMapper, MallOrderDetailGroupSpecLog> implements IMallOrderDetailGroupSpecLogService { |
| | | |
| | | } |
New file |
| | |
| | | package com.sinata.rest.modular.mall.service.impl; |
| | | |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrderDetailGroupSpecGoods; |
| | | import com.sinata.rest.modular.mall.dao.MallOrderDetailGroupSpecMapper; |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetailGroupSpec; |
| | | import com.sinata.rest.modular.mall.service.IMallOrderDetailGroupSpecService; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单详情套餐规格组商品 服务实现类 |
| | | * </p> |
| | | * |
| | | * @author goku |
| | | * @since 2023-11-04 |
| | | */ |
| | | @Service |
| | | public class MallOrderDetailGroupSpecServiceImpl extends ServiceImpl<MallOrderDetailGroupSpecMapper, MallOrderDetailGroupSpec> implements IMallOrderDetailGroupSpecService { |
| | | |
| | | @Override |
| | | public List<VoMallOrderDetailGroupSpecGoods> getListByOrderNo(String orderNo, String orderDetailNo) { |
| | | return this.baseMapper.getListByOrderNo(orderNo, orderDetailNo); |
| | | } |
| | | |
| | | } |
| | |
| | | package com.sinata.rest.modular.mall.service.impl; |
| | | |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.sinata.common.enums.EnumMemberGrade; |
| | |
| | | import com.sinata.common.enums.mall.EnumMallGoodsState; |
| | | import com.sinata.common.enums.mall.EnumMallOrderPrefix; |
| | | import com.sinata.common.enums.mall.EnumMallOrderState; |
| | | import com.sinata.common.model.GroupSpecGoodsSkuJsonVo; |
| | | import com.sinata.rest.common.ApiUtils; |
| | | import com.sinata.rest.core.util.DailyIncrementIdGenerator; |
| | | import com.sinata.rest.core.util.DateUtils; |
| | |
| | | import com.sinata.rest.modular.mall.dao.NoticeMapper; |
| | | import com.sinata.rest.modular.mall.model.*; |
| | | import com.sinata.rest.modular.mall.service.*; |
| | | import com.sinata.rest.modular.member.controller.common.body.BodyMallOrderDetailUse; |
| | | import com.sinata.rest.modular.member.model.MemMerchant; |
| | | import com.sinata.rest.modular.member.model.MemUser; |
| | | import com.sinata.rest.modular.member.model.MemUserBankDetail; |
| | |
| | | import com.sinata.rest.modular.system.model.AreaCity; |
| | | import com.sinata.rest.modular.system.service.ISystemSetService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeoutException; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | @Resource |
| | | private DailyIncrementIdGenerator dailyIncrementIdGenerator; |
| | | |
| | | @Resource |
| | | private IMallOrderDetailGroupSpecService mallOrderDetailGroupSpecService; |
| | | |
| | | @Resource |
| | | private IMallGroupSpecService mallGroupSpecService; |
| | | |
| | | @Resource |
| | | private IMallCommissionSettlementService mallCommissionSettlementService; |
| | | |
| | | @Override |
| | | public List<VoMallOrder> getOrderByUserIdList(Integer userId, Integer saleUserId, Integer state, Page page) { |
| | | return this.baseMapper.getOrderByUserIdList(userId, saleUserId, state, page); |
| | |
| | | |
| | | @Override |
| | | public VoMallOrder getOrderByOrderNo(String orderNo) { |
| | | return this.baseMapper.getOrderByOrderNo(orderNo); |
| | | List<VoMallOrder> voMallOrderList = this.baseMapper.getOrderListByOrderNo(orderNo); |
| | | return voMallOrderList.stream().findFirst().orElse(null); |
| | | } |
| | | |
| | | @Override |
| | | public List<VoMallOrder> getOrderListByOrderNo(String orderNo) { |
| | | return this.baseMapper.getOrderListByOrderNo(orderNo); |
| | | } |
| | | |
| | | @Override |
| | |
| | | MallOrder order = new MallOrder(); |
| | | order.setOrderMainNo(orderMain.getOrderNo()); |
| | | order.setSaleUserId(body.getSaleUserId()); |
| | | // 设置销售人员地区所属区域 |
| | | if (order.getSaleUserId() != null) { |
| | | MemUser saleUser = memUserService.getById(order.getSaleUserId()); |
| | | if (saleUser != null && StrUtil.isNotBlank(saleUser.getCityCode())) { |
| | | order.setCityCode(saleUser.getCityCode()); |
| | | } |
| | | } |
| | | order.setMerchantId(body.getMerchantId()); |
| | | order.setCityCode(body.getCityCode()); |
| | | order.setUserId(userId); |
| | |
| | | order.setNumber(body.getNumber()); |
| | | order.setState(EnumMallOrderState.WAIT_PAY.index); |
| | | // 生成订单编号 |
| | | order.setOrderNo(dailyIncrementIdGenerator.generateId()); |
| | | String generateOrderNo = dailyIncrementIdGenerator.generateId(); |
| | | order.setOrderNo(generateOrderNo); |
| | | |
| | | String provinceCode = null; |
| | | String cityCode = null; |
| | |
| | | // 套餐商品 |
| | | skuVoList.add(o); |
| | | |
| | | order.setOrderNo(EnumMallOrderPrefix.GOODS_GROUP_ORDER.index + order.getOrderNo()); |
| | | // 拼接套餐订单编号 |
| | | order.setOrderNo(EnumMallOrderPrefix.GOODS_GROUP_ORDER.index + generateOrderNo); |
| | | } |
| | | order.setOrderType(o.getGroupType()); |
| | | } |
| | |
| | | for(BodyMallOrderDetail boSku : body.getSkuList()) { |
| | | for (VoGoodsSku skuVo : skuVoList) { |
| | | if(skuVo.getId().intValue() == boSku.getSkuId() || skuVo.getSkuId().intValue() == boSku.getSkuId() ) { |
| | | // 设置订单详情编号 |
| | | String orderDetailNoStr = EnumMallOrderPrefix.ORDER_DETAIL.index + DateUtils.format(new Date(), "yyMMddHHmmSSS") + ToolUtil.getRandomNumber(6); |
| | | |
| | | // 判断商品状态是否正常 |
| | | if(skuVo.getState() != EnumMallGoodsState.FOR_SALE.index) { |
| | | return ApiUtils.returnNG(null, "商品:" + skuVo.getGoodsName() + "," + EnumMallGoodsState.getMarkByIndex(skuVo.getState())); |
| | |
| | | // 销售价 |
| | | sellCost = skuVo.getPriceMerchant(); |
| | | } |
| | | |
| | | // 查询套餐规格组ID |
| | | MallGroupSpec mallGroupSpec = mallGroupSpecService.getById(skuVo.getSpecIds()); |
| | | List<GroupSpecGoodsSkuJsonVo> groupSpecGoodsSkuJsonVoList = JSONUtil.parseArray(mallGroupSpec.getGoodsSkuJson()).toList(GroupSpecGoodsSkuJsonVo.class); |
| | | for (GroupSpecGoodsSkuJsonVo groupSpecGoodsSkuJsonVo : groupSpecGoodsSkuJsonVoList) { |
| | | // 对套餐规格组商品添加记录 |
| | | MallOrderDetailGroupSpec.builder() |
| | | .orderNo(order.getOrderNo()) |
| | | .orderDetailNo(orderDetailNoStr) |
| | | .goodsId(skuVo.getGoodsId()) |
| | | .skuId(skuVo.getId()) |
| | | .skuNum(boSku.getGoodsNum()) |
| | | .groupSpecId(mallGroupSpec.getId()) |
| | | .groupSpecGoodsId(groupSpecGoodsSkuJsonVo.getGoodsId()) |
| | | .groupSpecGoodsNum(groupSpecGoodsSkuJsonVo.getGoodsNum() * boSku.getGoodsNum()) |
| | | .build() |
| | | .insert(); |
| | | } |
| | | } |
| | | |
| | | // 总金额 |
| | |
| | | |
| | | // 订单详细信息 |
| | | MallOrderDetail orderDetail = new MallOrderDetail(); |
| | | orderDetail.setOrderDetailNo(EnumMallOrderPrefix.ORDER_DETAIL.index + DateUtils.format(new Date(), "yyMMddHHmmSSS") + ToolUtil.getRandomNumber(6)); |
| | | orderDetail.setOrderDetailNo(orderDetailNoStr); |
| | | orderDetail.setOrderNo(order.getOrderNo()); |
| | | orderDetail.setTotalMoney(totalMoney); |
| | | orderDetail.setGoodsId(skuVo.getGoodsId()); |
| | | orderDetail.setSkuId(skuVo.getSkuId()); |
| | | orderDetail.setSkuId(skuVo.getId()); |
| | | orderDetail.setGoodsSku(JSON.toJSONString(skuVo)); |
| | | orderDetail.setSellCost(sellCost); |
| | | orderDetail.setGoodsNum(boSku.getGoodsNum()); |
| | | orderDetail.setGoodsName(skuVo.getGoodsName()); |
| | | orderDetail.setGrepName(skuVo.getGrepName()); |
| | | orderDetail.setSpecGrep(skuVo.getSpecGrep()); |
| | | orderDetail.setSpecGrep(skuVo.getSpecIds()); |
| | | orderDetail.setGoodsImage(skuVo.getGoodsImage()); |
| | | orderDetail.setProvinceCode(StrUtil.isNotBlank(provinceCode) ? provinceCode : skuVo.getProvinceCode()); |
| | | orderDetail.setCityCode(StrUtil.isNotBlank(cityCode) ? cityCode : skuVo.getCityCode()); |
| | |
| | | public List<VoMallOrder> getNotCommissionSettlementOrderList() { |
| | | return this.baseMapper.getNotCommissionSettlementOrderList(); |
| | | } |
| | | |
| | | @Override |
| | | public Boolean use(BodyMallOrderDetailUse body) throws TimeoutException { |
| | | VoMallOrder order = this.getOrderByOrderNo(body.getOrderNo()); |
| | | if (Objects.isNull(order)) { |
| | | throw new IllegalArgumentException("错误的订单信息"); |
| | | } |
| | | if (!order.getMerchantId().equals(ThreadPoolUtil.getUserId()) && body.getOrderDetailGroupSpecId() == null) { |
| | | throw new IllegalArgumentException("该订单不是此门店的预约订单"); |
| | | } |
| | | Long nowTime = System.currentTimeMillis(); |
| | | if ((Objects.nonNull(order.getStartTime()) && Objects.nonNull(order.getEndTime()) |
| | | && (nowTime.compareTo(order.getEndTime().getTime()) > 0 |
| | | || nowTime.compareTo(order.getStartTime().getTime()) < 0))) { |
| | | throw new IllegalArgumentException("未到核销时间"); |
| | | } |
| | | if (!order.getState().equals(EnumMallOrderState.WAIT_CHECK.index) |
| | | && !order.getState().equals(EnumMallOrderState.USE.index)) { |
| | | throw new IllegalArgumentException("订单状态无法被核销"); |
| | | } |
| | | LambdaQueryWrapper<MallOrderDetail> queryWrapper2 = new LambdaQueryWrapper<>(); |
| | | queryWrapper2.eq(MallOrderDetail::getOrderDetailNo, body.getOrderDetailNo()); |
| | | MallOrderDetail orderDetail = orderDetailService.getOne(queryWrapper2); |
| | | Integer useNumber = 0; |
| | | |
| | | // 是否保存核销记录 |
| | | Boolean isSaveUse = false; |
| | | if (body.getOrderDetailGroupSpecId() != null) { |
| | | MallOrderDetailGroupSpec orderDetailGroupSpec = mallOrderDetailGroupSpecService.getById(body.getOrderDetailGroupSpecId()); |
| | | if (orderDetailGroupSpec == null) { |
| | | throw new TimeoutException("套餐规格组商品信息无效!"); |
| | | } |
| | | // 套餐规格组商品核销数 |
| | | Integer groupSpecUse = orderDetailGroupSpec.getGroupSpecUse() + body.getUseNum(); |
| | | orderDetailGroupSpec.setGroupSpecUse(groupSpecUse); |
| | | if (groupSpecUse.equals(orderDetailGroupSpec.getGroupSpecGoodsNum())) { |
| | | orderDetailGroupSpec.setIsUse(1); |
| | | } |
| | | orderDetailGroupSpec.setUseDateTime(new Date()); |
| | | orderDetailGroupSpec.setUseMerchantId(order.getMerchantId()); |
| | | // 更新信息 |
| | | orderDetailGroupSpec.updateById(); |
| | | |
| | | // 核销记录 |
| | | MallOrderDetailGroupSpecLog mallOrderDetailGroupSpecLog = BeanUtil.copyProperties(orderDetailGroupSpec, MallOrderDetailGroupSpecLog.class); |
| | | mallOrderDetailGroupSpecLog.setId(null); |
| | | mallOrderDetailGroupSpecLog.setGroupSpecUse(body.getUseNum()); |
| | | mallOrderDetailGroupSpecLog.setIsUse(1); |
| | | mallOrderDetailGroupSpecLog.insert(); |
| | | |
| | | int notUseCount = mallOrderDetailGroupSpecService.count( |
| | | Wrappers.<MallOrderDetailGroupSpec>query().lambda() |
| | | .eq(MallOrderDetailGroupSpec::getOrderDetailNo, body.getOrderDetailNo()) |
| | | .eq(MallOrderDetailGroupSpec::getSkuId, orderDetailGroupSpec.getSkuId()) |
| | | .eq(MallOrderDetailGroupSpec::getIsUse, 0) |
| | | ); |
| | | if (notUseCount == 0) { |
| | | // 已全部核销,可以保存核销记录 |
| | | isSaveUse = true; |
| | | |
| | | // 重新定义核销数量 |
| | | body.setUseNum(orderDetailGroupSpec.getSkuNum()); |
| | | useNumber = body.getUseNum(); |
| | | } |
| | | } else { |
| | | // 普通商品直接保存记录 |
| | | isSaveUse = true; |
| | | |
| | | useNumber = orderDetail.getUseNum() + body.getUseNum(); |
| | | if (useNumber > orderDetail.getGoodsNum()) { |
| | | throw new IllegalArgumentException("核销信息错误请检查"); |
| | | } |
| | | } |
| | | |
| | | if (isSaveUse) { |
| | | // 添加核销记录 |
| | | MallOrderDetailUse detailUse = new MallOrderDetailUse(); |
| | | BeanUtils.copyProperties(orderDetail, detailUse); |
| | | detailUse.setId(null); |
| | | detailUse.setUseNum(body.getUseNum()); |
| | | detailUse.setUseTime(new Date()); |
| | | mallOrderDetailUseService.save(detailUse); |
| | | } |
| | | |
| | | //添加核销时间 |
| | | MallOrderDetail updateOrder = new MallOrderDetail(); |
| | | updateOrder.setUseNum(useNumber); |
| | | updateOrder.setUseTime(new Date()); |
| | | UpdateWrapper<MallOrderDetail> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.eq("order_detail_no", orderDetail.getOrderDetailNo()); |
| | | orderDetailService.update(updateOrder, updateWrapper); |
| | | |
| | | LambdaQueryWrapper<MallOrderDetail> orderWrapper = new LambdaQueryWrapper<>(); |
| | | orderWrapper.eq(MallOrderDetail::getOrderNo, body.getOrderNo()); |
| | | orderWrapper.last("and use_num <> goods_num"); |
| | | List<MallOrderDetail> detailList = orderDetailService.list(orderWrapper); |
| | | if (detailList.size() == 0) { |
| | | //修改订单状态 |
| | | MallOrder mallOrder = new MallOrder(); |
| | | mallOrder.setState(EnumMallOrderState.SUCCESS.index); |
| | | mallOrder.setOrderNo(orderDetail.getOrderNo()); |
| | | this.updateById(mallOrder); |
| | | |
| | | // 核销订单-分佣 |
| | | mallCommissionSettlementService.commissionSettlement(mallOrder.getOrderNo()); |
| | | } else { |
| | | //修改订单状态 |
| | | MallOrder mallOrder = new MallOrder(); |
| | | mallOrder.setState(EnumMallOrderState.USE.index); |
| | | mallOrder.setOrderNo(orderDetail.getOrderNo()); |
| | | this.updateById(mallOrder); |
| | | } |
| | | |
| | | //插入预约通知 |
| | | if(Objects.nonNull(order.getMerchantId())){ |
| | | noticeMapper.addMerchantNotice(order.getMerchantId(),2,"您有新的核销订单"); |
| | | } |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | package com.sinata.rest.modular.member.controller; |
| | | |
| | | import cn.hutool.core.date.DateUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | |
| | | user.setNickName(info.nickname); |
| | | user.setSex(info.gender); |
| | | user.setBirthday(info.birthday); |
| | | if (StrUtil.isNotBlank(info.getCityCode())) { |
| | | String province = StrUtil.sub(info.getCityCode(), 0, 2) + "0000"; |
| | | String city = StrUtil.sub(info.getCityCode(), 0, 4) + "00"; |
| | | String county = info.getCityCode(); |
| | | |
| | | user.setCityCode(info.getCityCode()); |
| | | user.setAgentProvinceCode(province); |
| | | user.setAgentCityCode(city); |
| | | user.setAgentCountyCode(county); |
| | | } |
| | | // user.setSignature(info.signature); |
| | | // user.setAddress(info.address); |
| | | userService.saveOrUpdate(user); |
New file |
| | |
| | | package com.sinata.rest.modular.member.controller.common.body; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "请求-订单核销") |
| | | public class BodyMallOrderDetailUse { |
| | | |
| | | @TableField("order_no") |
| | | @ApiModelProperty(value = "子订单编号") |
| | | private String orderNo; |
| | | |
| | | @ApiModelProperty(value = "订单详细编号") |
| | | private String orderDetailNo; |
| | | |
| | | @ApiModelProperty(value = "核销数量") |
| | | private Integer useNum; |
| | | |
| | | @ApiModelProperty(value = "套餐规格商品ID") |
| | | private Integer orderDetailGroupSpecId; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "生日") |
| | | public String birthday; |
| | | |
| | | /* @ApiModelProperty(value = "个性签名") |
| | | public String signature; |
| | | @ApiModelProperty(value = "注册城市") |
| | | public String cityCode; |
| | | |
| | | @ApiModelProperty(value = "收货地址") |
| | | /* @ApiModelProperty(value = "收货地址") |
| | | public String address; |
| | | |
| | | @ApiModelProperty(value = "收款码地址") |
| | |
| | | ) |
| | | </select> |
| | | |
| | | |
| | | |
| | | <select id="getMerchantOrderList" resultType="com.sinata.rest.modular.mall.controller.vo.VoMallOrder"> |
| | | SELECT |
| | | mo.order_no,mo.state,ms.goods_name,mo.goods_money,mo.use_user_id,md.goods_image goodsImage,md.use_time |
| | | mo.*, |
| | | md.goods_image goodsImage, md.use_time, |
| | | ms.goods_name |
| | | FROM |
| | | mall_order mo |
| | | Left JOIN `mall_order_detail` md ON md.order_no = mo.order_no |
| | | Left JOIN mall_goods ms ON ms.id = md.goods_id |
| | | mall_order mo |
| | | Left JOIN `mall_order_detail` md ON md.order_no = mo.order_no |
| | | Left JOIN mall_goods ms ON ms.id = md.goods_id |
| | | WHERE mo.is_delete = 0 and mo.state in (1,2,3) |
| | | <if test="merchantId != null"> |
| | | and (mo.merchant_id = #{merchantId}) |
| | |
| | | // .build().insert(); |
| | | // } |
| | | // } else { |
| | | // 添加邀请关系 |
| | | MemUserRelation.builder() |
| | | .id(user.getId()) |
| | | .parentId(shareUserRelation.getId()) |
| | | .relationPath(shareUserRelation.getRelationPath() + "/" + user.getId()) |
| | | .build().insert(); |
| | | // 添加更新用户关系 |
| | | memUserRelationService.saveOrUpdate( |
| | | MemUserRelation.builder() |
| | | .id(user.getId()) |
| | | .parentId(shareUserRelation.getId()) |
| | | .relationPath(shareUserRelation.getRelationPath() + "/" + user.getId()) |
| | | .build() |
| | | ); |
| | | // } |
| | | |
| | | // 订单材料受赠人,0未申请入司 |
| | |
| | | package com.sinata.rest.modular.member.shop; |
| | | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import cn.hutool.core.bean.BeanUtil; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.sinata.common.enums.EnumMemberGrade; |
| | | import com.sinata.common.enums.mall.EnumMallOrderState; |
| | | import com.sinata.rest.common.ApiUtils; |
| | | import com.sinata.rest.modular.auth.util.ThreadPoolUtil; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrder; |
| | | import com.sinata.rest.modular.mall.controller.vo.VoMallOrderDetail; |
| | | import com.sinata.rest.modular.mall.dao.NoticeMapper; |
| | | import com.sinata.rest.modular.mall.model.MallOrder; |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetail; |
| | | import com.sinata.rest.modular.mall.model.MallOrderDetailUse; |
| | | import com.sinata.rest.modular.mall.service.IMallCommissionSettlementService; |
| | | import com.sinata.rest.modular.mall.service.IMallOrderDetailService; |
| | | import com.sinata.rest.modular.mall.service.IMallOrderService; |
| | | import com.sinata.rest.modular.member.model.MemUser; |
| | | import com.sinata.rest.modular.member.model.MemUserRelation; |
| | | import com.sinata.rest.modular.member.controller.common.body.BodyMallOrderDetailUse; |
| | | import com.sinata.rest.modular.member.service.IMallOrderDetailUseService; |
| | | import com.sinata.rest.modular.member.service.IMemMerchantService; |
| | | import com.sinata.rest.modular.member.service.IMemUserRelationService; |
| | |
| | | import io.swagger.annotations.ApiImplicitParams; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.*; |
| | | import java.util.List; |
| | | |
| | | @Slf4j |
| | | @RestController |
| | |
| | | @GetMapping(value = "/detail") |
| | | @ApiOperation(value = "获取订单详细", notes = "获取订单详细", response = VoMallOrder.class) |
| | | @ApiImplicitParams({ |
| | | @ApiImplicitParam(name = "orderNo", value = "订单编号", defaultValue = "1", dataType = "String", paramType = "query", required = true), |
| | | @ApiImplicitParam(name = "orderNo", value = "订单编号", dataType = "String", paramType = "query", required = true), |
| | | }) |
| | | public Object detail(String orderNo) { |
| | | VoMallOrder order = orderService.getOrderByOrderNo(orderNo); |
| | |
| | | // @PostMapping(value = "/userTest") |
| | | // @ApiOperation(value = "订单-核销分佣test") |
| | | // @ApiImplicitParams({ |
| | | // @ApiImplicitParam(name = "orderNo", value = "订单编号", defaultValue = "1", dataType = "String", paramType = "query", required = true), |
| | | // @ApiImplicitParam(name = "orderNo", value = "订单编号", dataType = "String", paramType = "query", required = true), |
| | | // }) |
| | | // public Object userTest(String orderNo) { |
| | | // // 核销订单-分佣 |
| | |
| | | // } |
| | | |
| | | @PostMapping(value = "/use") |
| | | @ApiOperation(value = "订单核销", notes = "获取订单详细", response = VoMallOrder.class) |
| | | public Object use(@RequestBody MallOrderDetailUse useDetail) { |
| | | VoMallOrder order = orderService.getOrderByOrderNo(useDetail.getOrderNo()); |
| | | if (Objects.isNull(order)) { |
| | | throw new IllegalArgumentException("错误的订单信息"); |
| | | @ApiOperation(value = "订单核销", notes = "订单核销", response = VoMallOrder.class) |
| | | public Object use(@RequestBody MallOrderDetailUse orderDetailUse) { |
| | | BodyMallOrderDetailUse body = BeanUtil.toBean(orderDetailUse, BodyMallOrderDetailUse.class); |
| | | try { |
| | | return orderService.use(body); |
| | | } catch (Exception e) { |
| | | return ApiUtils.returnNG(null, e.getMessage()); |
| | | } |
| | | if(!order.getMerchantId().equals(ThreadPoolUtil.getUserId())){ |
| | | throw new IllegalArgumentException("该订单不是此门店的预约订单"); |
| | | } |
| | | Long nowTime = System.currentTimeMillis(); |
| | | if ((Objects.nonNull(order.getStartTime()) && Objects.nonNull(order.getEndTime()) |
| | | && (nowTime.compareTo(order.getEndTime().getTime()) > 0 |
| | | || nowTime.compareTo(order.getStartTime().getTime()) < 0))) { |
| | | throw new IllegalArgumentException("未到核销时间"); |
| | | } |
| | | if (!order.getState().equals(EnumMallOrderState.WAIT_CHECK.index) |
| | | && !order.getState().equals(EnumMallOrderState.USE.index)) { |
| | | throw new IllegalArgumentException("订单状态无法被核销"); |
| | | } |
| | | LambdaQueryWrapper<MallOrderDetail> queryWrapper2 = new LambdaQueryWrapper<>(); |
| | | queryWrapper2.eq(MallOrderDetail::getOrderDetailNo, useDetail.getOrderDetailNo()); |
| | | MallOrderDetail orderDetail = orderDetailService.getOne(queryWrapper2); |
| | | Integer useNumber = orderDetail.getUseNum() + useDetail.getUseNum(); |
| | | if (useNumber > orderDetail.getGoodsNum()) { |
| | | throw new IllegalArgumentException("核销信息错误请检查"); |
| | | } |
| | | //添加核销记录 |
| | | MallOrderDetailUse detailUse = new MallOrderDetailUse(); |
| | | BeanUtils.copyProperties(orderDetail, detailUse); |
| | | detailUse.setId(null); |
| | | detailUse.setUseNum(useDetail.getUseNum()); |
| | | detailUse.setUseTime(new Date()); |
| | | mallOrderDetailUseService.save(detailUse); |
| | | //添加核销时间 |
| | | MallOrderDetail updateOrder = new MallOrderDetail(); |
| | | updateOrder.setUseNum(useNumber); |
| | | updateOrder.setUseTime(new Date()); |
| | | UpdateWrapper<MallOrderDetail> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.eq("order_detail_no", orderDetail.getOrderDetailNo()); |
| | | orderDetailService.update(updateOrder, updateWrapper); |
| | | } |
| | | |
| | | LambdaQueryWrapper<MallOrderDetail> orderWrapper = new LambdaQueryWrapper<>(); |
| | | orderWrapper.eq(MallOrderDetail::getOrderNo, useDetail.getOrderNo()); |
| | | orderWrapper.last("and use_num <> goods_num"); |
| | | List<MallOrderDetail> detailList = orderDetailService.list(orderWrapper); |
| | | if (detailList.size() == 0) { |
| | | //修改订单状态 |
| | | MallOrder mallOrder = new MallOrder(); |
| | | mallOrder.setState(EnumMallOrderState.SUCCESS.index); |
| | | mallOrder.setOrderNo(orderDetail.getOrderNo()); |
| | | orderService.updateById(mallOrder); |
| | | |
| | | // 核销订单-分佣 |
| | | mallCommissionSettlementService.commissionSettlement(mallOrder.getOrderNo()); |
| | | } else { |
| | | //修改订单状态 |
| | | MallOrder mallOrder = new MallOrder(); |
| | | mallOrder.setState(EnumMallOrderState.USE.index); |
| | | mallOrder.setOrderNo(orderDetail.getOrderNo()); |
| | | orderService.updateById(mallOrder); |
| | | @PostMapping(value = "/useGroup") |
| | | @ApiOperation(value = "套餐订单核销", notes = "套餐订单核销") |
| | | public Object useGroup(@RequestBody BodyMallOrderDetailUse body) { |
| | | try { |
| | | return orderService.use(body); |
| | | } catch (Exception e) { |
| | | return ApiUtils.returnNG(null, e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | //插入预约通知 |
| | | if(Objects.nonNull(order.getMerchantId())){ |
| | | noticeMapper.addMerchantNotice(order.getMerchantId(),2,"您有新的核销订单"); |
| | | @PostMapping(value = "/useGroupBatch") |
| | | @ApiOperation(value = "套餐订单核销(批量)", notes = "套餐订单核销(批量)") |
| | | public Object useGroupBatch(@RequestBody List<BodyMallOrderDetailUse> list) { |
| | | try { |
| | | Boolean use = true; |
| | | for (BodyMallOrderDetailUse body : list) { |
| | | if (use) { |
| | | use = orderService.use(body); |
| | | } |
| | | } |
| | | return use; |
| | | } catch (Exception e) { |
| | | return ApiUtils.returnNG(null, e.getMessage()); |
| | | } |
| | | return Boolean.TRUE; |
| | | } |
| | | |
| | | @PostMapping(value = "/useList") |
| | |
| | | public class EntityGeneratorGoku { |
| | | |
| | | // 代码生成输出目录 |
| | | public static final String outputDir = "D:\\work\\IdeaProjects\\project\\meiya-parent\\meiya-rest\\src\\main\\java"; |
| | | public static final String outputDir = "D:\\IdeaProjects\\demo\\springboot-demo\\meiya-parent\\meiya-rest\\src\\main\\java"; |
| | | // 数据库配置 |
| | | public static final String dbUrl = "jdbc:mysql://140.210.218.57:8306/meiyadb-dev?characterEncoding=utf8&serverTimezone=GMT%2B8"; |
| | | public static final String dbUsername = "root"; |
| | |
| | | // "mall_goods_set", |
| | | // "mem_user_login", |
| | | // "system_notice", |
| | | "mall_group_spec", |
| | | // "mall_group_spec", |
| | | // "mall_order_detail_group_spec", |
| | | "mall_order_detail_group_spec_log", |
| | | }; |
| | | |
| | | /*************** com.sinata.modular.code.controller.CodeController 获取全部表数组 *************************** |
| | |
| | | <#NameCon id="userPhone" name="下单用户手机" /> |
| | | </div> |
| | | <div class="col-sm-3"> |
| | | <#NameCon id="userNickname" name="下单用户昵称" /> |
| | | <#NameCon id="userNickname" name="客户姓名" /> |
| | | </div> |
| | | </div> |
| | | <div class="hidden-xs" id="MallOrderTableToolbar" role="group"> |
| | |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="col-sm-4"> |
| | | <label class="col-sm-4 control-label">下单用户昵称</label> |
| | | <label class="col-sm-4 control-label">客户姓名</label> |
| | | <div class="col-sm-8 form-control-static"> |
| | | ${item.userNickname} |
| | | </div> |
| | |
| | | {title: '商品名称', field: 'goodsName', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '规格组', field: 'grepName', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '数量', field: 'goodsNum', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '下单用户昵称', field: 'userNickname', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '客户姓名', field: 'userNickname', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '下单用户手机', field: 'userPhone', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '下单门店', field: 'merchantName', visible: true, align: 'center', valign: 'middle'}, |
| | | {title: '到店核销次数', field: 'useNum', visible: true, align: 'center', valign: 'middle'}, |