44 files modified
	
		
		1 files added
	
	
 
	
	
	
	
	
	
	
	
 |  |  | 
 |  |  | @Getter | 
 |  |  | public enum DataDictionaryEnum { | 
 |  |  |     /** | 
 |  |  |      * 星级补贴百分比 | 
 |  |  |      */ | 
 |  |  |     PERK_AGENT_ACHIEVE_PERCENT("PERK_SET","PERK_AGENT_ACHIEVE_PERCENT"), | 
 |  |  |     /** | 
 |  |  |      * 星级补贴总数 | 
 |  |  |      */ | 
 |  |  |     PERK_AGENT_ACHIEVE_TOTAL("PERK_SET","PERK_AGENT_ACHIEVE_TOTAL"), | 
 |  |  |     /** | 
 |  |  |      * 贡献点设置-购买商品获得 | 
 |  |  |      */ | 
 |  |  |     STAR_GET("PERK_SET","STAR_GET"), | 
 
 |  |  | 
 |  |  | import cc.mrbird.febs.common.controller.BaseController; | 
 |  |  | import cc.mrbird.febs.common.entity.FebsResponse; | 
 |  |  | import cc.mrbird.febs.common.entity.QueryRequest; | 
 |  |  | import cc.mrbird.febs.common.utils.excl.ExcelSheetPO; | 
 |  |  | import cc.mrbird.febs.common.utils.excl.ExcelUtil; | 
 |  |  | import cc.mrbird.febs.common.utils.excl.ExcelVersion; | 
 |  |  | import cc.mrbird.febs.common.utils.excl.ResponseHeadUtil; | 
 |  |  | import cc.mrbird.febs.mall.dto.*; | 
 |  |  | import cc.mrbird.febs.mall.entity.*; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallMemberMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallMemberWalletMapper; | 
 |  |  | import cc.mrbird.febs.mall.service.IAdminMallMemberService; | 
 |  |  | import cc.mrbird.febs.mall.service.IApiMallMemberService; | 
 |  |  | import cc.mrbird.febs.mall.vo.AdminAgentLevelOptionTreeVo; | 
 |  |  | import cn.hutool.core.collection.CollUtil; | 
 |  |  | import cn.hutool.core.date.DateUtil; | 
 |  |  | import cn.hutool.core.util.ObjectUtil; | 
 |  |  | import cn.hutool.core.util.StrUtil; | 
 |  |  | import lombok.RequiredArgsConstructor; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.ibatis.annotations.Param; | 
 |  |  | 
 |  |  | import org.springframework.validation.annotation.Validated; | 
 |  |  | import org.springframework.web.bind.annotation.*; | 
 |  |  |  | 
 |  |  | import javax.servlet.http.HttpServletResponse; | 
 |  |  | import javax.validation.Valid; | 
 |  |  | import javax.validation.constraints.NotNull; | 
 |  |  | import java.io.IOException; | 
 |  |  | import java.io.OutputStream; | 
 |  |  | import java.net.URLEncoder; | 
 |  |  | import java.text.DecimalFormat; | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.List; | 
 |  |  | import java.util.Map; | 
 |  |  |  | 
 |  |  | 
 |  |  | public class AdminMallMemberController extends BaseController { | 
 |  |  |  | 
 |  |  |     private final IAdminMallMemberService mallMemberService; | 
 |  |  |     private final MallMemberWalletMapper mallMemberWalletMapper; | 
 |  |  |     private final MallMemberMapper mallMemberMapper; | 
 |  |  |     private final IApiMallMemberService apiMallMemberService; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |     @ControllerEndpoint(operation = "会员列表---开启", exceptionMessage = "开启失败") | 
 |  |  |     public FebsResponse openAccount(@NotNull(message = "{required}") @PathVariable Long id) { | 
 |  |  |         return mallMemberService.openAccount(id); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 会员列表---禁止 | 
 |  |  |      * | 
 |  |  |      * @param id | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @GetMapping("outsideWithYes/{id}") | 
 |  |  |     @ControllerEndpoint(operation = "会员列表---禁止", exceptionMessage = "禁止失败") | 
 |  |  |     public FebsResponse outsideWithYes(@NotNull(message = "{required}") @PathVariable Long id) { | 
 |  |  |         return mallMemberService.outsideWithType(id,1); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 会员列表---开启 | 
 |  |  |      * | 
 |  |  |      * @param id | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @GetMapping("outsideWithNo/{id}") | 
 |  |  |     @ControllerEndpoint(operation = "会员列表---开启", exceptionMessage = "开启失败") | 
 |  |  |     public FebsResponse outsideWithNo(@NotNull(message = "{required}") @PathVariable Long id) { | 
 |  |  |         return mallMemberService.outsideWithType(id,2); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |     @ControllerEndpoint(operation = "会员提现-同意", exceptionMessage = "操作失败") | 
 |  |  |     public FebsResponse chargeAgree(@NotNull(message = "{required}") @PathVariable Long id) { | 
 |  |  |         return mallMemberService.chargeAgree(id); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 会员提现-同意 | 
 |  |  |      */ | 
 |  |  |     @PostMapping("chargeAgreeWithType") | 
 |  |  |     @ControllerEndpoint(operation = " 会员提现-同意", exceptionMessage = "操作失败") | 
 |  |  |     public FebsResponse chargeAgreeWithType(@Valid MallMemberWithdraw mallMemberWithdraw) { | 
 |  |  |         return mallMemberService.chargeAgreeWithType(mallMemberWithdraw); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  | 
 |  |  |         return new FebsResponse().success().data(dataTable); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @GetMapping("exportMember") | 
 |  |  |     @ControllerEndpoint(operation = "会员列表", exceptionMessage = "导出失败") | 
 |  |  |     public FebsResponse exportMemberList(MallMember mallMember, HttpServletResponse response) throws IOException { | 
 |  |  |  | 
 |  |  |         List<ExcelSheetPO> res = new ArrayList<>(); | 
 |  |  |         ExcelSheetPO orderSheet = new ExcelSheetPO(); | 
 |  |  |         String title = "会员列表"; | 
 |  |  |         orderSheet.setSheetName(title); | 
 |  |  |         orderSheet.setTitle(title); | 
 |  |  |         String[] header = {"登录账户", "手机号码", "名称", "余额", "现金积分", "贡献点", "补贴额度", "凭证", "凭证现金"}; | 
 |  |  |         orderSheet.setHeaders(header); | 
 |  |  |  | 
 |  |  |         QueryRequest request = new QueryRequest(); | 
 |  |  |         request.setPageNum(1); | 
 |  |  |         request.setPageSize(9999); | 
 |  |  |         List<MallMember> dataList = mallMemberMapper.selectList(null); | 
 |  |  |         List<List<Object>> list = new ArrayList<>(); | 
 |  |  |         if (dataList.size() > 0) { | 
 |  |  |             for (MallMember item : dataList) { | 
 |  |  |                 List<Object> temp = new ArrayList<>(); | 
 |  |  |                 temp.add(item.getAccountLogin()); | 
 |  |  |                 temp.add(item.getPhone()); | 
 |  |  |                 temp.add(item.getName()); | 
 |  |  |  | 
 |  |  |                 Long memberId = item.getId(); | 
 |  |  |                 MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(memberId); | 
 |  |  |                 if(ObjectUtil.isNotNull(mallMemberWallet)){ | 
 |  |  |                     temp.add(mallMemberWallet.getBalance()); | 
 |  |  |                     temp.add(mallMemberWallet.getPrizeScore()); | 
 |  |  |                     temp.add(mallMemberWallet.getStar()); | 
 |  |  |                     temp.add(mallMemberWallet.getTotalScore()); | 
 |  |  |                     temp.add(mallMemberWallet.getVoucherCnt()); | 
 |  |  |                     temp.add(mallMemberWallet.getVoucherAmount()); | 
 |  |  |                 } | 
 |  |  |                 list.add(temp); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         orderSheet.setDataList(list); | 
 |  |  |         res.add(orderSheet); | 
 |  |  |         response = ResponseHeadUtil.setExcelHead(response); | 
 |  |  |         response.setHeader("Content-Disposition", | 
 |  |  |                 "attachment;filename=" + URLEncoder.encode(title + DateUtil.format(new Date(), "yyyyMMDDHHmmss") + ".xlsx".trim(), "UTF-8")); | 
 |  |  |         OutputStream os = response.getOutputStream(); | 
 |  |  |         ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, true); | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  | import cc.mrbird.febs.mall.entity.*; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallExpressInfoMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallMemberMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallOrderRefundOperationMapper; | 
 |  |  | import cc.mrbird.febs.mall.service.IAdminMallGoodsService; | 
 |  |  | import cc.mrbird.febs.mall.service.IAdminMallOrderService; | 
 |  |  | 
 |  |  |     private final IAdminMallOrderService adminMallOrderService; | 
 |  |  |     private final MallExpressInfoMapper mallExpressInfoMapper; | 
 |  |  |     private final MallMemberMapper mallMemberMapper; | 
 |  |  |     private final MallOrderInfoMapper mallOrderInfoMapper; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 订单列表 | 
 |  |  | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @GetMapping("exportOrderListAll") | 
 |  |  |     @ControllerEndpoint(operation = "订单列表", exceptionMessage = "导出失败") | 
 |  |  |     public FebsResponse exportOrderListAll(MallOrderInfo mallOrderInfo, HttpServletResponse response) throws IOException { | 
 |  |  |  | 
 |  |  |         List<ExcelSheetPO> res = new ArrayList<>(); | 
 |  |  |         ExcelSheetPO orderSheet = new ExcelSheetPO(); | 
 |  |  |         String title = "订单列表"; | 
 |  |  |         orderSheet.setSheetName(title); | 
 |  |  |         orderSheet.setTitle(title); | 
 |  |  |         String[] header = {"订单编号", "登录账户", "购买人", "手机号码", "订单金额", "状态"}; | 
 |  |  |         orderSheet.setHeaders(header); | 
 |  |  |  | 
 |  |  |         QueryRequest request = new QueryRequest(); | 
 |  |  |         request.setPageNum(1); | 
 |  |  |         request.setPageSize(9999); | 
 |  |  |         List<MallOrderInfo> dataList = mallOrderInfoMapper.selectList(null); | 
 |  |  |         List<List<Object>> list = new ArrayList<>(); | 
 |  |  |         if (dataList.size() > 0) { | 
 |  |  |             for (MallOrderInfo item : dataList) { | 
 |  |  |                 List<Object> temp = new ArrayList<>(); | 
 |  |  |                 temp.add(item.getOrderNo()); | 
 |  |  |                 temp.add(mallMemberMapper.selectById(item.getMemberId()).getAccountLogin()); | 
 |  |  |                 temp.add(mallMemberMapper.selectById(item.getMemberId()).getName()); | 
 |  |  |                 temp.add(mallMemberMapper.selectById(item.getMemberId()).getPhone()); | 
 |  |  |                 temp.add(item.getAmount()); | 
 |  |  |                 switch (item.getStatus()) { | 
 |  |  |                     case 1: | 
 |  |  |                         temp.add("待支付"); | 
 |  |  |                         break; | 
 |  |  |                     case 2: | 
 |  |  |                         temp.add("待发货"); | 
 |  |  |                         break; | 
 |  |  |                     case 3: | 
 |  |  |                         temp.add("待收货"); | 
 |  |  |                         break; | 
 |  |  |                     case 4: | 
 |  |  |                         temp.add("已完成"); | 
 |  |  |                         break; | 
 |  |  |                     case 5: | 
 |  |  |                         temp.add("退款中"); | 
 |  |  |                         break; | 
 |  |  |                     case 6: | 
 |  |  |                         temp.add("已退款"); | 
 |  |  |                         break; | 
 |  |  |                     case 7: | 
 |  |  |                         temp.add("已取消"); | 
 |  |  |                         break; | 
 |  |  |                     default: | 
 |  |  |                 } | 
 |  |  |                 list.add(temp); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         orderSheet.setDataList(list); | 
 |  |  |         res.add(orderSheet); | 
 |  |  |         response = ResponseHeadUtil.setExcelHead(response); | 
 |  |  |         response.setHeader("Content-Disposition", | 
 |  |  |                 "attachment;filename=" + URLEncoder.encode(title + DateUtil.format(new Date(), "yyyyMMDDHHmmss") + ".xlsx".trim(), "UTF-8")); | 
 |  |  |         OutputStream os = response.getOutputStream(); | 
 |  |  |         ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, true); | 
 |  |  |         return null; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping(value = "/importDeliver") | 
 |  |  |     @ControllerEndpoint(operation = "导入发货", exceptionMessage = "导入失败") | 
 |  |  |     public FebsResponse importDeliver(@RequestBody MultipartFile file) throws IOException { | 
 
 |  |  | 
 |  |  |                 DataDictionaryEnum.AGENT_PERK.getType(), | 
 |  |  |                 DataDictionaryEnum.AGENT_PERK.getCode(), | 
 |  |  |                 hlmBasicPerkDto.getAgentPerk()); | 
 |  |  |         commonService.updateDataDic( | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getType(), | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getCode(), | 
 |  |  |                 hlmBasicPerkDto.getPerkAgentAchieveTotal()); | 
 |  |  |         commonService.updateDataDic( | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_PERCENT.getType(), | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_PERCENT.getCode(), | 
 |  |  |                 hlmBasicPerkDto.getPerkAgentAchievePercent()); | 
 |  |  |         return new FebsResponse().success(); | 
 |  |  |     } | 
 |  |  |  | 
 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 提现列表-付款方式 | 
 |  |  |      * @param id | 
 |  |  |      * @param model | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     @GetMapping("chargeFlowListType/{id}") | 
 |  |  |     @RequiresPermissions("chargeFlowListType:update") | 
 |  |  |     public String chargeFlowListType(@PathVariable long id, Model model) { | 
 |  |  |         AdminMallMemberPaymentVo data = new AdminMallMemberPaymentVo(); | 
 |  |  |         data.setId(id); | 
 |  |  |         model.addAttribute("chargeUpdateInfo", data); | 
 |  |  |         return FebsUtil.view("modules/mallMember/chargeFlowListType"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 代理列表 | 
 |  |  |      * @return | 
 |  |  |      */ | 
 
 |  |  | 
 |  |  |             String agentPerk = ObjectUtil.isEmpty(agentPerkDic.getValue()) ? "0" : agentPerkDic.getValue(); | 
 |  |  |             hlmBasicPerkDto.setAgentPerk(agentPerk); | 
 |  |  |         } | 
 |  |  |         DataDictionaryCustom perkAgentAchieveTotalDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getType(), | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getCode()); | 
 |  |  |         if (perkAgentAchieveTotalDic != null) { | 
 |  |  |             String perkAgentAchieveTotal = ObjectUtil.isEmpty(perkAgentAchieveTotalDic.getValue()) ? "0" : perkAgentAchieveTotalDic.getValue(); | 
 |  |  |             hlmBasicPerkDto.setPerkAgentAchieveTotal(perkAgentAchieveTotal); | 
 |  |  |         } | 
 |  |  |         DataDictionaryCustom perkAgentAchievePercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_PERCENT.getType(), | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_PERCENT.getCode()); | 
 |  |  |         if (perkAgentAchievePercentDic != null) { | 
 |  |  |             String perkAgentAchievePercent = ObjectUtil.isEmpty(perkAgentAchievePercentDic.getValue()) ? "0" : perkAgentAchievePercentDic.getValue(); | 
 |  |  |             hlmBasicPerkDto.setPerkAgentAchievePercent(perkAgentAchievePercent); | 
 |  |  |         } | 
 |  |  |         model.addAttribute("hlmBasicPerk", hlmBasicPerkDto); | 
 |  |  |         return FebsUtil.view("modules/system/hlmBasicPerk"); | 
 |  |  |     } | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     private String account; | 
 |  |  |  | 
 |  |  |     private String level; | 
 
 |  |  | 
 |  |  |      * 基础补贴-代理商补贴 | 
 |  |  |      */ | 
 |  |  |     private String agentPerk; | 
 |  |  |     /** | 
 |  |  |      * 星级补贴总数 | 
 |  |  |      */ | 
 |  |  |     private String perkAgentAchieveTotal; | 
 |  |  |     /** | 
 |  |  |      * 星级补贴百分比 | 
 |  |  |      */ | 
 |  |  |     private String perkAgentAchievePercent; | 
 |  |  |  | 
 |  |  | } | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     private Integer orderType; | 
 |  |  |  | 
 |  |  |     private String startTime; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     private String phone; | 
 |  |  |  | 
 |  |  |     private Integer status; | 
 
 |  |  | 
 |  |  | @ApiModel(value = "MoneyFlowListDto", description = "接收参数类") | 
 |  |  | public class MoneyFlowListDto { | 
 |  |  |  | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     private String phone; | 
 
 |  |  | 
 |  |  | public class RegisterDto { | 
 |  |  |  | 
 |  |  |     @NotBlank(message = "账号不能为空") | 
 |  |  |     @ApiModelProperty(value = "账号", example = "hjsj") | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     @NotBlank(message = "手机号不能为空") | 
 |  |  |     @ApiModelProperty(value = "手机号", example = "15773001234") | 
 |  |  |     private String account; | 
 |  |  |  | 
 
 |  |  | 
 |  |  | public class MallMember extends BaseEntity { | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 登录账号 | 
 |  |  |      */ | 
 |  |  |     private String accountLogin; | 
 |  |  |     /** | 
 |  |  |      * 姓名 | 
 |  |  |      */ | 
 |  |  |     private String name; | 
 |  |  | 
 |  |  |  | 
 |  |  |     //内转标识 1:开启 2:关闭 | 
 |  |  |     private Integer insideWith; | 
 |  |  |  | 
 |  |  |     //提现开关 1:开启 2:关闭 | 
 |  |  |     private Integer outsideWith; | 
 |  |  | } | 
 
 |  |  | 
 |  |  | package cc.mrbird.febs.mall.entity; | 
 |  |  |  | 
 |  |  | import cc.mrbird.febs.common.entity.BaseEntity; | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableField; | 
 |  |  | import com.baomidou.mybatisplus.annotation.TableName; | 
 |  |  | import lombok.Data; | 
 |  |  |  | 
 |  |  | 
 |  |  |     private String withdrawNo; | 
 |  |  |      | 
 |  |  |     private String remark; | 
 |  |  |     /** | 
 |  |  |      * 绿色凭证 | 
 |  |  |      */ | 
 |  |  |     @TableField(exist = false) | 
 |  |  |     private String agreeType; | 
 |  |  | } | 
 
 |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     @TableField(exist = false) | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     @TableField(exist = false) | 
 |  |  |     private String phone; | 
 |  |  | } | 
 
 |  |  | 
 |  |  |     List<MallMember> selectByRole(@Param("type") int type, @Param("state")int state); | 
 |  |  |  | 
 |  |  |     List<MallMember> selectByLevel( @Param("level")String type); | 
 |  |  |  | 
 |  |  |     MallMember selectByAccountLogin(@Param("accountLogin")String accountLogin); | 
 |  |  |  | 
 |  |  |     MallMember selectInfoByAccountLoginAndPwd(@Param("accountLogin")String account, @Param("password")String md5Pwd); | 
 |  |  | } | 
 
 |  |  | 
 |  |  | import cc.mrbird.febs.mall.entity.MallMoneyFlow; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallMemberMapper; | 
 |  |  | import cc.mrbird.febs.mall.mapper.MallMoneyFlowMapper; | 
 |  |  | import cc.mrbird.febs.mall.service.IAgentService; | 
 |  |  | import cc.mrbird.febs.mall.service.IApiMallMemberService; | 
 |  |  | import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; | 
 |  |  | import cc.mrbird.febs.mall.service.IMemberProfitService; | 
 |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IMemberProfitService memberProfitService; | 
 |  |  |     @Autowired | 
 |  |  |     private IAgentService agentService; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 代理分红 | 
 |  |  | 
 |  |  |         memberProfitService.achieveReleaseJob(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 代理星级补贴 | 
 |  |  |      */ | 
 |  |  |     @Scheduled(cron = "0 0 0 * * ?") | 
 |  |  |     public void perkAgentAchieveJob() { | 
 |  |  |         agentService.perkAgent(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 
 |  |  | 
 |  |  | import cc.mrbird.febs.mall.dto.*; | 
 |  |  | import cc.mrbird.febs.mall.entity.*; | 
 |  |  | import cc.mrbird.febs.mall.vo.*; | 
 |  |  | import com.alipay.api.domain.AlipayOfflineTrade; | 
 |  |  | import com.baomidou.mybatisplus.core.metadata.IPage; | 
 |  |  | import com.baomidou.mybatisplus.extension.service.IService; | 
 |  |  |  | 
 |  |  | 
 |  |  |     FebsResponse searchInfo(Long id); | 
 |  |  |  | 
 |  |  |     FebsResponse accountInfo(Long id); | 
 |  |  |  | 
 |  |  |     FebsResponse outsideWithType(Long id, int i); | 
 |  |  |  | 
 |  |  |     FebsResponse chargeAgreeWithType(MallMemberWithdraw mallMemberWithdraw); | 
 |  |  | } | 
 
 |  |  | 
 |  |  |      * 按购买业绩(不按权益积分)每天静态释0.6%~1.2% | 
 |  |  |      */ | 
 |  |  |     void achieveReleasePercent(); | 
 |  |  |  | 
 |  |  |     void perkAgent(); | 
 |  |  | } | 
 
 |  |  | 
 |  |  |         return new FebsResponse().success().message("可以转账"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public FebsResponse outsideWithType(Long id, int i) { | 
 |  |  |         MallMember mallMember = mallMemberMapper.selectById(id); | 
 |  |  |         if(ObjectUtil.isEmpty(mallMember)) { | 
 |  |  |             return new FebsResponse().fail().message("会员信息不存在"); | 
 |  |  |         } | 
 |  |  |         mallMember.setOutsideWith(i); | 
 |  |  |         mallMemberMapper.updateById(mallMember); | 
 |  |  |         return new FebsResponse().success(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public FebsResponse chargeAgreeWithType(MallMemberWithdraw mallMemberWithdrawInfo) { | 
 |  |  |         MallMemberWithdraw mallMemberWithdraw = mallMemberWithdrawMapper.selectById(mallMemberWithdrawInfo.getId()); | 
 |  |  |  | 
 |  |  |         if(ObjectUtil.isEmpty(mallMemberWithdraw)){ | 
 |  |  |             return new FebsResponse().fail().message("系统繁忙,请刷新后重试"); | 
 |  |  |         } | 
 |  |  |         if(1 != mallMemberWithdraw.getStatus()){ | 
 |  |  |             return new FebsResponse().fail().message("当前状态不是提现中"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         Long wtihdrawTypeId = mallMemberWithdraw.getWtihdrawTypeId(); | 
 |  |  |         MallMemberBank mallMemberBank = mallMemberBankMapper.selectById(wtihdrawTypeId); | 
 |  |  |         if(ObjectUtil.isEmpty(mallMemberBank)){ | 
 |  |  |             return new FebsResponse().fail().message("提现银行卡已删除"); | 
 |  |  |         } | 
 |  |  |         String agreeType = mallMemberWithdrawInfo.getAgreeType(); | 
 |  |  |         if("1".equals(agreeType)){ | 
 |  |  |             mallMemberWithdraw.setStatus(2); | 
 |  |  |             mallMemberWithdrawMapper.updateById(mallMemberWithdraw); | 
 |  |  |  | 
 |  |  |             QueryWrapper<MallMoneyFlow> flowQueryWrapper = new QueryWrapper<>(); | 
 |  |  |             flowQueryWrapper.eq("order_no",mallMemberWithdraw.getWithdrawNo()); | 
 |  |  |             flowQueryWrapper.eq("type",MoneyFlowTypeEnum.WITHDRAWAL.getValue()); | 
 |  |  |             MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectOne(flowQueryWrapper); | 
 |  |  |             if(ObjectUtil.isNotEmpty(mallMoneyFlow)){ | 
 |  |  |                 mallMoneyFlow.setStatus(2); | 
 |  |  |                 mallMoneyFlowMapper.updateById(mallMoneyFlow); | 
 |  |  |             } | 
 |  |  |             return new FebsResponse().success(); | 
 |  |  |         }else{ | 
 |  |  |             String bankName = mallMemberBank.getBankName(); | 
 |  |  |             NBYHResponse nbyhResponse = new NBYHResponse(); | 
 |  |  |             if("宁波银行".equals(bankName)){ | 
 |  |  |                 nbyhResponse = nbyhService.tradeSinge(mallMemberWithdraw.getId()); | 
 |  |  |             }else{ | 
 |  |  |                 nbyhResponse = nbyhService.tradeSingeOuterTransfer(mallMemberWithdraw.getId()); | 
 |  |  |             } | 
 |  |  |             if(nbyhResponse.isFlag()){ | 
 |  |  |                 mallMemberWithdraw.setStatus(2); | 
 |  |  |                 mallMemberWithdrawMapper.updateById(mallMemberWithdraw); | 
 |  |  |  | 
 |  |  |                 QueryWrapper<MallMoneyFlow> flowQueryWrapper = new QueryWrapper<>(); | 
 |  |  |                 flowQueryWrapper.eq("order_no",mallMemberWithdraw.getWithdrawNo()); | 
 |  |  |                 flowQueryWrapper.eq("type",MoneyFlowTypeEnum.WITHDRAWAL.getValue()); | 
 |  |  |                 MallMoneyFlow mallMoneyFlow = mallMoneyFlowMapper.selectOne(flowQueryWrapper); | 
 |  |  |                 if(ObjectUtil.isNotEmpty(mallMoneyFlow)){ | 
 |  |  |                     mallMoneyFlow.setStatus(2); | 
 |  |  |                     mallMoneyFlowMapper.updateById(mallMoneyFlow); | 
 |  |  |                 } | 
 |  |  |                 return new FebsResponse().success().message(nbyhResponse.getMsg()); | 
 |  |  |             }else{ | 
 |  |  |                 return new FebsResponse().fail().message(nbyhResponse.getMsg()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     private String refererIds(String parentId) { | 
 |  |  |         boolean flag = false; | 
 |  |  |         if (StrUtil.isBlank(parentId)) { | 
 
 |  |  | 
 |  |  |     private final MallMoneyFlowMapper mallMoneyFlowMapper; | 
 |  |  |     private final MallMqRecordMapper mallMqRecordMapper; | 
 |  |  |  | 
 |  |  |     private final ICommonService commonService; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     public void autoUpAgentLevel(Long memberId) { | 
 |  |  | 
 |  |  |          *  从最顶级级别的合伙人开始补贴 | 
 |  |  |          *      补贴完,把已经补贴的合伙人加入下一个级别 | 
 |  |  |          */ | 
 |  |  |         List<MallMember> sevenLevelRecord = getStarRecord(null,  MemberLevelEnum.SEVEN_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SEVEN.getValue()); | 
 |  |  |         List<MallMember> sixLevelRecord = getStarRecord(sevenLevelRecord,  MemberLevelEnum.SIX_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SIX.getValue()); | 
 |  |  |         List<MallMember> fifthLevelRecord = getStarRecord(sixLevelRecord,  MemberLevelEnum.FIFTH_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FIVE.getValue()); | 
 |  |  |         List<MallMember> fourLevelRecord = getStarRecord(fifthLevelRecord,  MemberLevelEnum.FOUR_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FOUR.getValue()); | 
 |  |  |         List<MallMember> thirdLevelRecord = getStarRecord(fourLevelRecord,  MemberLevelEnum.THIRD_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_THREE.getValue()); | 
 |  |  |         List<MallMember> secondLevelRecord = getStarRecord(thirdLevelRecord,  MemberLevelEnum.SECOND_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_TWO.getValue()); | 
 |  |  |  | 
 |  |  |         DataDictionaryCustom perkAgentAchieveTotalDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getType(), | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getCode()); | 
 |  |  |         BigDecimal perkAgentAchieveTotal = new BigDecimal(perkAgentAchieveTotalDic.getValue()); | 
 |  |  |         //星级奖励百分比等于每个级别的累计之和 | 
 |  |  |         List<DataDictionaryCustom> starPerkDics = dataDictionaryCustomMapper.selectDicByType( | 
 |  |  |                 "AGENT_LEVEL_REQUIRE"); | 
 |  |  |         BigDecimal totalProfitProp = BigDecimal.ZERO; | 
 |  |  |         if(CollUtil.isNotEmpty(starPerkDics)){ | 
 |  |  |             for(DataDictionaryCustom starPerkDic : starPerkDics){ | 
 |  |  |                 String starPerkStr = starPerkDic.getValue(); | 
 |  |  |                 AgentInfo agentInfo = JSONObject.parseObject(starPerkStr, AgentInfo.class); | 
 |  |  |                 BigDecimal profitProp = agentInfo.getProfitProp().abs().divide(new BigDecimal(100)); | 
 |  |  |                 String code = starPerkDic.getCode(); | 
 |  |  |                 //存在当前级别的会员,则加上这个比例的补贴 | 
 |  |  |                 List<MallMember> mallMembers = memberMapper.selectByLevel(code); | 
 |  |  |                 if(CollUtil.isNotEmpty(mallMembers)){ | 
 |  |  |                     totalProfitProp = totalProfitProp.add(profitProp); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if(totalProfitProp.compareTo(BigDecimal.ZERO) > 0){ | 
 |  |  |             BigDecimal perkTotal = amount.multiply(totalProfitProp).setScale(2,BigDecimal.ROUND_DOWN); | 
 |  |  |             perkAgentAchieveTotal = perkAgentAchieveTotal.add(perkTotal); | 
 |  |  |             perkAgentAchieveTotalDic.setValue(perkAgentAchieveTotal.toString()); | 
 |  |  |             dataDictionaryCustomMapper.updateById(perkAgentAchieveTotalDic); | 
 |  |  |         } | 
 |  |  | //        List<MallMember> sevenLevelRecord = getStarRecord(null,  MemberLevelEnum.SEVEN_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SEVEN.getValue()); | 
 |  |  | //        List<MallMember> sixLevelRecord = getStarRecord(sevenLevelRecord,  MemberLevelEnum.SIX_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_SIX.getValue()); | 
 |  |  | //        List<MallMember> fifthLevelRecord = getStarRecord(sixLevelRecord,  MemberLevelEnum.FIFTH_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FIVE.getValue()); | 
 |  |  | //        List<MallMember> fourLevelRecord = getStarRecord(fifthLevelRecord,  MemberLevelEnum.FOUR_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_FOUR.getValue()); | 
 |  |  | //        List<MallMember> thirdLevelRecord = getStarRecord(fourLevelRecord,  MemberLevelEnum.THIRD_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_THREE.getValue()); | 
 |  |  | //        List<MallMember> secondLevelRecord = getStarRecord(thirdLevelRecord,  MemberLevelEnum.SECOND_LEVEL.name(), amount, mallOrderInfo.getOrderNo(), memberId,MoneyFlowTypeEnum.STAR_PERK_TWO.getValue()); | 
 |  |  |  | 
 |  |  |         /** | 
 |  |  |          * 团队补贴 | 
 |  |  | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public List<MallMember> getStarRecord(List<MallMember> mallMembersOlds,String LevelParam,BigDecimal amount,String orderNo,Long memberId,int starPerkType){ | 
 |  |  |  | 
 |  |  |         //实际补贴总金额 | 
 |  |  |         BigDecimal totalPerkAgentAmount = BigDecimal.ZERO; | 
 |  |  |         //根据用户的level获取用户 | 
 |  |  |         List<MallMember> mallMemberStars = memberMapper.selectMemberWithLevel(LevelParam); | 
 |  |  |         if(CollUtil.isNotEmpty(mallMembersOlds)){ | 
 |  |  | 
 |  |  |             if(starSum <= 0){ | 
 |  |  |                 return mallMemberStars; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             BigDecimal totalProfitProp = BigDecimal.ZERO; | 
 |  |  |             List<DataDictionaryCustom> agentLevelRequireDics = dataDictionaryCustomMapper.selectDicByType("AGENT_LEVEL_REQUIRE"); | 
 |  |  |             if(CollUtil.isNotEmpty(agentLevelRequireDics)){ | 
 |  |  |                 for(DataDictionaryCustom dic : agentLevelRequireDics){ | 
 |  |  |                     String starPerkStr = dic.getValue(); | 
 |  |  |                     AgentInfo agentInfo = JSONObject.parseObject(starPerkStr, AgentInfo.class); | 
 |  |  |                     //当前星级所占份数 | 
 |  |  |                     BigDecimal profitProp = agentInfo.getProfitProp().abs(); | 
 |  |  |                     List<MallMember> mallMembers = memberMapper.selectByLevel(dic.getCode()); | 
 |  |  |                     if(CollUtil.isNotEmpty(mallMembers)){ | 
 |  |  |                         totalProfitProp = profitProp.add(totalProfitProp); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             //星级补贴比例 | 
 |  |  |             DataDictionaryCustom starPerkDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( | 
 |  |  |                     "AGENT_LEVEL_REQUIRE", | 
 |  |  |                     LevelParam); | 
 |  |  |             String starPerkStr = starPerkDic.getValue(); | 
 |  |  |             AgentInfo agentInfo = JSONObject.parseObject(starPerkStr, AgentInfo.class); | 
 |  |  |             BigDecimal profitProp = agentInfo.getProfitProp().abs().divide(new BigDecimal(100)); | 
 |  |  | //            BigDecimal profitProp = agentInfo.getProfitProp().abs().divide(new BigDecimal(100)); | 
 |  |  |             //当前星级所占份数 | 
 |  |  |             BigDecimal profitProp = agentInfo.getProfitProp().abs(); | 
 |  |  |             //每一份多少钱 | 
 |  |  |             amount = amount.divide(totalProfitProp,4,BigDecimal.ROUND_DOWN); | 
 |  |  |             //当前等级的星级补贴 | 
 |  |  |             BigDecimal starPerkAmountSum = amount.multiply(profitProp); | 
 |  |  |             //当前等级的每一个贡献点的补贴金额 | 
 |  |  | 
 |  |  |                         mallMoneyFlows.add(mallMoneyFlow); | 
 |  |  |  | 
 |  |  |                         reduceStar(mallMemberWallet.getMemberId(),starPerkAmount); | 
 |  |  |                         totalPerkAgentAmount = totalPerkAgentAmount.add(starPerkAmount); | 
 |  |  |                     } | 
 |  |  |                     count = count + 1; | 
 |  |  |                     if (count % 1000 == 0 || count == mallMemberWallets.size()) { | 
 |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         log.info("============实际补贴金额:{}",totalPerkAgentAmount.setScale(2,BigDecimal.ROUND_DOWN)); | 
 |  |  |         DataDictionaryCustom totalPerkAgentAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getType(), | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getCode() | 
 |  |  |         ); | 
 |  |  |         totalPerkAgentAmountDic.setValue( | 
 |  |  |                 new BigDecimal(totalPerkAgentAmountDic.getValue()).subtract(totalPerkAgentAmount).setScale(2,BigDecimal.ROUND_DOWN).toString() | 
 |  |  |         ); | 
 |  |  |         dataDictionaryCustomMapper.updateById(totalPerkAgentAmountDic); | 
 |  |  |         return mallMemberStars; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |         ); | 
 |  |  |  | 
 |  |  |         List<MallMember> mallMembers = memberMapper.selectByLevel(MemberLevelEnum.SECOND_LEVEL.getType()); | 
 |  |  |         BigDecimal jobAchieveReleasePercent = new BigDecimal(jobAchieveReleasePercentDic.getValue()) | 
 |  |  |                 .multiply(new BigDecimal(0.001)); | 
 |  |  |         BigDecimal totalAchieve = BigDecimal.ZERO; | 
 |  |  |         Integer totalStar = 0; | 
 |  |  |         if(CollUtil.isNotEmpty(mallMembers)){ | 
 |  |  |             for(MallMember mallMember : mallMembers){ | 
 |  |  |                 //总业绩 | 
 |  |  |                 BigDecimal sumAchieve = mallAchieveRecordMapper.selectSumAchieveByMemberId(mallMember.getId()); | 
 |  |  |                 BigDecimal jobAchieveReleasePercent = new BigDecimal(jobAchieveReleasePercentDic.getValue()) | 
 |  |  |                         .multiply(new BigDecimal(0.001)); | 
 |  |  |                 //每个人的补贴额度 | 
 |  |  |                 BigDecimal multiply = sumAchieve.multiply(jobAchieveReleasePercent); | 
 |  |  |                 BigDecimal achieve = mallAchieveRecordMapper.selectSumAchieveByMemberId(mallMember.getId()); | 
 |  |  |                 totalAchieve = totalAchieve.add(achieve); | 
 |  |  |  | 
 |  |  |                 MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId()); | 
 |  |  |                 Integer star = mallMemberWallet.getStar(); | 
 |  |  |                 totalStar = totalStar + star; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         if(BigDecimal.ZERO.compareTo(totalAchieve) >= 0){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         //总释放=总业绩*一星每日业绩每日释放业绩到余额的千分比 | 
 |  |  |         totalAchieve = totalAchieve.multiply(jobAchieveReleasePercent); | 
 |  |  |  | 
 |  |  |         if(totalStar <= 0){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         //一个贡献点的价值 | 
 |  |  |         BigDecimal divide = totalAchieve.divide(new BigDecimal(totalStar), 2, BigDecimal.ROUND_DOWN); | 
 |  |  |  | 
 |  |  |         if(CollUtil.isNotEmpty(mallMembers)){ | 
 |  |  |             for(MallMember mallMember : mallMembers){ | 
 |  |  |  | 
 |  |  |                 MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId()); | 
 |  |  |                 Integer star = mallMemberWallet.getStar(); | 
 |  |  |                 //每个人贡献值数量*一个贡献点的价值=获取的收益 | 
 |  |  |                 BigDecimal multiply = divide.multiply(new BigDecimal(star)).setScale(2,BigDecimal.ROUND_DOWN); | 
 |  |  |  | 
 |  |  |                 BigDecimal totalScore = mallMemberWallet.getTotalScore(); | 
 |  |  |                 if(BigDecimal.ZERO.compareTo(multiply) < 0){ | 
 |  |  |                     if(BigDecimal.ZERO.compareTo(totalScore) < 0){ | 
 |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  | //        if(CollUtil.isNotEmpty(mallMembers)){ | 
 |  |  | //            for(MallMember mallMember : mallMembers){ | 
 |  |  | //                //总业绩 | 
 |  |  | //                BigDecimal sumAchieve = mallAchieveRecordMapper.selectSumAchieveByMemberId(mallMember.getId()); | 
 |  |  | //                //每个人的补贴额度 | 
 |  |  | //                BigDecimal multiply = sumAchieve.multiply(jobAchieveReleasePercent); | 
 |  |  | //                MallMemberWallet mallMemberWallet = mallMemberWalletMapper.selectWalletByMemberId(mallMember.getId()); | 
 |  |  | //                BigDecimal totalScore = mallMemberWallet.getTotalScore(); | 
 |  |  | //                if(BigDecimal.ZERO.compareTo(multiply) < 0){ | 
 |  |  | //                    if(BigDecimal.ZERO.compareTo(totalScore) < 0){ | 
 |  |  | //                        if(totalScore.compareTo(multiply) < 0){ | 
 |  |  | //                            multiply = totalScore; | 
 |  |  | //                        } | 
 |  |  | //                        //减少补贴额度 | 
 |  |  | //                        mallMemberWalletMapper.reduceTotalScoreById(multiply, mallMemberWallet.getId()); | 
 |  |  | // | 
 |  |  | //                        reduceStar(mallMember.getId(),multiply); | 
 |  |  | // | 
 |  |  | //                        mallMemberWalletMapper.addBalanceById(multiply, mallMemberWallet.getId()); | 
 |  |  | // | 
 |  |  | //                        mallMoneyFlowService.addMoneyFlow( | 
 |  |  | //                                mallMember.getId(), | 
 |  |  | //                                multiply, | 
 |  |  | //                                MoneyFlowTypeEnum.STATIC_BONUS.getValue(), | 
 |  |  | //                                MallUtils.getOrderNum(), | 
 |  |  | //                                FlowTypeEnum.BALANCE.getValue()); | 
 |  |  | //                    } | 
 |  |  | //                } | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  |     public void perkAgent() { | 
 |  |  |         DataDictionaryCustom totalAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getType(), | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_TOTAL.getCode() | 
 |  |  |         ); | 
 |  |  |         if(ObjectUtil.isEmpty(totalAmountDic)){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         //星级补贴总数 | 
 |  |  |         BigDecimal totalAmount = new BigDecimal(totalAmountDic.getValue()).setScale(2, BigDecimal.ROUND_DOWN); | 
 |  |  |         if(BigDecimal.ZERO.compareTo(totalAmount) >= 0){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         DataDictionaryCustom perkAgentPercentDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode( | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_PERCENT.getType(), | 
 |  |  |                 DataDictionaryEnum.PERK_AGENT_ACHIEVE_PERCENT.getCode() | 
 |  |  |         ); | 
 |  |  |         if(ObjectUtil.isEmpty(perkAgentPercentDic)){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         //星级补贴百分比 | 
 |  |  |         BigDecimal perkAgentPercent = new BigDecimal(perkAgentPercentDic.getValue()).abs().divide(new BigDecimal(100)); | 
 |  |  |         BigDecimal amount = totalAmount.multiply(perkAgentPercent); | 
 |  |  |         if(BigDecimal.ZERO.compareTo(amount) >= 0){ | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  | //        //星级补贴总数 | 
 |  |  | //        totalAmountDic.setValue(totalAmount.subtract(amount).setScale(2,BigDecimal.ROUND_DOWN).toString()); | 
 |  |  | //        dataDictionaryCustomMapper.updateById(totalAmountDic); | 
 |  |  |  | 
 |  |  |         String orderNo = MallUtils.getOrderNum("SPA"); | 
 |  |  |         /** | 
 |  |  |          * 星级奖励 | 
 |  |  |          *  从最顶级级别的合伙人开始补贴 | 
 |  |  |          *      补贴完,把已经补贴的合伙人加入下一个级别 | 
 |  |  |          */ | 
 |  |  |         List<MallMember> sevenLevelRecord = getStarRecord(null,  MemberLevelEnum.SEVEN_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_SEVEN.getValue()); | 
 |  |  |         List<MallMember> sixLevelRecord = getStarRecord(sevenLevelRecord,  MemberLevelEnum.SIX_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_SIX.getValue()); | 
 |  |  |         List<MallMember> fifthLevelRecord = getStarRecord(sixLevelRecord,  MemberLevelEnum.FIFTH_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_FIVE.getValue()); | 
 |  |  |         List<MallMember> fourLevelRecord = getStarRecord(fifthLevelRecord,  MemberLevelEnum.FOUR_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_FOUR.getValue()); | 
 |  |  |         List<MallMember> thirdLevelRecord = getStarRecord(fourLevelRecord,  MemberLevelEnum.THIRD_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_THREE.getValue()); | 
 |  |  |         List<MallMember> secondLevelRecord = getStarRecord(thirdLevelRecord,  MemberLevelEnum.SECOND_LEVEL.name(), amount, orderNo, 0L,MoneyFlowTypeEnum.STAR_PERK_TWO.getValue()); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 
 |  |  | 
 |  |  |     @Transactional(rollbackFor = Exception.class) | 
 |  |  |     @Override | 
 |  |  |     public FebsResponse register(RegisterDto registerDto) { | 
 |  |  |         MallMember mallMember = this.baseMapper.selectInfoByAccount(registerDto.getAccount()); | 
 |  |  | //        MallMember mallMember = this.baseMapper.selectInfoByAccount(registerDto.getAccount()); | 
 |  |  | //        if (mallMember != null) { | 
 |  |  | //            throw new FebsException("该账号已被占用"); | 
 |  |  | //        } | 
 |  |  |         String accountLogin = registerDto.getAccountLogin(); | 
 |  |  |         MallMember mallMember = this.baseMapper.selectByAccountLogin(accountLogin); | 
 |  |  |         if (mallMember != null) { | 
 |  |  |             throw new FebsException("该账号已被占用"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         List<MallMember> mallMembers = this.baseMapper.selectMemberByName(registerDto.getName()); | 
 |  |  |         if (CollUtil.isNotEmpty(mallMembers)) { | 
 |  |  |             MallRegisterAppeal registerAppeal = mallRegisterAppealMapper.selectByPhoneAndName(registerDto.getName(), registerDto.getAccount()); | 
 |  |  |             if (registerAppeal == null || registerAppeal.getStatus() != 1) { | 
 |  |  |                 return new FebsResponse().code(HttpStatus.ACCEPTED).message("用户名已存在"); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | //        List<MallMember> mallMembers = this.baseMapper.selectMemberByName(registerDto.getName()); | 
 |  |  | //        if (CollUtil.isNotEmpty(mallMembers)) { | 
 |  |  | //            MallRegisterAppeal registerAppeal = mallRegisterAppealMapper.selectByPhoneAndName(registerDto.getName(), registerDto.getAccount()); | 
 |  |  | //            if (registerAppeal == null || registerAppeal.getStatus() != 1) { | 
 |  |  | //                return new FebsResponse().code(HttpStatus.ACCEPTED).message("用户名已存在"); | 
 |  |  | //            } | 
 |  |  | //        } | 
 |  |  |  | 
 |  |  |         String account = registerDto.getAccount(); | 
 |  |  |         if (!"admin".equals(registerDto.getRegistType())) { | 
 |  |  | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         mallMember = new MallMember(); | 
 |  |  |         mallMember.setAccountLogin(accountLogin); | 
 |  |  |         mallMember.setPassword(SecureUtil.md5(registerDto.getPassword())); | 
 |  |  |  | 
 |  |  |         // 判断账号类型 | 
 |  |  | 
 |  |  |     public FebsResponse toLogin(LoginDto loginDto) { | 
 |  |  |         String md5Pwd = SecureUtil.md5(loginDto.getPassword()); | 
 |  |  |  | 
 |  |  |         MallMember mallMember = this.baseMapper.selectInfoByAccountAndPwd(loginDto.getAccount(), md5Pwd); | 
 |  |  | //        MallMember mallMember = this.baseMapper.selectInfoByAccountAndPwd(loginDto.getAccount(), md5Pwd); | 
 |  |  |         MallMember mallMember = this.baseMapper.selectInfoByAccountLoginAndPwd(loginDto.getAccount(), md5Pwd); | 
 |  |  |         if (mallMember == null) { | 
 |  |  |             throw new FebsException("用户不存在或账号密码错误"); | 
 |  |  |         } | 
 
 |  |  | 
 |  |  |     public void withdrawal(WithdrawalDto withdrawalDto) { | 
 |  |  |         Long memberId = LoginUserUtil.getLoginUser().getId(); | 
 |  |  |         MallMember mallMember = mallMemberService.getById(memberId); | 
 |  |  |  | 
 |  |  |         Integer outsideWith = mallMember.getOutsideWith() == null ? 2 :mallMember.getOutsideWith(); | 
 |  |  |         if (1 != outsideWith) { | 
 |  |  |             throw new FebsException("功能升级中"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if (StrUtil.isBlank(mallMember.getTradePassword())) { | 
 |  |  |             throw new FebsException("未设置支付密码"); | 
 |  |  |         } | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     private String phone; | 
 |  |  |  | 
 |  |  |     private String level; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     private String phone; | 
 |  |  |  | 
 |  |  |     private String bindPhone; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     private String phone; | 
 |  |  |  | 
 |  |  |     private String address; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     private String phone; | 
 |  |  |  | 
 |  |  |     private String bindPhone; | 
 
 |  |  | 
 |  |  |  | 
 |  |  |     private String name; | 
 |  |  |  | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     private String phone; | 
 |  |  |  | 
 |  |  |     private Integer status; | 
 
 |  |  | 
 |  |  |     @ApiModelProperty(value = "id") | 
 |  |  |     private Long id; | 
 |  |  |  | 
 |  |  |     @ApiModelProperty(value = "登录账号") | 
 |  |  |     private String accountLogin; | 
 |  |  |  | 
 |  |  |     @ApiModelProperty(value = "昵称") | 
 |  |  |     private String name; | 
 |  |  |  | 
 
 |  |  | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  |  | 
 |  |  | import javax.annotation.Resource; | 
 |  |  | import java.io.*; | 
 |  |  | import java.math.BigDecimal; | 
 |  |  | import java.net.*; | 
 |  |  | 
 |  |  |      * 接收报文url | 
 |  |  |      */ | 
 |  |  | //    private static final String URL = "http://127.0.0.1:9080/directlink/httpAccess"; | 
 |  |  | //    private static final String URL = "http://220.168.79.89:9080/directlink/httpAccess"; | 
 |  |  |     private static final String URL = "http://747f9407.r3.cpolar.top/directlink/httpAccess"; | 
 |  |  | //    private static final String URL = "http://1d6d-220-168-79-89.ngrok.io/directlink/httpAccess"; | 
 |  |  |     private static final String URL = "http://n5z7ej.natappfree.cc/directlink/httpAccess"; | 
 |  |  |     /** | 
 |  |  |      * 签名ip | 
 |  |  |      */ | 
 |  |  | //    private static final String VERIFY_IP = "127.0.0.1"; | 
 |  |  |     private static final String VERIFY_IP = "3b425db8.r10.cpolar.top"; | 
 |  |  | //    private static final String VERIFY_IP = "747f9407.r3.cpolar.top"; | 
 |  |  |     private static final String VERIFY_IP = "server.natappfree.cc"; | 
 |  |  |     /** | 
 |  |  |      * 付款账号 | 
 |  |  |      */ | 
 |  |  | 
 |  |  |     /** | 
 |  |  |      * 签名端口 | 
 |  |  |      */ | 
 |  |  |     private static final int VERIFY_PORT = 8010; | 
 |  |  |     private static final int VERIFY_PORT = 41933; | 
 |  |  | //    private static final int VERIFY_PORT = 8010; | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * cookies | 
 |  |  | 
 |  |  |         try { | 
 |  |  |  | 
 |  |  |             InetAddress addr = InetAddress.getByName(VERIFY_IP); | 
 |  |  |             String hostName = addr.getHostName(); | 
 |  |  | //            Socket socket = new Socket(hostName, VERIFY_PORT); | 
 |  |  |             String hostAddress = addr.getHostAddress(); | 
 |  |  |             SocketAddress address = new InetSocketAddress(VERIFY_IP, 8010); | 
 |  |  |             Socket socket = new Socket(addr, VERIFY_PORT); | 
 |  |  |  | 
 |  |  |             Proxy proxy = new Proxy(Proxy.Type.HTTP, address); | 
 |  |  |             Socket socket = new Socket(proxy); | 
 |  |  |             int port = socket.getPort(); | 
 |  |  |             System.out.println("发送登录请求:"+addr); | 
 |  |  |             System.out.println("发送登录请求:"+address); | 
 |  |  |             System.out.println("发送登录请求:"+hostName); | 
 |  |  |             System.out.println("发送登录请求:"+port); | 
 |  |  |             System.out.println("发送登录请求:"+socket.getKeepAlive()); | 
 |  |  | //            System.out.println("发送登录请求:"); | 
 |  |  | //            test.executeServerHttpService("srv001_signOn"); | 
 |  |  | //            System.out.println("\n发送转账结果查询请求:"); | 
 |  |  | //            executeServerHttpService("srv008_transferResultInfoQuery","转账结果查询","2023032910585227466"); | 
 |  |  | //            System.out.println("\n发送跨行转账请求:"); | 
 |  |  | //            test.executeServerHttpService("srv007_singleOuterTransfer","跨行转账",null); | 
 |  |  | //            System.out.println("\n发送行内转账请求:"); | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     @Resource | 
 |  |  |     private MallMemberWithdrawMapper mallMemberWithdrawMapper; | 
 |  |  |     @Autowired | 
 |  |  |     @Resource | 
 |  |  |     private MallMemberWithdrawMsgMapper mallMemberWithdrawMsgMapper; | 
 |  |  |     @Autowired | 
 |  |  |     @Resource | 
 |  |  |     private MallMemberBankMapper mallMemberBankMapper; | 
 |  |  |  | 
 |  |  |     @Override | 
 |  |  | 
 |  |  |         try { | 
 |  |  |             addr = InetAddress.getByName(VERIFY_IP); | 
 |  |  |             socket = new Socket(addr, VERIFY_PORT); | 
 |  |  | //            InetAddress localHost = addr.getLocalHost(); | 
 |  |  | //            socket = new Socket(localHost, VERIFY_PORT); | 
 |  |  |             // 发送 | 
 |  |  |             BufferedWriter wr = new BufferedWriter(new OutputStreamWriter( | 
 |  |  |                     socket.getOutputStream(),"GBK")); | 
 
 |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IMemberProfitService memberProfitService; | 
 |  |  |  | 
 |  |  | //    @RabbitListener(queues = QueueConstants.QUEUE_DEFAULT) | 
 |  |  | //    public void agentReturn(Message message, Channel channel) { | 
 |  |  | //        log.info("消费者:{}", new String(message.getBody())); | 
 |  |  | //    } | 
 |  |  | // | 
 |  |  | //    @RabbitListener(queues = "hlm_queue_order_delay") | 
 |  |  | //    public void orderCancelDelay(String id) { | 
 |  |  | //        try { | 
 |  |  | //            orderInfoService.autoCancelOrder(Long.parseLong(id)); | 
 |  |  | //        } catch (Exception e) { | 
 |  |  | //            log.error("订单超时支付异常", e); | 
 |  |  | //        } | 
 |  |  | //    } | 
 |  |  | // | 
 |  |  | //    @RabbitListener(queues = QueueConstants.AGENT_AUTO_LEVEL_UP) | 
 |  |  | //    public void agentAutoLevelUp(String id) { | 
 |  |  | //        log.info("收到合伙人自动升级消息:{}", id); | 
 |  |  | //        try { | 
 |  |  | //            agentService.autoUpAgentLevel(Long.parseLong(id)); | 
 |  |  | //        } catch (Exception e) { | 
 |  |  | //            log.error("合伙人自动升级异常", e); | 
 |  |  | //        } | 
 |  |  | //    } | 
 |  |  | // | 
 |  |  | //    @RabbitListener(queues = QueueConstants.AGENT_RETURN_MONEY) | 
 |  |  | //    public void agentReturnMoney(String orderId) { | 
 |  |  | //        log.info("收到返利消息:{}", orderId); | 
 |  |  | //        try { | 
 |  |  | //            agentService.returnMoneyToAgent(Long.parseLong(orderId)); | 
 |  |  | //        } catch (Exception e) { | 
 |  |  | //            log.error("返利异常", e); | 
 |  |  | //        } | 
 |  |  | //    } | 
 |  |  | // | 
 |  |  | //    @RabbitListener(queues = QueueConstants.ORDER_RETURN_MONEY) | 
 |  |  | //    public void orderReturnMoney(String orderId) { | 
 |  |  | //        log.info("收到订单返利消息:{}", orderId); | 
 |  |  | //        try { | 
 |  |  | //            memberProfitService.dynamicProfit(Long.parseLong(orderId)); | 
 |  |  | //        } catch (Exception e) { | 
 |  |  | //            log.error("订单返利异常:", e); | 
 |  |  | //        } | 
 |  |  | //    } | 
 |  |  | // | 
 |  |  | //    @RabbitListener(queues = QueueConstants.PERK_MONEY) | 
 |  |  | //    public void perkMoneyConsumer(String id) { | 
 |  |  | //        log.info("收到补贴消息:{}", id); | 
 |  |  | //        try { | 
 |  |  | //            agentService.perkMoneyConsumer(Long.parseLong(id)); | 
 |  |  | //        } catch (Exception e) { | 
 |  |  | //            log.error("用户补贴异常", e); | 
 |  |  | //            // todo 更新表 | 
 |  |  | // | 
 |  |  | //        } | 
 |  |  | //    } | 
 |  |  | // | 
 |  |  | //    @RabbitListener(queues = QueueConstants.FORCE_VOUCHER_SALE) | 
 |  |  | //    public void forceVoucherSaleConsumer(String price) { | 
 |  |  | //        log.info("收到强制卖出消息,价格:{}",price); | 
 |  |  | //        try { | 
 |  |  | //            memberProfitService.selaHalfVoucher(price); | 
 |  |  | //        } catch (Exception e) { | 
 |  |  | //            log.error("强制卖出异常", e); | 
 |  |  | //            // todo 更新表 | 
 |  |  | // | 
 |  |  | //        } | 
 |  |  | //    } | 
 |  |  |     @RabbitListener(queues = QueueConstants.QUEUE_DEFAULT) | 
 |  |  |     public void agentReturn(Message message, Channel channel) { | 
 |  |  |         log.info("消费者:{}", new String(message.getBody())); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = "hlm_queue_order_delay") | 
 |  |  |     public void orderCancelDelay(String id) { | 
 |  |  |         try { | 
 |  |  |             orderInfoService.autoCancelOrder(Long.parseLong(id)); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("订单超时支付异常", e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.AGENT_AUTO_LEVEL_UP) | 
 |  |  |     public void agentAutoLevelUp(String id) { | 
 |  |  |         log.info("收到合伙人自动升级消息:{}", id); | 
 |  |  |         try { | 
 |  |  |             agentService.autoUpAgentLevel(Long.parseLong(id)); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("合伙人自动升级异常", e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.AGENT_RETURN_MONEY) | 
 |  |  |     public void agentReturnMoney(String orderId) { | 
 |  |  |         log.info("收到返利消息:{}", orderId); | 
 |  |  |         try { | 
 |  |  |             agentService.returnMoneyToAgent(Long.parseLong(orderId)); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("返利异常", e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.ORDER_RETURN_MONEY) | 
 |  |  |     public void orderReturnMoney(String orderId) { | 
 |  |  |         log.info("收到订单返利消息:{}", orderId); | 
 |  |  |         try { | 
 |  |  |             memberProfitService.dynamicProfit(Long.parseLong(orderId)); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("订单返利异常:", e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.PERK_MONEY) | 
 |  |  |     public void perkMoneyConsumer(String id) { | 
 |  |  |         log.info("收到补贴消息:{}", id); | 
 |  |  |         try { | 
 |  |  |             agentService.perkMoneyConsumer(Long.parseLong(id)); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("用户补贴异常", e); | 
 |  |  |             // todo 更新表 | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @RabbitListener(queues = QueueConstants.FORCE_VOUCHER_SALE) | 
 |  |  |     public void forceVoucherSaleConsumer(String price) { | 
 |  |  |         log.info("收到强制卖出消息,价格:{}",price); | 
 |  |  |         try { | 
 |  |  |             memberProfitService.selaHalfVoucher(price); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("强制卖出异常", e); | 
 |  |  |             // todo 更新表 | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | } | 
 
 |  |  | 
 |  |  |                 <if test="record.name!=null and record.name!=''"> | 
 |  |  |                     and m.name like concat('%',  #{record.name},'%') | 
 |  |  |                 </if> | 
 |  |  |                 <if test="record.accountLogin!=null and record.accountLogin!=''"> | 
 |  |  |                     and m.account_login like concat('%',  #{record.accountLogin},'%') | 
 |  |  |                 </if> | 
 |  |  |                 <if test="record.account!=null and record.account!=''"> | 
 |  |  |                     and ( | 
 |  |  |                         m.phone like concat('%',  #{record.account},'%') | 
 |  |  | 
 |  |  |         left join data_dictionary_custom a on a.code = m.level | 
 |  |  |         <where> | 
 |  |  |             <if test="record != null" > | 
 |  |  |                 <if test="record.accountLogin!=null and record.accountLogin!=''"> | 
 |  |  |                     and m.account_login like concat('%',  #{record.accountLogin},'%') | 
 |  |  |                 </if> | 
 |  |  |                 <if test="record.name!=null and record.name!=''"> | 
 |  |  |                     and m.name like concat('%',  #{record.name},'%') | 
 |  |  |                 </if> | 
 |  |  | 
 |  |  |         select * from mall_member | 
 |  |  |         where level = #{level} | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <select id="selectByAccountLogin" resultType="cc.mrbird.febs.mall.entity.MallMember"> | 
 |  |  |         select * from mall_member | 
 |  |  |         where account_login = #{accountLogin} | 
 |  |  |     </select> | 
 |  |  |  | 
 |  |  |     <select id="selectInfoByAccountLoginAndPwd" resultType="cc.mrbird.febs.mall.entity.MallMember"> | 
 |  |  |         select * from mall_member | 
 |  |  |         where account_login = #{accountLogin} and password = #{password} | 
 |  |  |     </select> | 
 |  |  | </mapper> | 
 
 |  |  | 
 |  |  |         a.*, | 
 |  |  |         b.name, | 
 |  |  |         b.bind_phone bindPhone, | 
 |  |  |         b.account_login accountLogin, | 
 |  |  |         c.pay_method payMethod, | 
 |  |  |         b.phone, | 
 |  |  |         d.name fromMemberName | 
 |  |  | 
 |  |  |         left join mall_member d on d.id = a.rt_member_id | 
 |  |  |         <where> | 
 |  |  |             <if test="record != null" > | 
 |  |  |                 <if test="record.accountLogin!=null and record.accountLogin!=''"> | 
 |  |  |                     and b.account_login like concat('%',  #{record.accountLogin},'%') | 
 |  |  |                 </if> | 
 |  |  |                 <if test="record.name!=null and record.name!=''"> | 
 |  |  |                     and b.name like concat('%',  #{record.name},'%') | 
 |  |  |                 </if> | 
 |  |  | 
 |  |  |         a.remark remark, | 
 |  |  |         a.status status, | 
 |  |  |         b.name, | 
 |  |  |         b.account_login accountLogin, | 
 |  |  |         b.bind_phone bindPhone, | 
 |  |  |         b.phone | 
 |  |  |         from mall_member_withdraw a | 
 |  |  |         inner join mall_member b on a.member_id=b.id | 
 |  |  |         <where> | 
 |  |  |             <if test="record != null" > | 
 |  |  |                 <if test="record.accountLogin!=null and record.accountLogin!=''"> | 
 |  |  |                     and b.account_login like concat('%',  #{record.accountLogin},'%') | 
 |  |  |                 </if> | 
 |  |  |                 <if test="record.name!=null and record.name!=''"> | 
 |  |  |                     and b.name like concat('%',  #{record.name},'%') | 
 |  |  |                 </if> | 
 
 |  |  | 
 |  |  |         select a.*, | 
 |  |  |                b.name memberName, | 
 |  |  |                b.bind_phone memberBindPhone, | 
 |  |  |                b.account_login accountLogin, | 
 |  |  |                b.phone memberPhone, | 
 |  |  |                c.goods_name | 
 |  |  |         from mall_order_item c | 
 |  |  | 
 |  |  |                 <if test="record.name != null and record.name != ''"> | 
 |  |  |                     and b.name like CONCAT('%', CONCAT(#{record.name}, '%')) | 
 |  |  |                 </if> | 
 |  |  |                 <if test="record.accountLogin != null and record.accountLogin != ''"> | 
 |  |  |                     and b.account_login like CONCAT('%', CONCAT(#{record.accountLogin}, '%')) | 
 |  |  |                 </if> | 
 |  |  |                 <if test="record.startTime != null and record.startTime != ''"> | 
 |  |  |                     and a.order_time >= #{record.startTime} | 
 |  |  |                 </if> | 
 
 |  |  | 
 |  |  |         select | 
 |  |  |             a.*, | 
 |  |  |                b.name name, | 
 |  |  |                b.account_login accountLogin, | 
 |  |  |                b.phone phone | 
 |  |  |         from mall_money_flow a | 
 |  |  |         left join mall_member b on b.id = a.member_id | 
 
 |  |  | 
 |  |  |                 id: 'agentChild', | 
 |  |  |                 url: ctx + 'admin/mallMember/agentChild?parentId=1', | 
 |  |  |                 cols: [[ | 
 |  |  |                     {field: 'accountLogin', title: '登录账户', minWidth: 150,align:'center'}, | 
 |  |  |                     {field: 'name', title: '姓名', minWidth: 150,align:'center'}, | 
 |  |  |                     {field: 'phone', title: '电话', minWidth: 150,align:'center',hide:toolbarAgentListChild}, | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 150,align:'center',hide:toolbarAgentListChild}, | 
 |  |  |                     {field: 'inviteId', title: '邀请码', minWidth: 150,align:'center'}, | 
 |  |  |                     {field: 'levelName', title: '等级', minWidth: 150,align:'center'}, | 
 |  |  |                     {field: 'amount', title: '团队业绩', minWidth: 150,align:'center'}, | 
 
 |  |  | 
 |  |  |                             <div class="layui-col-md10"> | 
 |  |  |                                 <div class="layui-form-item"> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">登录账户:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="登录账户" name="accountLogin" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">名称:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="名称" name="name" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">账号:</label> | 
 |  |  |                                         <label class="layui-form-label">手机号码:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="账号" name="account" autocomplete="off" class="layui-input"> | 
 |  |  |                                             <input type="text" placeholder="手机号码" name="account" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  | 
 |  |  |                 url: ctx + 'admin/mallMember/getAgentList', | 
 |  |  |                 cols: [[ | 
 |  |  |                     // {field: 'bindPhone', title: '手机号', minWidth: 150,align:'left'}, | 
 |  |  |                     {field: 'phone', title: '账号', minWidth: 150,align:'left',hide:toolbarAgentList}, | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 150,align:'left',hide:toolbarAgentList}, | 
 |  |  |                     {field: 'accountLogin', title: '登录账号', minWidth: 100,align:'left'}, | 
 |  |  |                     {field: 'name', title: '名称', minWidth: 100,align:'left'}, | 
 |  |  |                     {field: 'inviteId', title: '邀请码', minWidth: 100,align:'left'}, | 
 |  |  |                     {field: 'levelName', title: '代理层级', minWidth: 100,align:'left'}, | 
 |  |  | 
 |  |  |         // 获取查询参数 | 
 |  |  |         function getQueryParams() { | 
 |  |  |             return { | 
 |  |  |                 accountLogin: $searchForm.find('input[name="accountLogin"]').val().trim(), | 
 |  |  |                 name: $searchForm.find('input[name="name"]').val().trim(), | 
 |  |  |                 account: $searchForm.find('input[name="account"]').val().trim(), | 
 |  |  |                 level: $searchForm.find("select[name='level']").val(), | 
 
 |  |  | 
 |  |  |                             <div class="layui-col-md10"> | 
 |  |  |                                 <div class="layui-form-item"> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">登录账户:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="登录账户" name="accountLogin" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">名称:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="名称" name="name" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">账号:</label> | 
 |  |  |                                         <label class="layui-form-label">手机号码:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="账号" name="phone" autocomplete="off" class="layui-input"> | 
 |  |  |                                             <input type="text" placeholder="手机号码" name="phone" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  | 
 |  |  | </div> | 
 |  |  | <script type="text/html" id="charge-flow-list-option"> | 
 |  |  |     {{# if(d.status === 1) { }} | 
 |  |  | <!--        <button class="layui-btn layui-btn-normal layui-btn-xs" type="button" shiro:hasPermission="chargeAgree:update" lay-event="chargeAgree">同意</button>--> | 
 |  |  |         <button class="layui-btn layui-btn-normal layui-btn-xs" type="button" shiro:hasPermission="chargeAgree:update" lay-event="chargeAgree">同意</button> | 
 |  |  |         <button class="layui-btn layui-btn-normal layui-btn-xs" type="button" shiro:hasPermission="searchInfo:view" lay-event="searchInfo">查询结果</button> | 
 |  |  |         <button class="layui-btn layui-btn-normal layui-btn-xs" type="button" shiro:hasPermission="accountInfo:view" lay-event="accountInfo">账户余额</button> | 
 |  |  | 
 |  |  |         table.on('tool(moneyFlowChargeTable)', function (obj) { | 
 |  |  |             var data = obj.data, | 
 |  |  |                 layEvent = obj.event; | 
 |  |  |             // if (layEvent === 'chargeAgree') { | 
 |  |  |             //     febs.modal.confirm('同意', '同意提现?', function () { | 
 |  |  |             //         chargeAgree(data.id); | 
 |  |  |             //     }); | 
 |  |  |             // } | 
 |  |  |             if (layEvent === 'chargeAgree') { | 
 |  |  |                 febs.modal.confirm('同意', '同意提现?', function () { | 
 |  |  |                     chargeAgree(data.id); | 
 |  |  |                 febs.modal.open( '提现方式', 'modules/mallMember/chargeFlowListType/' + data.id, { | 
 |  |  |                     btn: ['提交', '取消'], | 
 |  |  |                     yes: function (index, layero) { | 
 |  |  |                         $('#charge-update').find('#submit').trigger('click'); | 
 |  |  |                     }, | 
 |  |  |                     btn2: function () { | 
 |  |  |                         layer.closeAll(); | 
 |  |  |                     } | 
 |  |  |                 }); | 
 |  |  |             } | 
 |  |  |             if (layEvent === 'chargeDisagree') { | 
 |  |  | 
 |  |  |             febs.get(ctx + 'admin/mallMember/searchInfo/' + id, null, function (data) { | 
 |  |  |                 febs.alert.success(data.message); | 
 |  |  |                 // febs.alert.success('操作成功'); | 
 |  |  |                 window.location.reload(); | 
 |  |  |                 // $query.click(); | 
 |  |  |                 // window.location.reload(); | 
 |  |  |                 $query.click(); | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |         function accountInfo(id) { | 
 |  |  |             febs.get(ctx + 'admin/mallMember/accountInfo/' + id, null, function (data) { | 
 |  |  |                 febs.alert.success(data.message); | 
 |  |  |                 // febs.alert.success('操作成功'); | 
 |  |  |                 window.location.reload(); | 
 |  |  |                 // $query.click(); | 
 |  |  |                 // window.location.reload(); | 
 |  |  |                 $query.click(); | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |         function chargeAgree(id) { | 
 |  |  | 
 |  |  |                 totalRow: true ,// 开启合计行 | 
 |  |  |                 cols: [[ | 
 |  |  |                     {field: 'withdrawNo', title: '编号', minWidth: 100,align:'left', totalRowText: '合计:'}, | 
 |  |  |                     {field: 'accountLogin', title: '登录账户', minWidth: 100,align:'left'}, | 
 |  |  |                     {field: 'name', title: '名称', minWidth: 100,align:'left'}, | 
 |  |  |                     {field: 'phone', title: '账号', minWidth: 150,align:'left'}, | 
 |  |  |                     {field: 'bindPhone', title: '手机号', minWidth: 150,align:'left'}, | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 150,align:'left'}, | 
 |  |  |                     // {field: 'bindPhone', title: '手机号', minWidth: 150,align:'left'}, | 
 |  |  |                     {field: 'amount', title: '金额', minWidth: 150,align:'left',totalRow: '{{= parseInt(d.amount) }}'}, | 
 |  |  |                     {field: 'amountFee', title: '手续费', minWidth: 150,align:'left',totalRow: '{{= parseInt(d.amountFee) }}'}, | 
 |  |  |                     {field: 'remark', title: '类型', minWidth: 150,align:'left'}, | 
 |  |  | 
 |  |  |         function getQueryParams() { | 
 |  |  |             return { | 
 |  |  |                 name: $searchForm.find('input[name="name"]').val().trim(), | 
 |  |  |                 accountLogin: $searchForm.find('input[name="accountLogin"]').val().trim(), | 
 |  |  |                 phone: $searchForm.find('input[name="phone"]').val().trim(), | 
 |  |  |                 status: $searchForm.find("select[name='status']").val(), | 
 |  |  |             }; | 
 
| New file | 
 |  |  | 
 |  |  | <style> | 
 |  |  |     #charge-update { | 
 |  |  |         padding: 20px 25px 25px 0; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     #charge-update .layui-treeSelect .ztree li a, .ztree li span { | 
 |  |  |         margin: 0 0 2px 3px !important; | 
 |  |  |     } | 
 |  |  |     #charge-update #data-permission-tree-block { | 
 |  |  |         border: 1px solid #eee; | 
 |  |  |         border-radius: 2px; | 
 |  |  |         padding: 3px 0; | 
 |  |  |     } | 
 |  |  |     #charge-update .layui-treeSelect .ztree li span.button.switch { | 
 |  |  |         top: 1px; | 
 |  |  |         left: 3px; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | </style> | 
 |  |  | <div class="layui-fluid" id="charge-update"> | 
 |  |  |     <form class="layui-form" action="" lay-filter="charge-update-form"> | 
 |  |  |  | 
 |  |  |         <blockquote class="layui-elem-quote blue-border">请选择以下提现方式</blockquote> | 
 |  |  |         <div class="layui-form-item febs-hide"> | 
 |  |  |             <label class="layui-form-label febs-form-item-require">id:</label> | 
 |  |  |             <div class="layui-input-block"> | 
 |  |  |                 <input type="text" name="id"> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-form-item sftj"> | 
 |  |  |             <label class="layui-form-label febs-form-item-require">方式:</label> | 
 |  |  |             <div class="layui-input-block"> | 
 |  |  |                 <input type="radio" name="agreeType" value="1" title="手动转账" > | 
 |  |  |                 <input type="radio" name="agreeType" value="2" title="宁波银行转账" checked=""> | 
 |  |  |             </div> | 
 |  |  |         </div> | 
 |  |  |         <div class="layui-form-item febs-hide"> | 
 |  |  |             <button class="layui-btn" lay-submit="" lay-filter="charge-update-form-submit" id="submit"></button> | 
 |  |  |         </div> | 
 |  |  |     </form> | 
 |  |  | </div> | 
 |  |  |  | 
 |  |  | <script data-th-inline="javascript"> | 
 |  |  |     layui.use(['febs', 'form', 'formSelects', 'validate', 'treeSelect', 'eleTree'], function () { | 
 |  |  |         var $ = layui.$, | 
 |  |  |             febs = layui.febs, | 
 |  |  |             layer = layui.layer, | 
 |  |  |             formSelects = layui.formSelects, | 
 |  |  |             treeSelect = layui.treeSelect, | 
 |  |  |             form = layui.form, | 
 |  |  |             eleTree = layui.eleTree, | 
 |  |  |             chargeUpdateInfo = [[${chargeUpdateInfo}]], | 
 |  |  |             $view = $('#charge-update'), | 
 |  |  |             validate = layui.validate, | 
 |  |  |             _deptTree; | 
 |  |  |  | 
 |  |  |         form.render(); | 
 |  |  |  | 
 |  |  |         initUserValue(); | 
 |  |  |  | 
 |  |  |         function initUserValue() { | 
 |  |  |             form.val("charge-update-form", { | 
 |  |  |                 "id": chargeUpdateInfo.id | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         form.on('submit(charge-update-form-submit)', function (data) { | 
 |  |  |             febs.post(ctx + 'admin/mallMember/chargeAgreeWithType', data.field, function () { | 
 |  |  |                 layer.closeAll(); | 
 |  |  |                 febs.alert.success('操作成功'); | 
 |  |  |                 $('#febs-money-flow-charge').find('#reset').click(); | 
 |  |  |             }); | 
 |  |  |             return false; | 
 |  |  |         }); | 
 |  |  |     }); | 
 |  |  | </script> | 
 
 |  |  | 
 |  |  |                             <div class="layui-col-md10"> | 
 |  |  |                                 <div class="layui-form-item"> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">登录账户:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="登录账户" name="accountLogin" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">名称:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="名称" name="name" autocomplete="off" class="layui-input"> | 
 |  |  | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">账号:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="账号/邀请码" name="account" autocomplete="off" class="layui-input"> | 
 |  |  |                                             <input type="text" placeholder="手机号码/邀请码" name="account" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  | 
 |  |  |     <input type="checkbox" value={{d.id}} lay-text="是|否" lay-skin="switch" lay-filter="switchInsideWith"> | 
 |  |  |     {{# } }} | 
 |  |  | </script> | 
 |  |  | <script type="text/html" id="switchOutsideWith"> | 
 |  |  |     {{# if(d.outsideWith === 1) { }} | 
 |  |  |     <input type="checkbox" value={{d.id}} lay-text="是|否" checked lay-skin="switch" lay-filter="switchOutsideWith"> | 
 |  |  |     {{# } else { }} | 
 |  |  |     <input type="checkbox" value={{d.id}} lay-text="是|否" lay-skin="switch" lay-filter="switchOutsideWith"> | 
 |  |  |     {{# } }} | 
 |  |  | </script> | 
 |  |  | <style> | 
 |  |  |     .layui-form-onswitch { | 
 |  |  |         background-color: #5FB878 !important; | 
 |  |  | 
 |  |  | </style> | 
 |  |  | <script type="text/html" id="tableMemberBar"> | 
 |  |  |     <div class="layui-btn-container"> | 
 |  |  |         <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" lay-event="exportMember">导出会员信息</button> | 
 |  |  |         <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="addMember:update" lay-event="registMember">添加会员</button> | 
 |  |  |         <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="mallSystemPay:update" lay-event="balance">拨付余额</button> | 
 |  |  | <!--        <button class="layui-btn layui-btn-normal layui-btn-sm" type="button" shiro:hasPermission="mallSystemPay:update" lay-event="score">拨付赠送积分</button>--> | 
 |  |  | 
 |  |  | <!-- 表格操作栏 end --> | 
 |  |  | <script data-th-inline="none" type="text/javascript"> | 
 |  |  |     // 引入组件并初始化 | 
 |  |  |     layui.use([ 'jquery', 'form', 'table', 'febs'], function () { | 
 |  |  |     layui.use([ 'jquery', 'form', 'table', 'upload','febs'], function () { | 
 |  |  |         var $ = layui.jquery, | 
 |  |  |             febs = layui.febs, | 
 |  |  |             form = layui.form, | 
 |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         }); | 
 |  |  |         function outsideWithYes(id) { | 
 |  |  |             febs.get(ctx + 'admin/mallMember/outsideWithYes/' + id, null, function () { | 
 |  |  |                 febs.alert.success('操作成功'); | 
 |  |  |                 $query.click(); | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |         function outsideWithNo(id) { | 
 |  |  |             febs.get(ctx + 'admin/mallMember/outsideWithNo/' + id, null, function () { | 
 |  |  |                 febs.alert.success('操作成功'); | 
 |  |  |                 $query.click(); | 
 |  |  |             }); | 
 |  |  |         } | 
 |  |  |         function insideWithYes(id) { | 
 |  |  |             febs.get(ctx + 'admin/mallMember/insideWithYes/' + id, null, function () { | 
 |  |  |                 febs.alert.success('操作成功'); | 
 |  |  | 
 |  |  |                 id: 'userTable', | 
 |  |  |                 url: ctx + 'admin/mallMember/getMallMemberList', | 
 |  |  |                 toolbar:"#tableMemberBar", | 
 |  |  |                 defaultToolbar:[], | 
 |  |  |                 // defaultToolbar:[], | 
 |  |  |                 totalRow: true ,// 开启合计行 | 
 |  |  |                 cols: [[ | 
 |  |  |                     {type: 'checkbox'}, | 
 |  |  |                     {field: 'phone', title: '账号', minWidth: 150,align:'left',hide:toolbarMallmember}, | 
 |  |  |                     {field: 'accountLogin', title: '登录账户', minWidth: 150,align:'left'}, | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 150,align:'left',hide:toolbarMallmember}, | 
 |  |  |                     {field: 'name', title: '名称', minWidth: 100,align:'left', totalRowText: '合计:'}, | 
 |  |  |                     {field: 'inviteId', title: '邀请码', minWidth: 100,align:'left'}, | 
 |  |  |                     {field: 'balance', title: '余额', minWidth: 100,align:'left',totalRow: '{{= parseInt(d.balance) }}'}, | 
 |  |  | 
 |  |  |                     {field: 'creater', title: '联创', templet:'#switchCreate', minWidth: 120,align:'left' ,hide:toolbarMallmember}, | 
 |  |  |                     {field: 'partner', title: '合伙人', templet:'#switchPartner', minWidth: 120,align:'left' ,hide:toolbarMallmember}, | 
 |  |  |                     {field: 'insideWith', title: '是否内转', templet:'#switchInsideWith', minWidth: 120,align:'left' ,hide:toolbarMallmember}, | 
 |  |  |                     {field: 'outsideWith', title: '是否提现', templet:'#switchOutsideWith', minWidth: 120,align:'left' ,hide:toolbarMallmember}, | 
 |  |  |                     {field: 'accountType', title: '账号类型', | 
 |  |  |                         templet: function (d) { | 
 |  |  |                             if (d.accountType === 2) { | 
 |  |  | 
 |  |  |             var data = obj.data, | 
 |  |  |                 layEvent = obj.event; | 
 |  |  |  | 
 |  |  |             if (layEvent === 'exportMember') { | 
 |  |  |                 window.location.href = ctx + "admin/mallMember/exportMember"; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (layEvent === 'registMember') { | 
 |  |  |  | 
 |  |  |                 febs.modal.open( '添加会员', 'modules/mallMember/addMember', { | 
 |  |  |                     btn: ['提交', '取消'], | 
 |  |  |                     yes: function (index, layero) { | 
 |  |  | 
 |  |  |             return { | 
 |  |  |                 name: $searchForm.find('input[name="name"]').val().trim(), | 
 |  |  |                 account: $searchForm.find('input[name="account"]').val().trim(), | 
 |  |  |                 accountLogin: $searchForm.find('input[name="accountLogin"]').val().trim(), | 
 |  |  |                 accountStatus: $searchForm.find("select[name='accountStatus']").val(), | 
 |  |  |                 level: $searchForm.find("select[name='level']").val(), | 
 |  |  |             }; | 
 |  |  | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         form.on('switch(switchOutsideWith)', function (data) { | 
 |  |  |             if (data.elem.checked) { | 
 |  |  |                 outsideWithYes(data.value); | 
 |  |  |             } else { | 
 |  |  |                 outsideWithNo(data.value); | 
 |  |  |             } | 
 |  |  |         }) | 
 |  |  |  | 
 |  |  |         form.on('switch(switchStatus)', function (data) { | 
 |  |  |             if (data.elem.checked) { | 
 |  |  |                 openAccount(data.value); | 
 
 |  |  | 
 |  |  |                             <div class="layui-col-md10"> | 
 |  |  |                                 <div class="layui-form-item"> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">登录账户:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="登录账户" name="accountLogin" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">名称:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="名称" name="name" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  |                                         <label class="layui-form-label">账号:</label> | 
 |  |  |                                         <label class="layui-form-label">手机号码:</label> | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <input type="text" placeholder="账号" name="phone" autocomplete="off" class="layui-input"> | 
 |  |  |                                             <input type="text" placeholder="手机号码" name="phone" autocomplete="off" class="layui-input"> | 
 |  |  |                                         </div> | 
 |  |  |                                     </div> | 
 |  |  |                                     <div class="layui-inline"> | 
 |  |  | 
 |  |  |                                         <div class="layui-input-inline"> | 
 |  |  |                                             <select name="type"> | 
 |  |  |                                                 <option value="">请选择</option> | 
 |  |  |                                                 <option value="1">静态收益</option> | 
 |  |  |                                                 <option value="2">直推奖</option> | 
 |  |  |                                                 <option value="8">提现</option> | 
 |  |  |                                                 <option value="9">转账</option> | 
 |  |  | 
 |  |  |                 id: 'moneyFlowTable', | 
 |  |  |                 url: ctx + 'admin/mallMember/getMoneyFlowList', | 
 |  |  |                 cols: [[ | 
 |  |  |                     {field: 'accountLogin', title: '登录账户', minWidth: 100,align:'left'}, | 
 |  |  |                     {field: 'name', title: '名称', minWidth: 100,align:'left'}, | 
 |  |  |                     {field: 'phone', title: '账号', minWidth: 150,align:'left'}, | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 150,align:'left'}, | 
 |  |  |                     {field: 'amount', title: '金额', minWidth: 150,align:'left'}, | 
 |  |  |                     {field: 'fromMemberName', title: '来自', minWidth: 150,align:'left'}, | 
 |  |  |                     {field: 'type', title: '流水类型', | 
 |  |  | 
 |  |  |         function getQueryParams() { | 
 |  |  |             return { | 
 |  |  |                 name: $searchForm.find('input[name="name"]').val().trim(), | 
 |  |  |                 accountLogin: $searchForm.find('input[name="accountLogin"]').val().trim(), | 
 |  |  |                 phone: $searchForm.find('input[name="phone"]').val().trim(), | 
 |  |  |                 type: $searchForm.find("select[name='type']").val(), | 
 |  |  |                 flowType: $searchForm.find("select[name='flowType']").val(), | 
 
 |  |  | 
 |  |  |                 totalRow: true ,// 开启合计行 | 
 |  |  |                 cols: [[ | 
 |  |  |                     {field: 'name', title: '名称', minWidth: 150,align:'center', totalRowText: '合计:'}, | 
 |  |  |                     {field: 'phone', title: '电话', minWidth: 150,align:'center'}, | 
 |  |  |                     {field: 'accountLogin', title: '登录账户', minWidth: 150,align:'center'}, | 
 |  |  |                     {field: 'phone', title: '手机号码', minWidth: 150,align:'center'}, | 
 |  |  |                     {field: 'createdTime', title: '释放时间', minWidth: 150,align:'center'}, | 
 |  |  |                     {field: 'type', title: '类型', | 
 |  |  |                         templet: function (d) { | 
 
 |  |  | 
 |  |  |                         <div class="layui-form-item"> | 
 |  |  |                             <div class="layui-col-md10"> | 
 |  |  |                                 <div class="layui-inline"> | 
 |  |  |                                     <label class="layui-form-label">登录账户:</label> | 
 |  |  |                                     <div class="layui-input-inline"> | 
 |  |  |                                         <input type="text" placeholder="登录账户" name="accountLogin" autocomplete="off" class="layui-input"> | 
 |  |  |                                     </div> | 
 |  |  |                                 </div> | 
 |  |  |                                 <div class="layui-inline"> | 
 |  |  |                                     <label class="layui-form-label">购买人:</label> | 
 |  |  |                                     <div class="layui-input-inline"> | 
 |  |  |                                         <input type="text" placeholder="购买人" name="name" autocomplete="off" class="layui-input"> | 
 |  |  | 
 |  |  |         <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" shiro:hasPermission="orderDetail:view" id="importDeliver" lay-event="importDeliver">导入发货</button> | 
 |  |  |         <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" shiro:hasPermission="orderDetail:view" lay-event="exportDeliverDone">导出已发货订单</button> | 
 |  |  |         <button id="printSelect" type="button" class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" shiro:hasPermission="orderDetail:view">自定义打印</button> | 
 |  |  |         <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" shiro:hasPermission="orderDetail:view" lay-event="exportDeliverAll">导出全部订单</button> | 
 |  |  |     </div> | 
 |  |  | </script> | 
 |  |  | <!-- 表格操作栏 end --> | 
 |  |  | 
 |  |  |  | 
 |  |  |             if (event == 'exportDeliver') { | 
 |  |  |                 window.location.href = ctx + "admin/order/exportOrderList?orderType=1&status=2"; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (event == 'exportDeliverAll') { | 
 |  |  |                 window.location.href = ctx + "admin/order/exportOrderListAll?orderType=1&status=0"; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (event == 'exportDeliverDone') { | 
 |  |  | 
 |  |  |                 cols: [[ | 
 |  |  |                         {type: 'checkbox',fixed: 'left'}, | 
 |  |  |                         {field: 'orderNo', title: '订单编号', minWidth: 120,align:'left', totalRowText: '合计:'}, | 
 |  |  |                         {field: 'accountLogin', title: '登录账户', minWidth: 120,align:'left'}, | 
 |  |  |                         {field: 'memberName', title: '购买人', minWidth: 120,align:'left'}, | 
 |  |  |                         {field: 'memberPhone', title: '账号', minWidth: 120,align:'left'}, | 
 |  |  |                         {field: 'memberBindPhone', title: '联系方式', minWidth: 120,align:'left'}, | 
 |  |  |                         {field: 'memberPhone', title: '手机号码', minWidth: 120,align:'left'}, | 
 |  |  |                         // {field: 'memberBindPhone', title: '联系方式', minWidth: 120,align:'left'}, | 
 |  |  |                         {field: 'goodsName', title: '商品信息', minWidth: 200,align:'left'}, | 
 |  |  |                         {field: 'remark', title: '备注', minWidth: 200,align:'left'}, | 
 |  |  |                         {field: 'amount', title: '订单金额', minWidth: 120,align:'left',totalRow: '{{= parseInt(d.amount) }}'}, | 
 |  |  | 
 |  |  |             return { | 
 |  |  |                 startTime: $searchForm.find('input[name="startTime"]').val().trim(), | 
 |  |  |                 endTime: $searchForm.find('input[name="endTime"]').val().trim(), | 
 |  |  |                 accountLogin: $searchForm.find('input[name="accountLogin"]').val().trim(), | 
 |  |  |                 name: $searchForm.find('input[name="name"]').val().trim(), | 
 |  |  |                 orderNo: $searchForm.find('input[name="orderNo"]').val().trim(), | 
 |  |  |                 goodsName: $searchForm.find('input[name="goodsName"]').val().trim(), | 
 
 |  |  | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="layui-card-body"> | 
 |  |  |                     <blockquote class="layui-elem-quote blue-border">星级每日补贴</blockquote> | 
 |  |  |                     <div class="layui-row layui-col-space10 layui-form-item"> | 
 |  |  |                         <label class="layui-form-label febs-form-item-require">补贴总额:</label> | 
 |  |  |                         <div class="layui-input-block"> | 
 |  |  |                             <input type="text" name="perkAgentAchieveTotal" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" > | 
 |  |  |                             <div class="layui-word-aux">例:15000</div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                     <div class="layui-form-item"> | 
 |  |  |                         <label class="layui-form-label febs-form-item-require">补贴百分比:</label> | 
 |  |  |                         <div class="layui-input-block"> | 
 |  |  |                             <input type="text" name="perkAgentAchievePercent" lay-verify="required" placeholder="请输入数字" autocomplete="off" class="layui-input" > | 
 |  |  |                             <div class="layui-word-aux">例:15%,填写15</div> | 
 |  |  |                         </div> | 
 |  |  |                     </div> | 
 |  |  |                 </div> | 
 |  |  |  | 
 |  |  |                 <div class="layui-card-footer"> | 
 |  |  |                     <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="hlm-basic-perk-submit" id="submit">保存</button> | 
 |  |  | 
 |  |  |  | 
 |  |  |         function initHlmBasicPerkValue() { | 
 |  |  |             form.val("hlm-basic-perk-form", { | 
 |  |  |                 "perkAgentAchieveTotal": hlmBasicPerk.perkAgentAchieveTotal, | 
 |  |  |                 "perkAgentAchievePercent": hlmBasicPerk.perkAgentAchievePercent, | 
 |  |  |                 "sharePerk": hlmBasicPerk.sharePerk, | 
 |  |  |                 "teamPerk": hlmBasicPerk.teamPerk, | 
 |  |  |                 "teamEqualsPerk": hlmBasicPerk.teamEqualsPerk, | 
 
 |  |  | 
 |  |  | @SpringBootTest | 
 |  |  | public class ProfitTest { | 
 |  |  |  | 
 |  |  |     @Autowired | 
 |  |  |     private IAgentService agentService; | 
 |  |  | //    @Autowired | 
 |  |  | //    private AgentConsumer agentConsumer; | 
 |  |  | // | 
 |  |  | 
 |  |  |     private NBYHService nbyhService; | 
 |  |  |     @Autowired | 
 |  |  |     private IAdminMallMemberService mallMemberService; | 
 |  |  |  | 
 |  |  |     @Test | 
 |  |  |     public void agentProfitTrade() { | 
 |  |  | //        try { | 
 |  |  | 
 |  |  | //        nbyhService.tradeSinge(306L); | 
 |  |  | //        nbyhService.tradeSingeOuterTransfer(306L); | 
 |  |  | //        nbyhService.accountInfoQuery(306L); | 
 |  |  | //        nbyhService.transferResultInfoQuery(306L); | 
 |  |  | //        nbyhService.transferResultInfoQuery(315L); | 
 |  |  |  | 
 |  |  | //        mallMemberService.chargeAgree(307L); | 
 |  |  | //        mallMemberService.searchInfo(307L); | 
 |  |  |  | 
 |  |  |         agentService.perkAgent(); | 
 |  |  |     } | 
 |  |  |     @Test | 
 |  |  |     public void agentProfit() { |