From 030e1cca0b8103662a182a4dbe801c063b342630 Mon Sep 17 00:00:00 2001 From: xiaoyong931011 <15274802129@163.com> Date: Thu, 10 Mar 2022 14:44:33 +0800 Subject: [PATCH] 20211201 fish --- src/main/java/com/xcong/excoin/modules/documentary/controller/ViewController.java | 82 + src/main/resources/mapper/modules/FollowFollowerProfitMapper.xml | 9 src/main/resources/mapper/modules/FollowTraderInfoMapper.xml | 30 src/main/resources/mapper/modules/FollowTraderProfitInfoMapper.xml | 15 src/main/resources/mapper/modules/FollowTraderLabelMapper.xml | 9 src/main/java/com/xcong/excoin/modules/member/mapper/MemberWalletCoinMapper.java | 4 src/main/resources/mapper/modules/MemberMapper.xml | 10 src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java | 7 src/main/resources/mapper/modules/OtcOrderAppealMapper.xml | 27 src/main/resources/templates/febs/views/modules/otc/otcEntrustListUpdate.html | 126 + src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java | 122 + src/main/resources/templates/febs/views/modules/documentary/traderProfit.html | 209 ++ src/main/resources/templates/febs/views/modules/otc/otcAppealList.html | 173 ++ src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderInfoMapper.java | 6 src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderLabelEntity.java | 26 src/main/resources/templates/febs/views/modules/otc/otcSettingUpdate.html | 109 + src/main/resources/templates/febs/views/modules/otc/otcShopList.html | 177 ++ src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrderAppealEntity.java | 46 src/main/java/com/xcong/excoin/common/utils/BigDecimalSerialize.java | 31 src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderInfoEntity.java | 41 src/main/java/com/xcong/excoin/modules/otc/controller/ViewController.java | 132 + src/main/java/com/xcong/excoin/modules/otc/mapper/OtcOrderAppealMapper.java | 15 src/main/java/com/xcong/excoin/modules/otc/service/OtcService.java | 49 src/main/resources/templates/febs/views/modules/documentary/seeFollowerInfo.html | 58 src/main/java/com/xcong/excoin/modules/documentary/dto/FollowTraderInfoDto.java | 6 src/main/resources/templates/febs/views/modules/documentary/modifyProfitRatio.html | 122 + src/main/resources/templates/febs/views/modules/otc/otcOrderInfo.html | 109 + src/main/java/com/xcong/excoin/modules/otc/mapper/OtcEntrustOrderMapper.java | 14 src/main/java/com/xcong/excoin/modules/otc/mapper/OtcSettingMapper.java | 14 src/main/java/com/xcong/excoin/modules/documentary/entity/FollowFollowerProfitEntity.java | 48 src/main/java/com/xcong/excoin/modules/otc/entity/OtcEntrustOrderEntity.java | 70 src/main/resources/mapper/modules/OtcMarketBussinessMapper.xml | 26 src/main/resources/templates/febs/views/modules/otc/otcSettingList.html | 126 + src/main/resources/templates/febs/views/modules/documentary/followLabelSet.html | 127 + src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrderEntity.java | 81 + src/main/resources/templates/febs/views/modules/otc/otcOrderList.html | 175 ++ src/main/resources/mapper/modules/OtcEntrustOrderMapper.xml | 29 src/main/resources/templates/febs/views/modules/documentary/traderUpdate.html | 104 + src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowFollowerProfitMapper.java | 17 src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderProfitInfoMapper.java | 7 src/main/resources/templates/febs/views/modules/otc/otcAppealInfo.html | 140 + src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderLabelMapper.java | 15 src/main/resources/templates/febs/views/modules/documentary/followLabelSetDetail.html | 77 + src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java | 264 +++ src/main/java/com/xcong/excoin/modules/otc/mapper/OtcOrderMapper.java | 15 src/main/java/com/xcong/excoin/modules/documentary/vo/SeeFollowerInfoVo.java | 30 src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java | 2 src/main/java/com/xcong/excoin/modules/otc/mapper/OtcMarketBussinessMapper.java | 14 src/main/java/com/xcong/excoin/modules/otc/entity/OtcMarketBussinessEntity.java | 69 src/main/java/com/xcong/excoin/modules/otc/entity/OtcSettingEntity.java | 28 src/main/resources/mapper/modules/OtcSettingMapper.xml | 12 src/main/resources/templates/febs/views/modules/documentary/followLabelSetAdd.html | 67 src/main/resources/templates/febs/views/modules/otc/otcEntrustList.html | 211 ++ src/main/resources/templates/febs/views/modules/otc/otcHuiKuan.html | 93 + src/main/java/com/xcong/excoin/modules/documentary/dto/ModifyProfitRatioDto.java | 16 src/main/resources/mapper/modules/MemberWalletCoinMapper.xml | 16 src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java | 22 src/main/java/com/xcong/excoin/modules/otc/vo/OtcAppealInfoVo.java | 59 src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcServiceImpl.java | 360 ++++ src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java | 62 src/main/resources/mapper/modules/OtcOrderMapper.xml | 31 src/main/java/com/xcong/excoin/modules/otc/controller/OtcController.java | 163 ++ src/main/resources/templates/febs/views/modules/documentary/traderDetail.html | 9 63 files changed, 4,271 insertions(+), 92 deletions(-) diff --git a/src/main/java/com/xcong/excoin/common/utils/BigDecimalSerialize.java b/src/main/java/com/xcong/excoin/common/utils/BigDecimalSerialize.java new file mode 100644 index 0000000..b322163 --- /dev/null +++ b/src/main/java/com/xcong/excoin/common/utils/BigDecimalSerialize.java @@ -0,0 +1,31 @@ +package com.xcong.excoin.common.utils; + +import com.fasterxml.jackson.core.JsonGenerator; + +import com.fasterxml.jackson.databind.JsonSerializer; + +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; + +import java.math.BigDecimal; + +/** + * BigDecimal保留两位小数 + * + */ +public class BigDecimalSerialize extends JsonSerializer<BigDecimal> { + + @Override + public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + if (value != null && !"".equals(value)) { + gen.writeString(((BigDecimal) value).setScale(2, BigDecimal.ROUND_HALF_DOWN) + ""); + + } else { + gen.writeString(value + ""); + + } + + } + +} diff --git a/src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java b/src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java index 0a2028b..4540ff2 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/controller/DocumentaryController.java @@ -5,20 +5,24 @@ import javax.validation.Valid; import javax.validation.constraints.NotNull; +import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity; +import com.xcong.excoin.modules.trademanage.entity.ContractOrderEntity; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.xcong.excoin.common.annotation.ControllerEndpoint; import com.xcong.excoin.common.controller.BaseController; import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; import com.xcong.excoin.modules.documentary.dto.FollowTraderInfoDto; +import com.xcong.excoin.modules.documentary.dto.ModifyProfitRatioDto; import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity; +import com.xcong.excoin.modules.documentary.entity.FollowTraderLabelEntity; import com.xcong.excoin.modules.documentary.service.DocumentaryService; +import com.xcong.excoin.modules.systemSetting.entity.PlatformBannerEntity; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -29,10 +33,50 @@ @RequiredArgsConstructor @RequestMapping(value = "/documentary") public class DocumentaryController extends BaseController { - - private final DocumentaryService documentaryService; - - /** + + private final DocumentaryService documentaryService; + + /** + * 标签---列表 + * @return + */ + @GetMapping("traderLabelList") + public FebsResponse traderLabelList(FollowTraderLabelEntity followTraderLabelEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(documentaryService.traderLabelList(followTraderLabelEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + * 标签---删除 + * @return + */ + @GetMapping("traderLabelDelete/{id}") + @ControllerEndpoint(operation = "标签---删除", exceptionMessage = "删除失败") + public FebsResponse traderLabelDelete(@NotNull(message = "{required}") @PathVariable Long id) { + return documentaryService.traderLabelDelete(id); + } + + /** + * 标签---新增 + */ + @PostMapping("followLabelSetAdd") + @ControllerEndpoint(operation = "标签---新增", exceptionMessage = "新增失败") + public FebsResponse followLabelSetAdd(@Valid FollowTraderLabelEntity followTraderLabelEntity) { + documentaryService.followLabelSetAdd(followTraderLabelEntity); + return new FebsResponse().success(); + } + + /** + * 标签---修改 + */ + @PostMapping("followLabelSetUpdate") + @ControllerEndpoint(operation = "标签---修改", exceptionMessage = "修改失败") + public FebsResponse followLabelSetUpdate(@Valid FollowTraderLabelEntity followTraderLabelEntity) { + documentaryService.followLabelSetUpdate(followTraderLabelEntity); + return new FebsResponse().success(); + } + + /** * 交易员申请---列表 * @return */ @@ -41,7 +85,7 @@ Map<String, Object> data = getDataTable(documentaryService.findTraderListInPage(followTraderInfoEntity, request)); return new FebsResponse().success().data(data); } - + /** * 交易员申请---确认 * @return @@ -51,7 +95,17 @@ public FebsResponse traderConfirm(@Valid FollowTraderInfoDto followTraderInfoDto) { return documentaryService.traderConfirm(followTraderInfoDto); } - + + /** + * 交易员收益率修改---确认 + * @return + */ + @PostMapping("modifyProfitRatio") + @ControllerEndpoint(operation = "交易员收益率修改---确认", exceptionMessage = "修改失败") + public FebsResponse modifyProfitRatio(@Valid ModifyProfitRatioDto modifyProfitRatioDto) { + return documentaryService.modifyProfitRatio(modifyProfitRatioDto); + } + /** * 踢出交易员 * @param id @@ -62,7 +116,27 @@ public FebsResponse traderGetOut(@NotNull(message = "{required}") @PathVariable Long id) { return documentaryService.traderGetOut(id); } - + /** + * 设置成首页交易员 + * @param id + * @return + */ + @GetMapping("traderGetOn/{id}") + @ControllerEndpoint(operation = "设置成首页交易员", exceptionMessage = "设置失败") + public FebsResponse traderGetOn(@NotNull(message = "{required}") @PathVariable Long id) { + return documentaryService.traderGetOn(id); + } + /** + * 设置成首页交易员---取消 + * @param id + * @return + */ + @GetMapping("traderGetOutFrist/{id}") + @ControllerEndpoint(operation = "设置成首页交易员", exceptionMessage = "设置失败") + public FebsResponse traderGetOutFrist(@NotNull(message = "{required}") @PathVariable Long id) { + return documentaryService.traderGetOutFrist(id); + } + /** * 设置成【满员】状态 * @param id @@ -71,7 +145,29 @@ @GetMapping("traderGetFull/{id}") @ControllerEndpoint(operation = "设置成【满员】状态", exceptionMessage = "设置失败") public FebsResponse traderGetFull(@NotNull(message = "{required}") @PathVariable Long id) { - return documentaryService.traderGetFull(id); + return documentaryService.traderGetFull(id); + } + + /** + * 交易员数据---列表---交易员利润分成 + */ + @GetMapping("traderProfitInfo") + public FebsResponse traderProfitInfo(FollowTraderProfitInfoEntity followTraderProfitInfoEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(documentaryService.findTraderProfitInfoInfoInPage(followTraderProfitInfoEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + * 交易员数据---列表---跟单数据详情 + */ + @GetMapping("/seeFollowerInfo") + public FebsResponse seeFollowerInfo(QueryRequest request, FollowTraderProfitInfoEntity followTraderProfitInfoEntity,Integer parentId) { + if(parentId==null){ + ViewController.idFromMember=0; + } + followTraderProfitInfoEntity.setId(ViewController.idFromMember); + Map<String, Object> dataTable = getDataTable(documentaryService.findlistSeeFollowerInfo(request, followTraderProfitInfoEntity)); + return new FebsResponse().success().data(dataTable); } } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/controller/ViewController.java b/src/main/java/com/xcong/excoin/modules/documentary/controller/ViewController.java index df03ba8..f4983b2 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/controller/ViewController.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/controller/ViewController.java @@ -11,18 +11,64 @@ import com.xcong.excoin.common.entity.FebsConstant; import com.xcong.excoin.common.utils.FebsUtil; import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity; +import com.xcong.excoin.modules.documentary.entity.FollowTraderLabelEntity; +import com.xcong.excoin.modules.documentary.mapper.FollowTraderLabelMapper; import com.xcong.excoin.modules.documentary.service.DocumentaryService; import com.xcong.excoin.modules.member.entity.MemberEntity; +import com.xcong.excoin.modules.systemSetting.entity.PlatformTradeSettingEntity; import lombok.RequiredArgsConstructor; @Controller("documentaryView") @RequestMapping(FebsConstant.VIEW_PREFIX + "modules/documentary") @RequiredArgsConstructor public class ViewController extends BaseController{ - - private final DocumentaryService documentaryService; - - /** + + private final DocumentaryService documentaryService; + + private final FollowTraderLabelMapper followTraderLabelMapper; + + public static long idFromMember; + + /** + *交易员利润分成---详情 + */ + @GetMapping("seeFollowerInfo/{id}") + public String seeFollowerInfo(@PathVariable long id, Model model) { + idFromMember = id; + return FebsUtil.view("modules/documentary/seeFollowerInfo"); + } + + /** + * 标签设置 + * @return + */ + @GetMapping("followLabelSet") + @RequiresPermissions("followLabelSet:view") + public String followLabelSet() { + return FebsUtil.view("modules/documentary/followLabelSet"); + } + + /** + * 标签设置---修改 + */ + @GetMapping("followLabelSetUpdate/{id}") + @RequiresPermissions("followLabelSetUpdate:update") + public String followLabelSetUpdate(@PathVariable long id, Model model) { + FollowTraderLabelEntity data = followTraderLabelMapper.selectById(id); + model.addAttribute("member", data); + return FebsUtil.view("modules/documentary/followLabelSetDetail"); + } + + /** + * 标签设置---新增 + */ + @GetMapping("followLabelSetAdd") + @RequiresPermissions("followLabelSetAdd:add") + public String noticeManageAdd() { + return FebsUtil.view("modules/documentary/followLabelSetAdd"); + } + + /** * 交易员申请 * @return */ @@ -31,7 +77,7 @@ public String traderUpdate() { return FebsUtil.view("modules/documentary/traderUpdate"); } - + /** * 交易员申请--审核 * @return @@ -39,9 +85,31 @@ @GetMapping("traderDetail/{id}") @RequiresPermissions("traderDetail:update") public String traderDetail(@PathVariable long id, Model model) { - FollowTraderInfoEntity data = documentaryService.selectTraderDetailByid(id); - model.addAttribute("member", data); + FollowTraderInfoEntity data = documentaryService.selectTraderDetailByid(id); + model.addAttribute("member", data); return FebsUtil.view("modules/documentary/traderDetail"); } + /** + * 交易员收益率修改 + * @return + */ + @GetMapping("modifyProfitRatio/{id}") + @RequiresPermissions("modifyProfitRatio:update") + public String modifyProfitRatio(@PathVariable long id, Model model) { + FollowTraderInfoEntity data = documentaryService.selectTraderDetailByid(id); + model.addAttribute("member", data); + return FebsUtil.view("modules/documentary/modifyProfitRatio"); + } + + /** + * 交易员利润分成 + * @return + */ + @GetMapping("traderProfit") + @RequiresPermissions("traderProfit:view") + public String traderProfit() { + return FebsUtil.view("modules/documentary/traderProfit"); + } + } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dto/FollowTraderInfoDto.java b/src/main/java/com/xcong/excoin/modules/documentary/dto/FollowTraderInfoDto.java index 47d3eb0..9d55936 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/dto/FollowTraderInfoDto.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/dto/FollowTraderInfoDto.java @@ -6,11 +6,13 @@ @Data public class FollowTraderInfoDto { - + @NotNull(message = "ID不能为空") private Long id; - + @NotNull(message = "ID不能为空") private String isok; + private String profitRatio; + } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/dto/ModifyProfitRatioDto.java b/src/main/java/com/xcong/excoin/modules/documentary/dto/ModifyProfitRatioDto.java new file mode 100644 index 0000000..fcb21e6 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/dto/ModifyProfitRatioDto.java @@ -0,0 +1,16 @@ +package com.xcong.excoin.modules.documentary.dto; + +import javax.validation.constraints.NotNull; + +import lombok.Data; +@Data +public class ModifyProfitRatioDto { + + @NotNull(message = "ID不能为空") + private Long id; + + private String profitRatio; + + private String followNum; + +} diff --git a/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowFollowerProfitEntity.java b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowFollowerProfitEntity.java new file mode 100644 index 0000000..e6b0f8a --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowFollowerProfitEntity.java @@ -0,0 +1,48 @@ +package com.xcong.excoin.modules.documentary.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.xcong.excoin.common.entity.BaseEntity; +import com.xcong.excoin.common.utils.BigDecimalSerialize; + +import lombok.Data; +@Data +@TableName("follow_follower_profit") +public class FollowFollowerProfitEntity extends BaseEntity{ + + /** + * + */ + private static final long serialVersionUID = 1L; + public static final Integer IS_FOLLOW_Y = 1; + public static final Integer IS_FOLLOW_N = 2; + + /** + * 跟随者ID + */ + private Long memberId; + /** + * 交易员ID + */ + private Long tradeId; + /** + * 交易员会员ID + */ + private Long tradeMemberId; + /** + * 累计跟随本金 + */ + @JsonSerialize(using = BigDecimalSerialize.class) + private BigDecimal totalPrincipal; + /** + * 累计收益 + */ + @JsonSerialize(using = BigDecimalSerialize.class) + private BigDecimal totalProfit; + /** + * 是否跟随 1-是 2-否 + */ + private Integer isFollow; +} \ No newline at end of file diff --git a/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderInfoEntity.java b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderInfoEntity.java index dafa9b5..f4697bf 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderInfoEntity.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderInfoEntity.java @@ -1,10 +1,14 @@ package com.xcong.excoin.modules.documentary.entity; import java.math.BigDecimal; +import java.util.Date; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.xcong.excoin.common.entity.BaseEntity; +import com.xcong.excoin.common.utils.BigDecimalSerialize; import lombok.Data; @@ -14,12 +18,14 @@ @Data @TableName("follow_trader_info") public class FollowTraderInfoEntity extends BaseEntity{ - /** - * - */ - private static final long serialVersionUID = 1L; - - /** + /** + * + */ + private static final long serialVersionUID = 1L; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date entryTime; + /** * 会员ID */ private Long memberId; @@ -42,8 +48,15 @@ public static final Integer IS_ALL_Y = 1; public static final Integer IS_ALL_N = 2; /** + * 设置成首页 + */ + private Integer isSetFrist; + public static final Integer IS_SETFRIST_Y = 1; + public static final Integer IS_SETFRIST_N = 0; + /** * 利润 */ + @JsonSerialize(using = BigDecimalSerialize.class) private BigDecimal profitRatio; /** * 审核状态 1通过2不通过3待审核 @@ -58,10 +71,15 @@ private Integer isOpen; public static final Integer ISOPEN_Y = 1; public static final Integer ISOPEN_N = 2; - + + /** + * 最大跟随人数 + */ + private Integer followNum; + @TableField(exist = false) private String account; - + @TableField(exist = false) private String realName; @TableField(exist = false) @@ -72,7 +90,7 @@ private String inviteId; @TableField(exist = false) private int accountType; - + @TableField(exist = false) private double walletNum; @TableField(exist = false) @@ -81,6 +99,9 @@ private double agentNum; @TableField(exist = false) private String isok; - + //当前跟随人数 + @TableField(exist = false) + private String followNumNow; + } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderLabelEntity.java b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderLabelEntity.java new file mode 100644 index 0000000..afa9f87 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderLabelEntity.java @@ -0,0 +1,26 @@ +package com.xcong.excoin.modules.documentary.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; + +import lombok.Data; +@Data +@TableName("follow_trader_label") +public class FollowTraderLabelEntity{ + + /** + * + */ + private static final long serialVersionUID = 1L; + + @TableId(value = "id",type = IdType.AUTO) + private Long id; + /** + * 标签 + */ + private String labels; + +} + diff --git a/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java index 52c6d27..fc07672 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/entity/FollowTraderProfitInfoEntity.java @@ -1,20 +1,24 @@ package com.xcong.excoin.modules.documentary.entity; import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.xcong.excoin.common.entity.BaseEntity; +import com.xcong.excoin.common.utils.BigDecimalSerialize; import lombok.Data; @Data @TableName("follow_trader_profit_info") public class FollowTraderProfitInfoEntity extends BaseEntity{ - - /** - * - */ - private static final long serialVersionUID = 1L; - /** + + /** + * + */ + private static final long serialVersionUID = 1L; + /** * 交易员ID */ private Long traderId; @@ -25,28 +29,72 @@ /** * 累计收益率 */ + @JsonSerialize(using = BigDecimalSerialize.class) private BigDecimal totalProfitRatio; /** * 带单总收益 */ + @JsonSerialize(using = BigDecimalSerialize.class) private BigDecimal totalProfit; /** * 跟随者总收益 */ + @JsonSerialize(using = BigDecimalSerialize.class) private BigDecimal followerTotalProfit; /** * 胜率 */ + @JsonSerialize(using = BigDecimalSerialize.class) private BigDecimal winRate; /** * 累计跟随人数 */ + @JsonSerialize(using = BigDecimalSerialize.class) private BigDecimal totalFollowerCnt; /** * 交易笔数 */ + @JsonSerialize(using = BigDecimalSerialize.class) private BigDecimal totalOrderCnt; - + + @TableField(exist = false) + private String account; + + @TableField(exist = false) + private String realName; + /** + * 手机号(包含国际手机号) + */ + @TableField(exist = false) + private String phone; + /** + * 邮箱 + */ + @TableField(exist = false) + private String email; + /** + * 邀请码 + */ + @TableField(exist = false) + private String inviteId; + + /** + * 账号类型 + */ + @TableField(exist = false) + private int accountType; + + /** + * 利润率 + */ + @TableField(exist = false) + private BigDecimal profitRatio; + /** + * 总返利 + */ + @TableField(exist = false) + private BigDecimal profitRatioTotal; + } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowFollowerProfitMapper.java b/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowFollowerProfitMapper.java new file mode 100644 index 0000000..2a49422 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowFollowerProfitMapper.java @@ -0,0 +1,17 @@ +package com.xcong.excoin.modules.documentary.mapper; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity; +import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity; +import com.xcong.excoin.modules.documentary.vo.SeeFollowerInfoVo; + +public interface FollowFollowerProfitMapper extends BaseMapper<FollowFollowerProfitEntity> { + + IPage<SeeFollowerInfoVo> findFollowFollowerProfitInfo(Page<SeeFollowerInfoVo> page, + @Param("record") FollowTraderInfoEntity followTraderInfo); + +} diff --git a/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderInfoMapper.java b/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderInfoMapper.java index 9b785c3..394a707 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderInfoMapper.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderInfoMapper.java @@ -12,4 +12,10 @@ IPage<FollowTraderInfoEntity> findTraderListInPage(Page<FollowTraderInfoEntity> page, @Param("record") FollowTraderInfoEntity followTraderInfoEntity); + String selectProfitRatioTotal(@Param("memberId") Long memberId); + + String selectAllProfitByMemberIdAndTraderMemberId(@Param("memberId")long memberId, @Param("traderMemberId")Long traderMemberId); + + String selectFollowNowBytraderId(@Param("traderId")Long traderId); + } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderLabelMapper.java b/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderLabelMapper.java new file mode 100644 index 0000000..368c2eb --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderLabelMapper.java @@ -0,0 +1,15 @@ +package com.xcong.excoin.modules.documentary.mapper; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.documentary.entity.FollowTraderLabelEntity; + +public interface FollowTraderLabelMapper extends BaseMapper<FollowTraderLabelEntity> { + + IPage<FollowTraderLabelEntity> findFollowTraderLabelEntitysInPage(Page<FollowTraderLabelEntity> page, + @Param("record")FollowTraderLabelEntity followTraderLabelEntity); + +} diff --git a/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderProfitInfoMapper.java b/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderProfitInfoMapper.java index 31eea4f..89b4909 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderProfitInfoMapper.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/mapper/FollowTraderProfitInfoMapper.java @@ -1,8 +1,15 @@ package com.xcong.excoin.modules.documentary.mapper; +import org.apache.ibatis.annotations.Param; + import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity; public interface FollowTraderProfitInfoMapper extends BaseMapper<FollowTraderProfitInfoEntity> { + IPage<FollowTraderProfitInfoEntity> findTraderProfitInfoInfoInPage(Page<FollowTraderProfitInfoEntity> page, + @Param("record")FollowTraderProfitInfoEntity followTraderProfitInfoEntity); + } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java b/src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java index b7bb220..22812c6 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/service/DocumentaryService.java @@ -8,7 +8,11 @@ import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; import com.xcong.excoin.modules.documentary.dto.FollowTraderInfoDto; +import com.xcong.excoin.modules.documentary.dto.ModifyProfitRatioDto; import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity; +import com.xcong.excoin.modules.documentary.entity.FollowTraderLabelEntity; +import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity; +import com.xcong.excoin.modules.documentary.vo.SeeFollowerInfoVo; public interface DocumentaryService extends IService<FollowTraderInfoEntity> { @@ -22,4 +26,22 @@ FebsResponse traderGetFull(@NotNull(message = "{required}") Long id); + IPage<FollowTraderLabelEntity> traderLabelList(FollowTraderLabelEntity followTraderLabelEntity, QueryRequest request); + + FebsResponse traderLabelDelete(@NotNull(message = "{required}") Long id); + + void followLabelSetAdd(@Valid FollowTraderLabelEntity followTraderLabelEntity); + + void followLabelSetUpdate(@Valid FollowTraderLabelEntity followTraderLabelEntity); + + FebsResponse modifyProfitRatio(@Valid ModifyProfitRatioDto modifyProfitRatioDto); + + FebsResponse traderGetOn(@NotNull(message = "{required}") Long id); + + FebsResponse traderGetOutFrist(@NotNull(message = "{required}")Long id); + + IPage<FollowTraderProfitInfoEntity> findTraderProfitInfoInfoInPage(FollowTraderProfitInfoEntity followTraderProfitInfoEntity, + QueryRequest request); + + IPage<SeeFollowerInfoVo> findlistSeeFollowerInfo(QueryRequest request, FollowTraderProfitInfoEntity followTraderProfitInfoEntity); } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java index 0f1fa3b..58667bb 100644 --- a/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java +++ b/src/main/java/com/xcong/excoin/modules/documentary/service/impl/DocumentaryServiceImpl.java @@ -1,16 +1,21 @@ package com.xcong.excoin.modules.documentary.service.impl; import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.validation.Valid; import javax.validation.constraints.NotNull; import com.alibaba.fastjson.JSONObject; +import com.xcong.excoin.common.utils.CoinTypeConvert; import com.xcong.excoin.common.utils.RedisUtils; +import com.xcong.excoin.modules.documentary.vo.SeeFollowerInfoVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -20,9 +25,14 @@ import com.xcong.excoin.common.entity.FebsResponse; import com.xcong.excoin.common.entity.QueryRequest; import com.xcong.excoin.modules.documentary.dto.FollowTraderInfoDto; +import com.xcong.excoin.modules.documentary.dto.ModifyProfitRatioDto; +import com.xcong.excoin.modules.documentary.entity.FollowFollowerProfitEntity; import com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity; +import com.xcong.excoin.modules.documentary.entity.FollowTraderLabelEntity; import com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity; +import com.xcong.excoin.modules.documentary.mapper.FollowFollowerProfitMapper; import com.xcong.excoin.modules.documentary.mapper.FollowTraderInfoMapper; +import com.xcong.excoin.modules.documentary.mapper.FollowTraderLabelMapper; import com.xcong.excoin.modules.documentary.mapper.FollowTraderProfitInfoMapper; import com.xcong.excoin.modules.documentary.service.DocumentaryService; import com.xcong.excoin.modules.member.entity.MemberAuthenticationEntity; @@ -32,6 +42,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -39,25 +50,34 @@ @Service @RequiredArgsConstructor public class DocumentaryServiceImpl extends ServiceImpl<FollowTraderInfoMapper, FollowTraderInfoEntity> implements DocumentaryService { - + private final FollowTraderInfoMapper followTraderInfoMapper; - + + private final FollowFollowerProfitMapper followFollowerProfitMapper; + + private final FollowTraderLabelMapper followTraderLabelMapper; + private final MemberAuthenticationMapper memberAuthenticationMapper; - + private final MemberMapper memberMapper; - + private final FollowTraderProfitInfoMapper followTraderProfitInfoMapper; private final RedisUtils redisUtils; - + @Override public IPage<FollowTraderInfoEntity> findTraderListInPage(FollowTraderInfoEntity followTraderInfoEntity, - QueryRequest request) { + QueryRequest request) { Page<FollowTraderInfoEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); IPage<FollowTraderInfoEntity> followTraderInfoEntitys = followTraderInfoMapper.findTraderListInPage(page, followTraderInfoEntity); List<FollowTraderInfoEntity> records = followTraderInfoEntitys.getRecords(); if(CollUtil.isNotEmpty(records)) { for(FollowTraderInfoEntity followTraderInfo : records) { + //获取当前跟单人数 + Long traderId = followTraderInfo.getId(); + String followNowNumString = followTraderInfoMapper.selectFollowNowBytraderId(traderId); + followTraderInfo.setFollowNumNow(followNowNumString); + Long memberId = followTraderInfo.getMemberId(); Map<String, Object> columnMap = new HashMap<>(); columnMap.put("member_id", memberId); @@ -88,7 +108,7 @@ Integer accountType = memberEntity.getAccountType(); followTraderInfoEntity.setAccountType(accountType); //币币账户 - String walletNum = memberMapper.selectBBZCForBasicRealDataBymemberId(memberId,"USDT"); + String walletNum = memberMapper.selectBBZCForBasicRealDataBymemberId(memberId, "USDT"); followTraderInfoEntity.setWalletNum(walletNum == null ? 0 : Double.parseDouble(walletNum)); //合约账户 String walletCoinNum = memberMapper.selectHYZCForBasicRealDataBymemberId(memberId); @@ -96,7 +116,7 @@ //代理账户 String agentNum = memberMapper.selectDLZCForBasicRealDataBymemberId(memberId); followTraderInfoEntity.setAgentNum(agentNum == null ? 0 : Double.parseDouble(agentNum)); - + Map<String, Object> columnMap = new HashMap<>(); columnMap.put("member_id", memberId); List<MemberAuthenticationEntity> selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); @@ -107,7 +127,7 @@ String realName = firstName + secondName; followTraderInfoEntity.setRealName(realName); } - + return followTraderInfoEntity; } @@ -118,6 +138,14 @@ FollowTraderInfoEntity selectById = followTraderInfoMapper.selectById(id); if(ObjectUtil.isEmpty(selectById)) { return new FebsResponse().fail().message("交易员信息不存在"); + } + BigDecimal profitRatio = BigDecimal.ZERO; + String profitRatioStr = followTraderInfoDto.getProfitRatio(); + if(StrUtil.isNotEmpty(profitRatioStr)) { + profitRatio = new BigDecimal(profitRatioStr); + } + if(profitRatio.compareTo(BigDecimal.ZERO) < 0 || profitRatio.compareTo(BigDecimal.ONE) >= 0){ + return new FebsResponse().fail().message("利润率设置规则:只允许0到1之间的小数"); } String isok = followTraderInfoDto.getIsok(); if("1".equals(isok)) { @@ -130,6 +158,8 @@ memberEntity.setIsTrader(1); memberMapper.updateById(memberEntity); //更新【交易员信息表】数据 + selectById.setProfitRatio(profitRatio); + selectById.setEntryTime(new Date()); selectById.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_Y); followTraderInfoMapper.updateById(selectById); //新增【交易员收益信息 】数据 @@ -152,6 +182,7 @@ redisUtils.set("app_" + token, JSONObject.toJSONString(memberEntity), 36000); }else { //更新【交易员信息表】数据 + selectById.setEntryTime(new Date()); selectById.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_N); followTraderInfoMapper.updateById(selectById); } @@ -159,12 +190,25 @@ } @Override + @Transactional public FebsResponse traderGetOut(@NotNull(message = "{required}") Long id) { FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(id); if(ObjectUtil.isEmpty(followTraderInfoEntity)) { return new FebsResponse().fail().message("交易员信息不存在"); } Long memberId = followTraderInfoEntity.getMemberId(); + + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("trade_member_id", memberId); + List<FollowFollowerProfitEntity> selectByMap = followFollowerProfitMapper.selectByMap(columnMap); + if(CollUtil.isNotEmpty(selectByMap)) { + for(FollowFollowerProfitEntity FollowFollowerProfitEntity : selectByMap ) { + FollowFollowerProfitEntity.setIsFollow(FollowFollowerProfitEntity.IS_FOLLOW_N); + followFollowerProfitMapper.updateById(FollowFollowerProfitEntity); + } + } + followTraderInfoEntity.setVerifyStatus(FollowTraderInfoEntity.VERIFYSTATUS_N); + followTraderInfoMapper.updateById(followTraderInfoEntity); MemberEntity memberEntity = memberMapper.selectById(memberId); memberEntity.setIsTrader(2); memberMapper.updateById(memberEntity); @@ -183,4 +227,206 @@ return new FebsResponse().success(); } + @Override + public IPage<FollowTraderLabelEntity> traderLabelList(FollowTraderLabelEntity followTraderLabelEntity, + QueryRequest request) { + Page<FollowTraderLabelEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<FollowTraderLabelEntity> followTraderLabelEntitys = followTraderLabelMapper.findFollowTraderLabelEntitysInPage(page, followTraderLabelEntity); + return followTraderLabelEntitys; + } + + @Override + public FebsResponse traderLabelDelete(@NotNull(message = "{required}") Long id) { + followTraderLabelMapper.deleteById(id); + return new FebsResponse().success(); + } + + @Override + public void followLabelSetAdd(@Valid FollowTraderLabelEntity followTraderLabelEntity) { + + followTraderLabelMapper.insert(followTraderLabelEntity); + } + + @Override + public void followLabelSetUpdate(@Valid FollowTraderLabelEntity followTraderLabelEntity) { + followTraderLabelMapper.updateById(followTraderLabelEntity); + } + + @Override + @Transactional + public FebsResponse modifyProfitRatio(@Valid ModifyProfitRatioDto modifyProfitRatioDto) { + Long id = modifyProfitRatioDto.getId(); + FollowTraderInfoEntity selectById = followTraderInfoMapper.selectById(id); + if(ObjectUtil.isEmpty(selectById)) { + return new FebsResponse().fail().message("交易员信息不存在"); + } + BigDecimal profitRatio = BigDecimal.ZERO; + String profitRatioStr = modifyProfitRatioDto.getProfitRatio(); + if(StrUtil.isNotEmpty(profitRatioStr)) { + profitRatio = new BigDecimal(profitRatioStr); + } + if(profitRatio.compareTo(BigDecimal.ZERO) < 0 || profitRatio.compareTo(BigDecimal.ONE) >= 0){ + return new FebsResponse().fail().message("利润率设置规则:只允许0到1之间的小数"); + } + //最大跟随人数 + boolean matches = isMatches(modifyProfitRatioDto.getFollowNum()); + if(!matches) { + return new FebsResponse().fail().message("最大跟随人数只能输入正整数"); + } + Integer followNum = Integer.parseInt(modifyProfitRatioDto.getFollowNum()); + if(ObjectUtil.isEmpty(followNum) || followNum == 0) { + return new FebsResponse().fail().message("最大跟随人数不能为0"); + } + + String followNumNow = followTraderInfoMapper.selectFollowNowBytraderId(id); + int parseInt = Integer.parseInt(followNumNow); + if(parseInt > followNum){ + return new FebsResponse().fail().message("请填写大于当前跟随人数"+parseInt+"的整数"); + } + //更新【交易员信息表】数据 + selectById.setProfitRatio(profitRatio); + selectById.setFollowNum(followNum); + followTraderInfoMapper.updateById(selectById); + return new FebsResponse().success(); + } + + public boolean isMatches(String bot){ + boolean flag=false; + try{ + String regex="^[1-9]+[0-9]*$"; + //^[1-9]+\\d*$ + Pattern p=Pattern.compile(regex); + Matcher m=p.matcher(bot); + if(m.find()){ + System.out.println("successss"); + return true; + }else{ + System.out.println("falsss"); + } + }catch(Exception e){ + e.printStackTrace(); + } + return flag; + } + + @Override + public FebsResponse traderGetOn(@NotNull(message = "{required}") Long id) { + FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(id); + if(ObjectUtil.isEmpty(followTraderInfoEntity)) { + return new FebsResponse().fail().message("交易员信息不存在"); + } + followTraderInfoEntity.setIsSetFrist(FollowTraderInfoEntity.IS_SETFRIST_Y); + followTraderInfoMapper.updateById(followTraderInfoEntity); + return new FebsResponse().success(); + } + + @Override + public FebsResponse traderGetOutFrist(@NotNull(message = "{required}") Long id) { + FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(id); + if(ObjectUtil.isEmpty(followTraderInfoEntity)) { + return new FebsResponse().fail().message("交易员信息不存在"); + } + followTraderInfoEntity.setIsSetFrist(FollowTraderInfoEntity.IS_SETFRIST_N); + followTraderInfoMapper.updateById(followTraderInfoEntity); + return new FebsResponse().success(); + } + + @Override + public IPage<FollowTraderProfitInfoEntity> findTraderProfitInfoInfoInPage( + FollowTraderProfitInfoEntity followTraderProfitInfoEntity, QueryRequest request) { + + Page<FollowTraderProfitInfoEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<FollowTraderProfitInfoEntity> FollowTraderProfitInfoEntitys = followTraderProfitInfoMapper.findTraderProfitInfoInfoInPage(page, followTraderProfitInfoEntity); + List<FollowTraderProfitInfoEntity> records = FollowTraderProfitInfoEntitys.getRecords(); + + if(CollUtil.isNotEmpty(records)) { + for(FollowTraderProfitInfoEntity followTraderProfitInfo : records) { + Long traderId = followTraderProfitInfo.getTraderId(); + FollowTraderInfoEntity followTraderInfoEntity = followTraderInfoMapper.selectById(traderId); + //利润率 + BigDecimal profitRatio = BigDecimal.ZERO; + //总返利 + BigDecimal profitRatioTotal = BigDecimal.ZERO; + if(ObjectUtil.isNotEmpty(followTraderInfoEntity)) { + profitRatio = followTraderInfoEntity.getProfitRatio(); + profitRatioTotal = new BigDecimal(followTraderInfoMapper.selectProfitRatioTotal(followTraderInfoEntity.getMemberId())).setScale(2, RoundingMode.HALF_UP); + } + followTraderProfitInfo.setProfitRatio(profitRatio); + followTraderProfitInfo.setProfitRatioTotal(profitRatioTotal); + + Long memberId = followTraderProfitInfo.getMemberId(); + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("member_id", memberId); + List<MemberAuthenticationEntity> selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); + if(CollUtil.isNotEmpty(selectByMap)) { + MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); + String firstName = memberAuthenticationEntity.getFirstName(); + String secondName = memberAuthenticationEntity.getSecondName(); + String realName = firstName + secondName; + followTraderProfitInfo.setRealName(realName); + } + } + } + return FollowTraderProfitInfoEntitys; + } + + @Override + public IPage<SeeFollowerInfoVo> findlistSeeFollowerInfo(QueryRequest request, FollowTraderProfitInfoEntity followTraderProfitInfoEntity) { + + Long id = followTraderProfitInfoEntity.getId(); + if(ObjectUtil.isEmpty(id)) { + return null; + } + //获取交易员信息 + FollowTraderProfitInfoEntity FollowTraderProfitInfo = followTraderProfitInfoMapper.selectById(id); + if(ObjectUtil.isEmpty(FollowTraderProfitInfo)) { + return null; + } + Long traderId = FollowTraderProfitInfo.getTraderId(); + Long traderMemberId = FollowTraderProfitInfo.getMemberId(); + FollowTraderInfoEntity FollowTraderInfo = followTraderInfoMapper.selectById(traderId); + if(ObjectUtil.isEmpty(FollowTraderInfo)) { + return null; + } + //获取当前的跟随者 + Page<SeeFollowerInfoVo> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<SeeFollowerInfoVo> seeFollowerInfoVos = followFollowerProfitMapper.findFollowFollowerProfitInfo(page, FollowTraderInfo); + List<SeeFollowerInfoVo> records = seeFollowerInfoVos.getRecords(); + if(CollUtil.isNotEmpty(records)) { + for(SeeFollowerInfoVo seeFollowerInfoVo : records) { + long memberId = seeFollowerInfoVo.getMemberId(); + MemberEntity memberEntity = memberMapper.selectById(memberId); + if(ObjectUtil.isNotEmpty(memberEntity)) { + String phone = memberEntity.getPhone(); + String email = memberEntity.getEmail(); + String inviteId = memberEntity.getInviteId(); + seeFollowerInfoVo.setPhone(phone); + seeFollowerInfoVo.setEmail(email); + seeFollowerInfoVo.setInviteId(inviteId); + //合约账户总资产 + String totalString = memberMapper.selectMemberWalletContractByMemberId(memberId); + BigDecimal contractTotal = new BigDecimal(totalString); + seeFollowerInfoVo.setContractTotal(contractTotal); + //总返利 + String totalProfitStr = followTraderInfoMapper.selectAllProfitByMemberIdAndTraderMemberId(memberId,traderMemberId); + BigDecimal totalProfit = new BigDecimal(totalProfitStr); + seeFollowerInfoVo.setProfitTotal(totalProfit); + + Map<String, Object> columnMap = new HashMap<>(); + columnMap.put("member_id", memberId); + List<MemberAuthenticationEntity> selectByMap = memberAuthenticationMapper.selectByMap(columnMap ); + if(CollUtil.isNotEmpty(selectByMap)) { + MemberAuthenticationEntity memberAuthenticationEntity = selectByMap.get(0); + String firstName = memberAuthenticationEntity.getFirstName(); + String secondName = memberAuthenticationEntity.getSecondName(); + String realName = firstName + secondName; + seeFollowerInfoVo.setRealName(realName); + } + } + } + } + + return seeFollowerInfoVos; + } + } diff --git a/src/main/java/com/xcong/excoin/modules/documentary/vo/SeeFollowerInfoVo.java b/src/main/java/com/xcong/excoin/modules/documentary/vo/SeeFollowerInfoVo.java new file mode 100644 index 0000000..dc888e6 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/documentary/vo/SeeFollowerInfoVo.java @@ -0,0 +1,30 @@ +package com.xcong.excoin.modules.documentary.vo; + +import java.math.BigDecimal; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.xcong.excoin.common.utils.BigDecimalSerialize; + +import io.swagger.annotations.ApiModel; +import lombok.Data; + +@Data +@ApiModel(value = "SeeFollowerInfoVo", description = "参数返回类") +public class SeeFollowerInfoVo { + private long memberId; + //手机号 + private String phone; + //邮箱 + private String email; + //邀请码 + private String inviteId; + //合约账户总资产 + @JsonSerialize(using = BigDecimalSerialize.class) + private BigDecimal contractTotal; + //总返利 + @JsonSerialize(using = BigDecimalSerialize.class) + private BigDecimal profitTotal; + //姓名 + public String realName; + +} diff --git a/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java b/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java index e68b96f..06cae7a 100644 --- a/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java +++ b/src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java @@ -71,6 +71,12 @@ public static final int IS_PROFIT_N = 0; /** + * 是否是商户1是2否 + */ + public static final int ISTRADER_Y = 1; + public static final int ISTRADER_N = 2; + + /** * 手机号(包含国际手机号) */ private String phone; @@ -143,7 +149,6 @@ /** * 是否是交易员1是2否 */ - @TableField(exist = false) private Integer isTrader; /** diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java index b114500..7a4cb45 100644 --- a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberMapper.java @@ -232,4 +232,6 @@ IPage<MemberEntity> selectDataInfoListSearchs(Page<MemberEntity> page, @Param("record")MemberEntity member); MemberEntity selectMemberByAddress(@Param("address")String address); + + String selectMemberWalletContractByMemberId(@Param("memberId")long memberId); } diff --git a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberWalletCoinMapper.java b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberWalletCoinMapper.java index 1c61502..7374e3f 100644 --- a/src/main/java/com/xcong/excoin/modules/member/mapper/MemberWalletCoinMapper.java +++ b/src/main/java/com/xcong/excoin/modules/member/mapper/MemberWalletCoinMapper.java @@ -5,8 +5,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; +import java.math.BigDecimal; + public interface MemberWalletCoinMapper extends BaseMapper<MemberWalletCoinEntity> { MemberWalletCoinEntity findWalletCoinByMemberIdAndWalletCode(@Param("memberId")Long memberId, @Param("walletCode")String walletCode); + int updateBlockBalance(@Param("availableBalance") BigDecimal availableBalance, @Param("id") Long id); + int reduceFrozenBalance(@Param("amount") BigDecimal amount, @Param("id") Long id); } diff --git a/src/main/java/com/xcong/excoin/modules/otc/controller/OtcController.java b/src/main/java/com/xcong/excoin/modules/otc/controller/OtcController.java new file mode 100644 index 0000000..4335613 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/controller/OtcController.java @@ -0,0 +1,163 @@ +package com.xcong.excoin.modules.otc.controller; + +import com.xcong.excoin.common.annotation.ControllerEndpoint; +import com.xcong.excoin.common.controller.BaseController; +import com.xcong.excoin.common.entity.FebsResponse; +import com.xcong.excoin.common.entity.QueryRequest; +import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; +import com.xcong.excoin.modules.member.entity.MemberEntity; +import com.xcong.excoin.modules.otc.entity.*; +import com.xcong.excoin.modules.otc.service.OtcService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import javax.validation.constraints.NotNull; +import java.util.Map; + +@Slf4j +@Validated +@RestController +@RequiredArgsConstructor +@RequestMapping(value = "/otc") +public class OtcController extends BaseController { + + private final OtcService otcService; + + /** + * 获取商户审核列表 + */ + @GetMapping("otcShopList") + public FebsResponse otcShopList(OtcMarketBussinessEntity otcMarketBussinessEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(otcService.otcShopList(otcMarketBussinessEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + * 商户审核---通过 + * @return + */ + @GetMapping("agreeShop/{id}") + @ControllerEndpoint(operation = "商户审核---通过", exceptionMessage = "通过失败") + public FebsResponse agreeShop(@NotNull(message = "{required}") @PathVariable Long id) { + return otcService.agreeShop(id); + } + + /** + * 商户审核---拒绝 + * @return + */ + @GetMapping("disagreeShop/{id}") + @ControllerEndpoint(operation = "商户审核---通过", exceptionMessage = "通过失败") + public FebsResponse disagreeShop(@NotNull(message = "{required}") @PathVariable Long id) { + return otcService.disagreeShop(id); + } + + /** + * 订单申诉列表 + */ + @GetMapping("otcAppealList") + public FebsResponse otcAppealList(OtcOrderAppealEntity otcOrderAppealEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(otcService.otcAppealList(otcOrderAppealEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + * 申诉---处理中 + * @return + */ + @GetMapping("dealIng/{id}") + @ControllerEndpoint(operation = "申诉---处理中", exceptionMessage = "失败") + public FebsResponse dealIng(@NotNull(message = "{required}") @PathVariable Long id) { + return otcService.dealIng(id); + } + + /** + * 申诉---处理完 + * @return + */ + @GetMapping("dealDone/{id}") + @ControllerEndpoint(operation = "申诉---处理完", exceptionMessage = "失败") + public FebsResponse dealDone(@NotNull(message = "{required}") @PathVariable Long id) { + return otcService.dealDone(id); + } + + /** + * 委托单列表 + */ + @GetMapping("otcEntrustList") + public FebsResponse otcEntrustList(OtcEntrustOrderEntity otcEntrustOrderEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(otcService.otcEntrustList(otcEntrustOrderEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + *委托单--更新 + * @return + */ + @PostMapping("otcEntrustConfirm") + @ControllerEndpoint(operation = "委托单--更新", exceptionMessage = "失败") + public FebsResponse otcEntrustConfirm(@Valid OtcEntrustOrderEntity otcEntrustOrderEntity) { + return otcService.otcEntrustConfirm(otcEntrustOrderEntity); + } + + /** + * 订单列表 + */ + @GetMapping("otcOrderList") + public FebsResponse otcOrderList(OtcOrderEntity otcOrderEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(otcService.otcOrderList(otcOrderEntity, request)); + return new FebsResponse().success().data(data); + } + + /** + *订单列表---付款人 + * @return + */ + @PostMapping("updateOrderInfo") + @ControllerEndpoint(operation = "订单列表---付款人", exceptionMessage = "失败") + public FebsResponse updateOrderInfo(@Valid OtcOrderEntity otcOrderEntity) { + return otcService.updateOrderInfo(otcOrderEntity); + } + + /** + *回款 + * @return + */ + @PostMapping("otcHuiKuan") + @ControllerEndpoint(operation = "订单列表---付款人", exceptionMessage = "失败") + public FebsResponse otcHuiKuan(@Valid OtcMarketBussinessEntity otcMarketBussinessEntity) { + return otcService.otcHuiKuan(otcMarketBussinessEntity); + } + + /** + * 设置列表 + */ + @GetMapping("otcSettingList") + public FebsResponse otcSettingList(OtcSettingEntity otcSettingEntity, QueryRequest request) { + Map<String, Object> data = getDataTable(otcService.otcSettingList(otcSettingEntity, request)); + return new FebsResponse().success().data(data); + } + /** + *设置列表--更新 + * @return + */ + @PostMapping("updateOtcSetting") + @ControllerEndpoint(operation = "设置列表--更新", exceptionMessage = "失败") + public FebsResponse updateOtcSetting(@Valid OtcSettingEntity otcSettingEntity) { + return otcService.updateOtcSetting(otcSettingEntity); + } + + /** + * 放币 + */ + @PostMapping("/reduceCoin/{id}") + @ControllerEndpoint(operation = "放币", exceptionMessage = "失败") + public FebsResponse reduceCoin(@PathVariable("id") Long id) { + otcService.reduceCoin(id); + return new FebsResponse().success(); + } + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/controller/ViewController.java b/src/main/java/com/xcong/excoin/modules/otc/controller/ViewController.java new file mode 100644 index 0000000..3b89a16 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/controller/ViewController.java @@ -0,0 +1,132 @@ +package com.xcong.excoin.modules.otc.controller; + +import com.xcong.excoin.common.entity.FebsConstant; +import com.xcong.excoin.common.utils.FebsUtil; +import com.xcong.excoin.modules.member.vo.MemberAuthenticationVo; +import com.xcong.excoin.modules.otc.entity.OtcEntrustOrderEntity; +import com.xcong.excoin.modules.otc.entity.OtcMarketBussinessEntity; +import com.xcong.excoin.modules.otc.entity.OtcOrderEntity; +import com.xcong.excoin.modules.otc.entity.OtcSettingEntity; +import com.xcong.excoin.modules.otc.service.OtcService; +import com.xcong.excoin.modules.otc.vo.OtcAppealInfoVo; +import lombok.RequiredArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller("otcView") +@RequestMapping(FebsConstant.VIEW_PREFIX + "modules/otc") +@RequiredArgsConstructor +public class ViewController { + + private final OtcService otcService; + + /** + * 获取商户审核列表 + */ + @GetMapping("otcShopList") + @RequiresPermissions("otcShopList:view") + public String otcShopList() { + return FebsUtil.view("modules/otc/otcShopList"); + } + + /** + * 获取委托单列表 + */ + @GetMapping("otcEntrustList") + @RequiresPermissions("otcEntrustList:view") + public String otcEntrustList() { + return FebsUtil.view("modules/otc/otcEntrustList"); + } + + + + /** + * 获取委托单列表--详情 + */ + @GetMapping("otcEntrustListUpdate/{id}") + @RequiresPermissions("otcEntrustListUpdate:update") + public String otcEntrustListUpdate(@PathVariable long id, Model model) { + OtcEntrustOrderEntity data = otcService.otcEntrustListUpdate(id); + model.addAttribute("member", data); + return FebsUtil.view("modules/otc/otcEntrustListUpdate"); + } + + + /** + * 获取订单列表 + */ + @GetMapping("otcOrderList") + @RequiresPermissions("otcOrderList:view") + public String otcOrderList() { + return FebsUtil.view("modules/otc/otcOrderList"); + } + + /** + * 获取订单列表--详情 + */ + @GetMapping("otcOrderInfo/{id}") + @RequiresPermissions("otcOrderInfo:update") + public String otcOrderInfo(@PathVariable long id, Model model) { + OtcOrderEntity data = otcService.otcOrderInfo(id); + model.addAttribute("member", data); + return FebsUtil.view("modules/otc/otcOrderInfo"); + } + + /** + * 获取申诉列表 + */ + @GetMapping("otcAppealList") + @RequiresPermissions("otcAppealList:view") + public String otcAppealList() { + return FebsUtil.view("modules/otc/otcAppealList"); + } + + /** + * 获取申诉列表--详情 + */ + @GetMapping("otcAppealInfo/{id}") + @RequiresPermissions("otcAppealInfo:update") + public String otcAppealInfo(@PathVariable long id, Model model) { + OtcAppealInfoVo data = otcService.otcAppealInfo(id); + model.addAttribute("member", data); + return FebsUtil.view("modules/otc/otcAppealInfo"); + } + + /** + * 商户回款 + */ + @GetMapping("otcHuiKuan/{id}") + @RequiresPermissions("otcHuiKuan:update") + public String otcHuiKuan(@PathVariable long id, Model model) { + OtcMarketBussinessEntity data = otcService.otcHuiKuan(id); + model.addAttribute("member", data); + return FebsUtil.view("modules/otc/otcHuiKuan"); + } + + /** + * 获取OTC设置 + */ + @GetMapping("otcSettingList") + @RequiresPermissions("otcSettingList:view") + public String otcSettingList() { + return FebsUtil.view("modules/otc/otcSettingList"); + } + + /** + * OTC设置--详情 + */ + @GetMapping("otcSettingUpdate/{id}") + @RequiresPermissions("otcSettingUpdate:update") + public String otcSettingUpdate(@PathVariable long id, Model model) { + OtcSettingEntity data = otcService.otcSettingUpdate(id); + model.addAttribute("member", data); + return FebsUtil.view("modules/otc/otcSettingUpdate"); + } + + + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcEntrustOrderEntity.java b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcEntrustOrderEntity.java new file mode 100644 index 0000000..21d179d --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcEntrustOrderEntity.java @@ -0,0 +1,70 @@ +package com.xcong.excoin.modules.otc.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; +import lombok.Data; + +import java.math.BigDecimal; + +//otc委托单 +@Data +@TableName("otc_entrust_order") +public class OtcEntrustOrderEntity extends BaseEntity { + + //会员ID + private long memberId; + + //委托单号 + private String entrustOrderNo; + + //市商ID + private long mbId; + + //单价 + private BigDecimal unitPrice; + + //数量 + private BigDecimal coinAmount; + + //剩余数量 + private BigDecimal remainCoinAmount; + + //最小限额 + private BigDecimal limitMinAmount; + + //最大限额 + private BigDecimal limitMaxAmount; + + //委托单类型 B-买S-卖 + private String orderType; + public static final String ORDERTYPE_B = "B"; + public static final String ORDERTYPE_S = "S"; + + //上下线 1-上线2-下线 3-取消 + private Integer status; + public static final Integer STATUS_ONE = 1; + public static final Integer STATUS_TWO = 2; + + //是否市商 1-是 2-否 + private Integer isMb; + + //委托总金额 + private BigDecimal totalAmount; + + @TableField(exist = false) + private String account; + + @TableField(exist = false) + private String phone; + + @TableField(exist = false) + private String inviteId; + + @TableField(exist = false) + private String realName; + + @TableField(exist = false) + private String nikename; + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcMarketBussinessEntity.java b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcMarketBussinessEntity.java new file mode 100644 index 0000000..ef2d9ff --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcMarketBussinessEntity.java @@ -0,0 +1,69 @@ +package com.xcong.excoin.modules.otc.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; +import lombok.Data; + +import java.math.BigDecimal; + +//市商信息表 +@Data +@TableName("otc_market_bussiness") +public class OtcMarketBussinessEntity extends BaseEntity { + + //会员ID + private long memberId; + + //昵称 + private String nikename; + + //宣言 + private String declaration; + + //审核状态 1-待审核2-审核通过3-审核拒绝 + private Integer status; + public static final Integer STATUS_ONE = 1; + public static final Integer STATUS_TWO = 2; + public static final Integer STATUS_THREE = 3; + + //服务人数 + private Integer buyCnt; + + //总单数 + private Integer totalOrderCnt; + + //完成率 + private BigDecimal finishRatio; + + //待回款 + private BigDecimal waitBackMoney; + + //已回款 + private BigDecimal hasBackMoney; + + //平均付款时间 + private Integer avgPayTime; + + //平均放币时间 + private Integer avgCoinTime; + + @TableField(exist = false) + private String account; + + @TableField(exist = false) + private String phone; + + @TableField(exist = false) + private String inviteId; + + @TableField(exist = false) + private String realName; + /** + * 本次回款 + */ + @TableField(exist = false) + private BigDecimal coinAmount; + + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrderAppealEntity.java b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrderAppealEntity.java new file mode 100644 index 0000000..3077bc0 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrderAppealEntity.java @@ -0,0 +1,46 @@ +package com.xcong.excoin.modules.otc.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; +import lombok.Data; + +//订单申诉表 +@Data +@TableName("otc_order_appeal") +public class OtcOrderAppealEntity extends BaseEntity { + + //会员ID + private long memberId; + + //订单ID + private long orderId; + + //申诉原因 + private String reason; + + //申诉内容 + private String content; + + //申诉状态 1:待处理 2:处理中 3:已处理 + private Integer status; + public static final Integer STATUS_ONE = 1; + public static final Integer STATUS_TWO = 2; + public static final Integer STATUS_THREE = 3; + + @TableField(exist = false) + private String account; + + @TableField(exist = false) + private String phone; + + @TableField(exist = false) + private String inviteId; + + @TableField(exist = false) + private String realName; + + @TableField(exist = false) + private String orderNo; + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrderEntity.java b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrderEntity.java new file mode 100644 index 0000000..fca7632 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcOrderEntity.java @@ -0,0 +1,81 @@ +package com.xcong.excoin.modules.otc.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +//交易订单 +@Data +@TableName("otc_order") +public class OtcOrderEntity extends BaseEntity { + + //会员ID + private long memberId; + + //订单编号 + private String orderNo; + + //单价 + private BigDecimal unitPrice; + + //交易数量 + private BigDecimal coinAmount; + + //交易总额 + private BigDecimal totalAmount; + + //订单状态 1-已提交未付款2-已付款3-已完成4-已取消 + private Integer status; + public static final Integer STATUS_ONE = 1; + public static final Integer STATUS_TWO = 2; + public static final Integer STATUS_THREE = 3; + public static final Integer STATUS_FOUR = 4; + + //委托单类型 B-买S-卖 + private String orderType; + public static final String ORDERTYPE_B = "B"; + public static final String ORDERTYPE_S = "S"; + + //付款时间 + private Date payTime; + + //完成时间 + private Date finishTime; + + //委托单ID + private long entrustOrderId; + + //市商ID + private long mbId; + + //支付市商ID + private long payMbId; + + //付款人姓名 + private String payName; + + @TableField(exist = false) + private String account; + + @TableField(exist = false) + private String phone; + + @TableField(exist = false) + private String inviteId; + + @TableField(exist = false) + private String realName; + + @TableField(exist = false) + private String nickname; + + /** + * 对面的用户ID + */ + private Long oppositeMemberId; + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/entity/OtcSettingEntity.java b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcSettingEntity.java new file mode 100644 index 0000000..32bac29 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/entity/OtcSettingEntity.java @@ -0,0 +1,28 @@ +package com.xcong.excoin.modules.otc.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.xcong.excoin.common.entity.BaseEntity; +import lombok.Data; + +import java.math.BigDecimal; + +//条件设置 +@Data +@TableName("otc_setting") +public class OtcSettingEntity { + + private long id; + + //商家入驻总单数 + private Integer orderNum; + + //商家入驻完成率 + private BigDecimal completionRate; + + //商家入驻总金额 + private BigDecimal totalAmount; + + //今日累计取消次数 + private Integer cancellNum; + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcEntrustOrderMapper.java b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcEntrustOrderMapper.java new file mode 100644 index 0000000..409540e --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcEntrustOrderMapper.java @@ -0,0 +1,14 @@ +package com.xcong.excoin.modules.otc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.otc.entity.OtcEntrustOrderEntity; +import org.apache.ibatis.annotations.Param; + +public interface OtcEntrustOrderMapper extends BaseMapper<OtcEntrustOrderEntity> { + + IPage<OtcEntrustOrderEntity> otcEntrustList(Page<OtcEntrustOrderEntity> page, + @Param("record")OtcEntrustOrderEntity otcEntrustOrderEntity); + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcMarketBussinessMapper.java b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcMarketBussinessMapper.java new file mode 100644 index 0000000..58df3b8 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcMarketBussinessMapper.java @@ -0,0 +1,14 @@ +package com.xcong.excoin.modules.otc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.otc.entity.OtcMarketBussinessEntity; +import org.apache.ibatis.annotations.Param; + +public interface OtcMarketBussinessMapper extends BaseMapper<OtcMarketBussinessEntity> { + + IPage<OtcMarketBussinessEntity> otcShopList(Page<OtcMarketBussinessEntity> page, + @Param("record")OtcMarketBussinessEntity otcMarketBussinessEntity); + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcOrderAppealMapper.java b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcOrderAppealMapper.java new file mode 100644 index 0000000..713c3d3 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcOrderAppealMapper.java @@ -0,0 +1,15 @@ +package com.xcong.excoin.modules.otc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.otc.entity.OtcMarketBussinessEntity; +import com.xcong.excoin.modules.otc.entity.OtcOrderAppealEntity; +import org.apache.ibatis.annotations.Param; + +public interface OtcOrderAppealMapper extends BaseMapper<OtcOrderAppealEntity> { + + IPage<OtcOrderAppealEntity> otcAppealList(Page<OtcOrderAppealEntity> page, + @Param("record")OtcOrderAppealEntity otcOrderAppealEntity); + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcOrderMapper.java b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcOrderMapper.java new file mode 100644 index 0000000..63948b8 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcOrderMapper.java @@ -0,0 +1,15 @@ +package com.xcong.excoin.modules.otc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.otc.entity.OtcOrderEntity; +import org.apache.ibatis.annotations.Param; + +public interface OtcOrderMapper extends BaseMapper<OtcOrderEntity> { + + IPage<OtcOrderEntity> otcOrderList(Page<OtcOrderEntity> page, + @Param("record")OtcOrderEntity otcOrderEntity); + + int updateOrderStatusByOrderNo(@Param("status") Integer status, @Param("orderNo") String orderNo); +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcSettingMapper.java b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcSettingMapper.java new file mode 100644 index 0000000..933717c --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/mapper/OtcSettingMapper.java @@ -0,0 +1,14 @@ +package com.xcong.excoin.modules.otc.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.xcong.excoin.modules.otc.entity.OtcSettingEntity; +import org.apache.ibatis.annotations.Param; + +public interface OtcSettingMapper extends BaseMapper<OtcSettingEntity> { + + IPage<OtcSettingEntity> otcSettingList(Page<OtcSettingEntity> page, + @Param("record")OtcSettingEntity otcSettingEntity); + +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/OtcService.java b/src/main/java/com/xcong/excoin/modules/otc/service/OtcService.java new file mode 100644 index 0000000..7bfb197 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/service/OtcService.java @@ -0,0 +1,49 @@ +package com.xcong.excoin.modules.otc.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.xcong.excoin.common.entity.FebsResponse; +import com.xcong.excoin.common.entity.QueryRequest; +import com.xcong.excoin.modules.otc.entity.*; +import com.xcong.excoin.modules.otc.vo.OtcAppealInfoVo; + +public interface OtcService extends IService<OtcMarketBussinessEntity> { + + IPage<OtcMarketBussinessEntity> otcShopList(OtcMarketBussinessEntity otcMarketBussinessEntity, QueryRequest request); + + FebsResponse agreeShop(Long id); + + FebsResponse disagreeShop(Long id); + + IPage<OtcOrderAppealEntity> otcAppealList(OtcOrderAppealEntity otcOrderAppealEntity, QueryRequest request); + + FebsResponse dealDone(Long id); + + FebsResponse dealIng(Long id); + + IPage<OtcEntrustOrderEntity> otcEntrustList(OtcEntrustOrderEntity otcEntrustOrderEntity, QueryRequest request); + + IPage<OtcOrderEntity> otcOrderList(OtcOrderEntity otcOrderEntity, QueryRequest request); + + OtcAppealInfoVo otcAppealInfo(long id); + + OtcOrderEntity otcOrderInfo(long id); + + FebsResponse updateOrderInfo(OtcOrderEntity otcOrderEntity); + + OtcMarketBussinessEntity otcHuiKuan(long id); + + FebsResponse otcHuiKuan(OtcMarketBussinessEntity otcMarketBussinessEntity); + + IPage<OtcSettingEntity> otcSettingList(OtcSettingEntity otcSettingEntity, QueryRequest request); + + OtcSettingEntity otcSettingUpdate(long id); + + FebsResponse updateOtcSetting(OtcSettingEntity otcSettingEntity); + + int reduceCoin(Long id); + + OtcEntrustOrderEntity otcEntrustListUpdate(long id); + + FebsResponse otcEntrustConfirm(OtcEntrustOrderEntity otcEntrustOrderEntity); +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcServiceImpl.java b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcServiceImpl.java new file mode 100644 index 0000000..a90136b --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/service/impl/OtcServiceImpl.java @@ -0,0 +1,360 @@ +package com.xcong.excoin.modules.otc.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.xcong.excoin.common.entity.FebsResponse; +import com.xcong.excoin.common.entity.QueryRequest; +import com.xcong.excoin.modules.member.entity.MemberAccountMoneyChangeEntity; +import com.xcong.excoin.modules.member.entity.MemberEntity; +import com.xcong.excoin.modules.member.entity.MemberWalletCoinEntity; +import com.xcong.excoin.modules.member.mapper.MemberMapper; +import com.xcong.excoin.modules.member.mapper.MemberWalletCoinMapper; +import com.xcong.excoin.modules.otc.entity.*; +import com.xcong.excoin.modules.otc.mapper.*; +import com.xcong.excoin.modules.otc.service.OtcService; +import com.xcong.excoin.modules.otc.vo.OtcAppealInfoVo; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +@Service +@RequiredArgsConstructor +public class OtcServiceImpl extends ServiceImpl<OtcMarketBussinessMapper, OtcMarketBussinessEntity> implements OtcService { + + @Resource + private OtcMarketBussinessMapper otcMarketBussinessMapper; + @Resource + private OtcOrderAppealMapper otcOrderAppealMapper; + @Resource + private OtcEntrustOrderMapper otcEntrustOrderMapper; + @Resource + private OtcOrderMapper otcOrderMapper; + @Resource + private OtcSettingMapper otcSettingMapper; + @Resource + private MemberWalletCoinMapper memberWalletCoinMapper; + @Resource + private MemberMapper memberMapper; + + @Override + public IPage<OtcMarketBussinessEntity> otcShopList(OtcMarketBussinessEntity otcMarketBussinessEntity, QueryRequest request) { + Page<OtcMarketBussinessEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<OtcMarketBussinessEntity> otcMarketBussinessEntitys = otcMarketBussinessMapper.otcShopList(page, otcMarketBussinessEntity); + return otcMarketBussinessEntitys; + } + + @Override + @Transactional + public FebsResponse agreeShop(Long id) { + OtcMarketBussinessEntity otcMarketBussinessEntity = otcMarketBussinessMapper.selectById(id); + Integer status = otcMarketBussinessEntity.getStatus(); + if(OtcMarketBussinessEntity.STATUS_ONE != status){ + return new FebsResponse().fail().message("当前状态不是待审核"); + } + otcMarketBussinessEntity.setStatus(OtcMarketBussinessEntity.STATUS_TWO); + otcMarketBussinessMapper.updateById(otcMarketBussinessEntity); + + long memberId = otcMarketBussinessEntity.getMemberId(); + MemberEntity memberEntity = memberMapper.selectById(memberId); + memberEntity.setIsTrader(MemberEntity.ISTRADER_Y); + memberMapper.updateById(memberEntity); + return new FebsResponse().success(); + } + + @Override + @Transactional + public FebsResponse disagreeShop(Long id) { + OtcMarketBussinessEntity otcMarketBussinessEntity = otcMarketBussinessMapper.selectById(id); + Integer status = otcMarketBussinessEntity.getStatus(); + if(OtcMarketBussinessEntity.STATUS_ONE != status){ + return new FebsResponse().fail().message("当前状态不是待审核"); + } + otcMarketBussinessEntity.setStatus(OtcMarketBussinessEntity.STATUS_THREE); + otcMarketBussinessMapper.updateById(otcMarketBussinessEntity); + + long memberId = otcMarketBussinessEntity.getMemberId(); + MemberEntity memberEntity = memberMapper.selectById(memberId); + memberEntity.setIsTrader(MemberEntity.ISTRADER_Y); + memberMapper.updateById(memberEntity); + return new FebsResponse().success(); + } + + @Override + public IPage<OtcOrderAppealEntity> otcAppealList(OtcOrderAppealEntity otcOrderAppealEntity, QueryRequest request) { + Page<OtcOrderAppealEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<OtcOrderAppealEntity> otcOrderAppealEntitys = otcOrderAppealMapper.otcAppealList(page, otcOrderAppealEntity); + return otcOrderAppealEntitys; + } + + @Override + @Transactional + public FebsResponse dealDone(Long id) { + OtcOrderAppealEntity otcOrderAppealEntity = otcOrderAppealMapper.selectById(id); + Integer status = otcOrderAppealEntity.getStatus(); + if(OtcOrderAppealEntity.STATUS_TWO != status){ + return new FebsResponse().fail().message("当前状态不是处理中"); + } + + otcOrderAppealEntity.setStatus(OtcOrderAppealEntity.STATUS_THREE); + otcOrderAppealMapper.updateById(otcOrderAppealEntity); + return new FebsResponse().success(); + } + + @Override + @Transactional + public FebsResponse dealIng(Long id) { + OtcOrderAppealEntity otcOrderAppealEntity = otcOrderAppealMapper.selectById(id); + Integer status = otcOrderAppealEntity.getStatus(); + if(OtcOrderAppealEntity.STATUS_ONE != status){ + return new FebsResponse().fail().message("当前状态不是待处理"); + } + + otcOrderAppealEntity.setStatus(OtcOrderAppealEntity.STATUS_TWO); + otcOrderAppealMapper.updateById(otcOrderAppealEntity); + return new FebsResponse().success(); + } + + @Override + public IPage<OtcEntrustOrderEntity> otcEntrustList(OtcEntrustOrderEntity otcEntrustOrderEntity, QueryRequest request) { + Page<OtcEntrustOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<OtcEntrustOrderEntity> otcEntrustOrderEntitys = otcEntrustOrderMapper.otcEntrustList(page, otcEntrustOrderEntity); + return otcEntrustOrderEntitys; + } + + @Override + public IPage<OtcOrderEntity> otcOrderList(OtcOrderEntity otcOrderEntity, QueryRequest request) { + Page<OtcOrderEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<OtcOrderEntity> otcOrderEntitys = otcOrderMapper.otcOrderList(page, otcOrderEntity); + return otcOrderEntitys; + } + + @Override + public OtcAppealInfoVo otcAppealInfo(long id) { + OtcAppealInfoVo otcAppealInfoVo = new OtcAppealInfoVo(); + + OtcOrderAppealEntity otcOrderAppealEntity = otcOrderAppealMapper.selectById(id); + otcAppealInfoVo.setId(id); + if(ObjectUtil.isNotEmpty(otcOrderAppealEntity)){ + String reason = otcOrderAppealEntity.getReason(); + otcAppealInfoVo.setReason(reason); + String content = otcOrderAppealEntity.getContent(); + List arr = Arrays.asList(content.split(",")); + otcAppealInfoVo.setContent(arr); + } + //获取对应的订单详情 + long orderId = otcOrderAppealEntity.getOrderId(); + OtcOrderEntity otcOrderEntity = otcOrderMapper.selectById(orderId); + if(ObjectUtil.isNotEmpty(otcOrderEntity)){ + String orderNo = otcOrderEntity.getOrderNo(); + otcAppealInfoVo.setOrderNo(orderNo); + BigDecimal unitPrice = otcOrderEntity.getUnitPrice(); + otcAppealInfoVo.setUnitPrice(unitPrice); + BigDecimal coinAmount = otcOrderEntity.getCoinAmount(); + otcAppealInfoVo.setCoinAmount(coinAmount); + BigDecimal totalAmount = otcOrderEntity.getTotalAmount(); + otcAppealInfoVo.setTotalAmount(totalAmount); + Integer status = otcOrderEntity.getStatus(); + otcAppealInfoVo.setStatus(status); + Date payTime = otcOrderEntity.getPayTime(); + otcAppealInfoVo.setPayTime(payTime); + Date finishTime = otcOrderEntity.getFinishTime(); + otcAppealInfoVo.setFinishTime(finishTime); + } + //获取对应的商户信息 + long payMdId = otcOrderEntity.getPayMbId(); + OtcMarketBussinessEntity otcMarketBussinessEntity = otcMarketBussinessMapper.selectById(payMdId); + if(ObjectUtil.isNotEmpty(otcMarketBussinessEntity)){ + String nikename = otcMarketBussinessEntity.getNikename(); + otcAppealInfoVo.setNikename(nikename); + } + return otcAppealInfoVo; + } + + @Override + public OtcOrderEntity otcOrderInfo(long id) { + OtcOrderEntity otcOrderEntity = otcOrderMapper.selectById(id); + return otcOrderEntity; + } + + @Override + @Transactional + public FebsResponse updateOrderInfo(OtcOrderEntity otcOrderEntity) { + Long id = otcOrderEntity.getId(); + OtcOrderEntity otcOrder = otcOrderMapper.selectById(id); + if(ObjectUtil.isEmpty(otcOrder)){ + return new FebsResponse().fail().message("连接超时,请刷新页面重试"); + } + Integer status = otcOrder.getStatus(); + if(OtcOrderEntity.STATUS_ONE != status){ + return new FebsResponse().fail().message("当前订单不是待付款状态"); + } + String payName = otcOrderEntity.getPayName(); + if(StrUtil.isEmpty(payName)){ + return new FebsResponse().fail().message("请输入付款人"); + } + BigDecimal coinAmount = otcOrderEntity.getCoinAmount(); + /** + * 获取订单信息--订单编号 + * 获取买单和买单 + * 更新payName字段 + * 更新订单状态 + */ + QueryWrapper<OtcOrderEntity> queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("order_no",otcOrder.getOrderNo()); + List<OtcOrderEntity> list = otcOrderMapper.selectList(queryWrapper); + if(CollUtil.isNotEmpty(list)){ + for(OtcOrderEntity order : list){ + order.setStatus(OtcOrderEntity.STATUS_TWO); + order.setPayName(payName); + order.setPayTime(DateUtil.date()); + otcOrderMapper.updateById(order); + } + } + return new FebsResponse().success(); + } + + @Override + public OtcMarketBussinessEntity otcHuiKuan(long id) { + return otcMarketBussinessMapper.selectById(id); + } + + @Override + @Transactional + public FebsResponse otcHuiKuan(OtcMarketBussinessEntity otcMarketBussinessEntity) { + Long id = otcMarketBussinessEntity.getId(); + OtcMarketBussinessEntity otcMarketBussiness = otcMarketBussinessMapper.selectById(id); + if(ObjectUtil.isNotEmpty(otcMarketBussiness)){ + return new FebsResponse().fail().message("连接超时,请刷新页面重试"); + } + BigDecimal coinAmount = otcMarketBussinessEntity.getCoinAmount(); + if(coinAmount.compareTo(BigDecimal.ZERO) <= 0){ + return new FebsResponse().fail().message("请输入正确的回款金额"); + } + BigDecimal waitBackMoney = otcMarketBussiness.getWaitBackMoney(); + if(coinAmount.compareTo(waitBackMoney) > 0){ + return new FebsResponse().fail().message("请输入正确的回款金额"); + } + /** + * 增加已回款金额 + * 减少待回款金额 + * 增加汇款记录 + */ + BigDecimal hasBackMoney = otcMarketBussiness.getHasBackMoney(); + BigDecimal add = hasBackMoney.add(coinAmount); + otcMarketBussiness.setHasBackMoney(add); + + BigDecimal subtract = waitBackMoney.subtract(coinAmount); + otcMarketBussiness.setWaitBackMoney(subtract); + otcMarketBussinessMapper.updateById(otcMarketBussiness); + + return new FebsResponse().success(); + } + + @Override + public IPage<OtcSettingEntity> otcSettingList(OtcSettingEntity otcSettingEntity, QueryRequest request) { + Page<OtcSettingEntity> page = new Page<>(request.getPageNum(), request.getPageSize()); + IPage<OtcSettingEntity> otcSettingEntitys = otcSettingMapper.otcSettingList(page, otcSettingEntity); + return otcSettingEntitys; + } + + @Override + public OtcSettingEntity otcSettingUpdate(long id) { + return otcSettingMapper.selectById(id); + } + + @Override + public FebsResponse updateOtcSetting(OtcSettingEntity otcSettingEntity) { + Integer orderNum = otcSettingEntity.getOrderNum(); + if(ObjectUtil.isEmpty(orderNum) || orderNum < 0){ + return new FebsResponse().fail().message("请设置正确的总单数"); + } + BigDecimal completionRate = otcSettingEntity.getCompletionRate(); + if(ObjectUtil.isEmpty(completionRate) || completionRate.compareTo(BigDecimal.ZERO) < 0){ + return new FebsResponse().fail().message("请设置正确的完成率"); + } + BigDecimal totalAmount = otcSettingEntity.getTotalAmount(); + if(ObjectUtil.isEmpty(totalAmount) || totalAmount.compareTo(BigDecimal.ZERO) < 0){ + return new FebsResponse().fail().message("请设置正确的总金额"); + } + + Integer cancellNum = otcSettingEntity.getCancellNum(); + if(ObjectUtil.isEmpty(cancellNum) || cancellNum < 0){ + return new FebsResponse().fail().message("请设置正确的取消次数"); + } + otcSettingMapper.updateById(otcSettingEntity); + return new FebsResponse().success(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int reduceCoin(Long id) { + OtcOrderEntity order = otcOrderMapper.selectById(id); + + MemberWalletCoinEntity saleWallet = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(order.getMemberId(), "USDT"); + MemberWalletCoinEntity buyWallet = memberWalletCoinMapper.findWalletCoinByMemberIdAndWalletCode(order.getOppositeMemberId(), "USDT"); + + memberWalletCoinMapper.updateBlockBalance(order.getCoinAmount(), buyWallet.getId()); + memberWalletCoinMapper.reduceFrozenBalance(order.getCoinAmount(), saleWallet.getId()); + + otcOrderMapper.updateOrderStatusByOrderNo(OtcOrderEntity.STATUS_THREE, order.getOrderNo()); + return 1; + } + + @Override + public OtcEntrustOrderEntity otcEntrustListUpdate(long id) { + return otcEntrustOrderMapper.selectById(id); + } + + @Override + public FebsResponse otcEntrustConfirm(OtcEntrustOrderEntity otcEntrustOrderEntity) { + Long id = otcEntrustOrderEntity.getId(); + OtcEntrustOrderEntity otcEntrustOrder = otcEntrustOrderMapper.selectById(id); + BigDecimal unitPrice = otcEntrustOrderEntity.getUnitPrice(); + if(ObjectUtil.isEmpty(unitPrice) || unitPrice.compareTo(BigDecimal.ZERO) < 0){ + return new FebsResponse().fail().message("请设置正确的单价"); + } + otcEntrustOrder.setUnitPrice(unitPrice); + BigDecimal coinAmount = otcEntrustOrderEntity.getCoinAmount(); + if(ObjectUtil.isEmpty(coinAmount) || coinAmount.compareTo(BigDecimal.ZERO) < 0){ + return new FebsResponse().fail().message("请设置正确的数量"); + } + otcEntrustOrder.setCoinAmount(coinAmount); + BigDecimal totalAmount = coinAmount.multiply(unitPrice); + otcEntrustOrder.setTotalAmount(totalAmount); + + BigDecimal remainCoinAmount = otcEntrustOrderEntity.getRemainCoinAmount(); + if(ObjectUtil.isEmpty(remainCoinAmount) || remainCoinAmount.compareTo(BigDecimal.ZERO) < 0 + || totalAmount.compareTo(remainCoinAmount) < 0){ + return new FebsResponse().fail().message("请设置正确的剩余数量"); + } + otcEntrustOrder.setRemainCoinAmount(remainCoinAmount); + BigDecimal limitMinAmount = otcEntrustOrderEntity.getLimitMinAmount(); + if(ObjectUtil.isEmpty(limitMinAmount) || limitMinAmount.compareTo(BigDecimal.ZERO) < 0){ + return new FebsResponse().fail().message("请设置正确的最小限额"); + } + otcEntrustOrder.setLimitMinAmount(limitMinAmount); + BigDecimal limitMaxAmount = otcEntrustOrderEntity.getLimitMaxAmount(); + if(ObjectUtil.isEmpty(limitMaxAmount) || limitMaxAmount.compareTo(BigDecimal.ZERO) < 0 + || limitMaxAmount.compareTo(limitMinAmount) < 0 || totalAmount.compareTo(limitMaxAmount) < 0){ + return new FebsResponse().fail().message("请设置正确的最大限额"); + } + otcEntrustOrder.setLimitMaxAmount(limitMaxAmount); + otcEntrustOrder.setStatus(otcEntrustOrderEntity.getStatus()); + otcEntrustOrderMapper.updateById(otcEntrustOrder); + + return new FebsResponse().success(); + } +} diff --git a/src/main/java/com/xcong/excoin/modules/otc/vo/OtcAppealInfoVo.java b/src/main/java/com/xcong/excoin/modules/otc/vo/OtcAppealInfoVo.java new file mode 100644 index 0000000..b8520f4 --- /dev/null +++ b/src/main/java/com/xcong/excoin/modules/otc/vo/OtcAppealInfoVo.java @@ -0,0 +1,59 @@ +package com.xcong.excoin.modules.otc.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +@Data +@ApiModel(value = "OtcAppealInfoVo", description = "参数返回类") +public class OtcAppealInfoVo { + + private long id; + + //订单编号 + private String orderNo; + + //单价 + private BigDecimal unitPrice; + + //交易数量 + private BigDecimal coinAmount; + + //交易总额 + private BigDecimal totalAmount; + + //订单状态 1-已提交未付款2-已付款3-已完成4-已取消 + private Integer status; + public static final Integer STATUS_ONE = 1; + public static final Integer STATUS_TWO = 2; + public static final Integer STATUS_THREE = 3; + public static final Integer STATUS_FOUR = 4; + + //付款时间 + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date payTime; + + //完成时间 + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date finishTime; + + + //昵称 + private String nikename; + + + + //申诉原因 + private String reason; + + //申诉图片 + private List<String> content; + + +} diff --git a/src/main/resources/mapper/modules/FollowFollowerProfitMapper.xml b/src/main/resources/mapper/modules/FollowFollowerProfitMapper.xml new file mode 100644 index 0000000..148f975 --- /dev/null +++ b/src/main/resources/mapper/modules/FollowFollowerProfitMapper.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.documentary.mapper.FollowFollowerProfitMapper"> + <select id="findFollowFollowerProfitInfo" resultType="com.xcong.excoin.modules.documentary.vo.SeeFollowerInfoVo"> + select * from follow_follower_profit s left join member m on m.id = s.member_id + where s.trade_id = #{record.id} and s.trade_member_id = #{record.memberId} + order by s.create_time desc + </select> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/FollowTraderInfoMapper.xml b/src/main/resources/mapper/modules/FollowTraderInfoMapper.xml index aaffab4..0c7e880 100644 --- a/src/main/resources/mapper/modules/FollowTraderInfoMapper.xml +++ b/src/main/resources/mapper/modules/FollowTraderInfoMapper.xml @@ -2,19 +2,31 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xcong.excoin.modules.documentary.mapper.FollowTraderInfoMapper"> - <select id="findTraderListInPage" resultType="com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity"> - select * from follow_trader_info s left join member m on m.id = s.member_id - <where> - <if test="record != null" > + <select id="findTraderListInPage" resultType="com.xcong.excoin.modules.documentary.entity.FollowTraderInfoEntity"> + select * from follow_trader_info s left join member m on m.id = s.member_id + <where> + <if test="record != null" > <if test="record.account!=null and record.account!=''"> - and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account}) + and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account}) </if> <if test="record.verifyStatus!=null and record.verifyStatus!=''"> and s.verify_status= #{record.verifyStatus} </if> </if> - </where> - order by s.create_time desc - </select> - + </where> + order by s.create_time desc + </select> + + <select id="selectFollowNowBytraderId" resultType="java.lang.String"> + select COUNT(a.id) from follow_follower_setting a where a.trader_id = #{traderId} + </select> + + <select id="selectProfitRatioTotal" resultType="java.lang.String"> + select IFNULL(SUM(f.amount),'0') as amount from follow_trader_profit_detail f where f.member_id = #{memberId} + </select> + + <select id="selectAllProfitByMemberIdAndTraderMemberId" resultType="java.lang.String"> + select IFNULL(SUM(f.amount),'0') as amount from follow_trader_profit_detail f where f.member_id = #{traderMemberId} and f.follow_member_id = #{memberId} + </select> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/FollowTraderLabelMapper.xml b/src/main/resources/mapper/modules/FollowTraderLabelMapper.xml new file mode 100644 index 0000000..04b1142 --- /dev/null +++ b/src/main/resources/mapper/modules/FollowTraderLabelMapper.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.documentary.mapper.FollowTraderLabelMapper"> + + <select id="findFollowTraderLabelEntitysInPage" resultType="com.xcong.excoin.modules.documentary.entity.FollowTraderLabelEntity"> + select * from follow_trader_label s + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/FollowTraderProfitInfoMapper.xml b/src/main/resources/mapper/modules/FollowTraderProfitInfoMapper.xml index 6047e9b..8ec5c96 100644 --- a/src/main/resources/mapper/modules/FollowTraderProfitInfoMapper.xml +++ b/src/main/resources/mapper/modules/FollowTraderProfitInfoMapper.xml @@ -2,5 +2,18 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.xcong.excoin.modules.documentary.mapper.FollowTraderProfitInfoMapper"> - + <select id="findTraderProfitInfoInfoInPage" resultType="com.xcong.excoin.modules.documentary.entity.FollowTraderProfitInfoEntity"> + select * from follow_trader_profit_info t + left join follow_trader_info s on s.id = t.trader_id + left join member m on m.id = t.member_id + <where> + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account}) + </if> + </if> + </where> + order by s.create_time desc + </select> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberMapper.xml b/src/main/resources/mapper/modules/MemberMapper.xml index 09f23da..5bd1daa 100644 --- a/src/main/resources/mapper/modules/MemberMapper.xml +++ b/src/main/resources/mapper/modules/MemberMapper.xml @@ -1512,5 +1512,13 @@ or m.phone = #{address} or m.email = #{address} </select> - + + <select id="selectMemberWalletContractByMemberId" resultType="java.lang.String"> + SELECT + total_balance + FROM + member_wallet_contract where member_id = #{memberId} + </select> + + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/MemberWalletCoinMapper.xml b/src/main/resources/mapper/modules/MemberWalletCoinMapper.xml index 5980ed9..64fcaaa 100644 --- a/src/main/resources/mapper/modules/MemberWalletCoinMapper.xml +++ b/src/main/resources/mapper/modules/MemberWalletCoinMapper.xml @@ -7,4 +7,20 @@ select * from member_wallet_coin where member_id = #{memberId} and wallet_code = #{walletCode} </select> + + <update id="updateBlockBalance"> + update member_wallet_coin + set + available_balance = IFNULL(available_balance, 0) + #{availableBalance}, + total_balance = IFNULL(total_balance, 0) + #{availableBalance} + where id=#{id} + </update> + + <update id="reduceFrozenBalance"> + update member_wallet_coin + set frozen_balance = frozen_balance - #{amount}, + total_balance = total_balance - #{amount} + where id=#{id} + </update> + </mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/OtcEntrustOrderMapper.xml b/src/main/resources/mapper/modules/OtcEntrustOrderMapper.xml new file mode 100644 index 0000000..203aa55 --- /dev/null +++ b/src/main/resources/mapper/modules/OtcEntrustOrderMapper.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.otc.mapper.OtcEntrustOrderMapper"> + + <select id="otcEntrustList" resultType="com.xcong.excoin.modules.otc.entity.OtcEntrustOrderEntity"> + SELECT + *, + concat(b.first_name,b.second_name) realName + FROM + otc_entrust_order a + LEFT JOIN member m ON m.id = a.member_id + LEFT JOIN member_authentication b ON b.member_id = a.member_id + <where> + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account}) + </if> + <if test="record.orderType!=null and record.orderType!=''"> + and a.order_type= #{record.orderType} + </if> + <if test="record.status!=null and record.status!=''"> + and a.status= #{record.status} + </if> + </if> + </where> + order by m.create_time desc + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/OtcMarketBussinessMapper.xml b/src/main/resources/mapper/modules/OtcMarketBussinessMapper.xml new file mode 100644 index 0000000..a965248 --- /dev/null +++ b/src/main/resources/mapper/modules/OtcMarketBussinessMapper.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.otc.mapper.OtcMarketBussinessMapper"> + + <select id="otcShopList" resultType="com.xcong.excoin.modules.otc.entity.OtcMarketBussinessEntity"> + SELECT + *, + concat(b.first_name,b.second_name) realName + FROM + otc_market_bussiness a + LEFT JOIN member m ON m.id = a.member_id + LEFT JOIN member_authentication b ON b.member_id = a.member_id + <where> + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account}) + </if> + <if test="record.status!=null and record.status!=''"> + and a.status= #{record.status} + </if> + </if> + </where> + order by m.create_time desc + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/OtcOrderAppealMapper.xml b/src/main/resources/mapper/modules/OtcOrderAppealMapper.xml new file mode 100644 index 0000000..53c6158 --- /dev/null +++ b/src/main/resources/mapper/modules/OtcOrderAppealMapper.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.otc.mapper.OtcOrderAppealMapper"> + + <select id="otcAppealList" resultType="com.xcong.excoin.modules.otc.entity.OtcOrderAppealEntity"> + SELECT + *, + concat(b.first_name,b.second_name) realName + FROM + otc_order_appeal a + LEFT JOIN member m ON m.id = a.member_id + LEFT JOIN member_authentication b ON b.member_id = a.member_id + LEFT JOIN otc_order c ON c.id = a.order_id + <where> + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account}) + </if> + <if test="record.status!=null and record.status!=''"> + and a.status= #{record.status} + </if> + </if> + </where> + order by m.create_time desc + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/OtcOrderMapper.xml b/src/main/resources/mapper/modules/OtcOrderMapper.xml new file mode 100644 index 0000000..4b9b5b6 --- /dev/null +++ b/src/main/resources/mapper/modules/OtcOrderMapper.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.otc.mapper.OtcOrderMapper"> + + <select id="otcOrderList" resultType="com.xcong.excoin.modules.otc.entity.OtcOrderEntity"> + SELECT + *, + concat(b.first_name,b.second_name) realName + FROM + otc_order a + LEFT JOIN member m ON m.id = a.member_id + LEFT JOIN member_authentication b ON b.member_id = a.member_id + <where> + <if test="record != null" > + <if test="record.account!=null and record.account!=''"> + and (m.phone = #{record.account} or m.email = #{record.account} or m.invite_id=#{record.account}) + </if> + <if test="record.status!=null and record.status!=''"> + and a.status= #{record.status} + </if> + </if> + </where> + order by a.create_time desc + </select> + + <update id="updateOrderStatusByOrderNo"> + update otc_order + set status=#{status} + where order_no=#{orderNo} + </update> +</mapper> \ No newline at end of file diff --git a/src/main/resources/mapper/modules/OtcSettingMapper.xml b/src/main/resources/mapper/modules/OtcSettingMapper.xml new file mode 100644 index 0000000..e9a517e --- /dev/null +++ b/src/main/resources/mapper/modules/OtcSettingMapper.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.xcong.excoin.modules.otc.mapper.OtcSettingMapper"> + + <select id="otcSettingList" resultType="com.xcong.excoin.modules.otc.entity.OtcSettingEntity"> + SELECT + * + FROM + otc_setting + </select> + +</mapper> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/documentary/followLabelSet.html b/src/main/resources/templates/febs/views/modules/documentary/followLabelSet.html new file mode 100644 index 0000000..3becc3a --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/documentary/followLabelSet.html @@ -0,0 +1,127 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="交易员标签"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="user-table-form"> + <div class="layui-row"> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="add"> + 新增 + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit" shiro:hasPermission="user:update">编辑 + <i class="layui-icon febs-edit-area febs-blue"></i> + </button> + <button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="delete" shiro:hasPermission="user:update">删除 + <i class="layui-icon febs-edit-area febs-blue"></i> + </button> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + laydate = layui.laydate, + febs = layui.febs, + form = layui.form, + table = layui.table, + dropdown = layui.dropdown, + $view = $('#febs-user'), + $reset = $view.find('#reset'), + $add = $view.find('#add'), + $searchForm = $view.find('form'), + sortObject = {field: 'title', type: null}, + tableIns + ; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + + if (layEvent === 'edit') { + febs.modal.open('修改', 'modules/documentary/followLabelSetUpdate/' + data.id, { + btn: ['提交', '取消'], + yes: function (index, layero) { + $('#user-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + if (layEvent === 'delete') { + febs.modal.confirm('删除', '您是否确认删除?', function () { + deleteUsers(data.id); + }); + } + }); + + function deleteUsers(id) { + febs.get(ctx + 'documentary/traderLabelDelete/' + id, null, function () { + febs.alert.success('确认删除'); + $reset.click(); + }); + } + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + $add.on('click', function () { + febs.modal.open('新增', 'modules/documentary/followLabelSetAdd/', { + btn: ['提交', '取消'], + yes: function (index, layero) { + $('#user-add').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + }); + + + // 获取查询参数 + function getQueryParams() { + return {}; + } + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'documentary/traderLabelList', + cols: [[ + {field: 'id', title: '', minWidth: 10,align:'center'}, + {field: 'labels', title: '更新内容', minWidth: 120,align:'center'}, + {title: '操作', toolbar: '#user-option', minWidth: 140, fixed : 'right'} + ]] + }); + } + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/documentary/followLabelSetAdd.html b/src/main/resources/templates/febs/views/modules/documentary/followLabelSetAdd.html new file mode 100644 index 0000000..5fbf557 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/documentary/followLabelSetAdd.html @@ -0,0 +1,67 @@ +<style> + #user-add { + padding: 20px 25px 25px 0; + } + + #user-add .layui-treeSelect .ztree li a, .ztree li span { + margin: 0 0 2px 3px !important; + } + #user-add #data-permission-tree-block { + border: 1px solid #eee; + border-radius: 2px; + padding: 3px 0; + } + #user-add .layui-treeSelect .ztree li span.button.switch { + top: 1px; + left: 3px; + } + +</style> +<div class="layui-fluid" id="user-add"> + <form class="layui-form" action="" lay-filter="user-add-form"> + <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"> + <label class="layui-form-label febs-form-item-require">标签内容:</label> + <div class="layui-input-block"> + <input type="text" name="labels" lay-verify="range|labels" + autocomplete="off" class="layui-input" > + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="user-add-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, + $view = $('#user-add'), + validate = layui.validate, + _deptTree; + + form.render(); + + formSelects.render(); + + form.on('submit(user-add-form-submit)', function (data) { + febs.post(ctx + 'documentary/followLabelSetAdd', data.field, function () { + layer.closeAll(); + febs.alert.success('新增成功'); + $('#febs-user').find('#reset').click(); + }); + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/documentary/followLabelSetDetail.html b/src/main/resources/templates/febs/views/modules/documentary/followLabelSetDetail.html new file mode 100644 index 0000000..dffec7a --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/documentary/followLabelSetDetail.html @@ -0,0 +1,77 @@ +<style> + #user-update { + padding: 20px 25px 25px 0; + } + + #user-update .layui-treeSelect .ztree li a, .ztree li span { + margin: 0 0 2px 3px !important; + } + #user-update #data-permission-tree-block { + border: 1px solid #eee; + border-radius: 2px; + padding: 3px 0; + } + #user-add .layui-treeSelect .ztree li span.button.switch { + top: 1px; + left: 3px; + } + +</style> +<div class="layui-fluid" id="user-update"> + <form class="layui-form" action="" lay-filter="user-update-form"> + <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" data-th-value="${member.id}" > + </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="labels" data-th-id="${member.labels}" lay-verify="range|labels" + autocomplete="off" class="layui-input" > + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="user-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, + member = [[${member}]], + $view = $('#user-update'), + validate = layui.validate, + _deptTree; + + form.render(); + + initUserValue(); + + formSelects.render(); + + function initUserValue() { + form.val("user-update-form", { + "labels": member.labels, + "id": member.id + }); + } + + form.on('submit(user-update-form-submit)', function (data) { + febs.post(ctx + 'documentary/followLabelSetUpdate', data.field, function () { + layer.closeAll(); + febs.alert.success('设置成功'); + $('#febs-user').find('#reset').click(); + }); + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/documentary/modifyProfitRatio.html b/src/main/resources/templates/febs/views/modules/documentary/modifyProfitRatio.html new file mode 100644 index 0000000..0f99626 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/documentary/modifyProfitRatio.html @@ -0,0 +1,122 @@ +<style> + #user-update { + padding: 20px 25px 25px 0; + } + + #user-update .layui-treeSelect .ztree li a, .ztree li span { + margin: 0 0 2px 3px !important; + } + #user-update #data-permission-tree-block { + border: 1px solid #eee; + border-radius: 2px; + padding: 3px 0; + } + #user-add .layui-treeSelect .ztree li span.button.switch { + top: 1px; + left: 3px; + } + +</style> +<div class="layui-fluid" id="user-update"> + <form class="layui-form" action="" lay-filter="user-update-form"> + <div class="layui-form-item"> + <div style="text-align: center;color:red"> + 利润率设置规则:只允许0到1之间的小数 + </div> + </div> + <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" data-th-value="${member.id}"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">利润率:</label> + <div class="layui-input-block"> + <input type="text" name="profitRatio" data-th-id="${member.profitRatio}" + lay-verify="range|profitRatio" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item"> + <div style="text-align: center;color:red"> + 最大跟随人数规则:请填写大于0的整数 + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">跟随人数:</label> + <div class="layui-input-block"> + <input type="text" name="followNum" data-th-id="${member.followNum}" + lay-verify="range|followNum" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">币币账户总余额:</label> + <div class="layui-input-block"> + <input type="text" name="walletNum" minlength="4" maxlength="10" data-th-id="${member.walletNum}" + lay-verify="range|walletNum" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">合约账户总余额:</label> + <div class="layui-input-block"> + <input type="text" name="walletCoinNum" minlength="4" maxlength="10" data-th-id="${member.walletCoinNum}" + lay-verify="range|walletCoinNum" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label">币币账户总余额:</label> + <div class="layui-input-block"> + <input type="text" name="agentNum" minlength="4" maxlength="10" data-th-id="${member.agentNum}" + lay-verify="range|agentNum" autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="user-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, + member = [[${member}]], + $view = $('#user-update'), + validate = layui.validate, + _deptTree; + + form.render(); + + initUserValue(); + + formSelects.render(); + + function initUserValue() { + form.val("user-update-form", { + "id": member.id, + "profitRatio": member.profitRatio, + "realName": member.realName, + "phone": member.phone, + "email": member.email, + "agentNum": member.agentNum, + "walletCoinNum": member.walletCoinNum, + "walletNum": member.walletNum, + "followNum": member.followNum + }); + } + + form.on('submit(user-update-form-submit)', function (data) { + febs.post(ctx + 'documentary/modifyProfitRatio', data.field, function () { + layer.closeAll(); + febs.alert.success('修改成功'); + $('#febs-user').find('#query').click(); + }); + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/documentary/seeFollowerInfo.html b/src/main/resources/templates/febs/views/modules/documentary/seeFollowerInfo.html new file mode 100644 index 0000000..28d12ed --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/documentary/seeFollowerInfo.html @@ -0,0 +1,58 @@ + +<div class="layui-fluid layui-anim febs-anim" id="febs-user-child" lay-title="跟单数据详情"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <table lay-filter="userTableChild" lay-data="{id: 'userTableChild'}"></table> + </div> + </div> + </div> + </div> +</div> +<script data-th-inline="none" type="text/javascript"> + layui.use(['dropdown', 'jquery', 'laydate', 'form', 'table', 'febs', 'treeSelect' ,'eleTree'], function () { + var $ = layui.jquery, + laydate = layui.laydate, + febs = layui.febs, + form = layui.form, + table = layui.table, + treeSelect = layui.treeSelect, + dropdown = layui.dropdown, + $view = $('#febs-user-child'), + $query = $view.find('#queryChild'), + $searchForm = $view.find('formChild'), + sortObject = {field: 'createTime', type: null}, + tableIns, + createTimeFrom, + createTimeTo; + + form.render(); + + initTable(); + + laydate.render({ + elem: '#user-createTime', + range: true, + trigger: 'click' + }); + + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'documentary/seeFollowerInfo?parentId=1', + cols: [[ + {field: 'phone', title: '手机号', minWidth: 100,align:'left'}, + {field: 'email', title: '邮箱', minWidth: 100,align:'left'}, + {field: 'realName', title: '姓名', minWidth: 100,align:'left'}, + {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'}, + {field: 'contractTotal', title: '合约账户总资产', minWidth: 150,align:'left'}, + {field: 'profitTotal', title: '总返利金额', minWidth: 150,align:'center'}, + ]] + }); + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/documentary/traderDetail.html b/src/main/resources/templates/febs/views/modules/documentary/traderDetail.html index a8af392..cd059e7 100644 --- a/src/main/resources/templates/febs/views/modules/documentary/traderDetail.html +++ b/src/main/resources/templates/febs/views/modules/documentary/traderDetail.html @@ -19,6 +19,11 @@ </style> <div class="layui-fluid" id="user-update"> <form class="layui-form" action="" lay-filter="user-update-form"> + <div class="layui-form-item"> + <div style="text-align: center;color:red"> + 利润率设置规则:只允许0到1之间的小数 + </div> + </div> <div class="layui-form-item febs-hide"> <label class="layui-form-label febs-form-item-require">用户id:</label> <div class="layui-input-block"> @@ -28,8 +33,8 @@ <div class="layui-form-item"> <label class="layui-form-label">利润率:</label> <div class="layui-input-block"> - <input type="text" name="profitRatio" minlength="4" maxlength="10" data-th-id="${member.profitRatio}" - lay-verify="range|profitRatio" autocomplete="off" class="layui-input" readonly> + <input type="text" name="profitRatio" data-th-id="${member.profitRatio}" + lay-verify="range|profitRatio" autocomplete="off" class="layui-input"> </div> </div> <div class="layui-form-item"> diff --git a/src/main/resources/templates/febs/views/modules/documentary/traderProfit.html b/src/main/resources/templates/febs/views/modules/documentary/traderProfit.html new file mode 100644 index 0000000..aa7f12d --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/documentary/traderProfit.html @@ -0,0 +1,209 @@ +<div class="layui-fluid layui-anim febs-anim" id="trader-profit" lay-title="交易员利润分成"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="user-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邮箱/邀请码" name="account" autocomplete="off" class="layui-input"> + </div> + </div> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#trader-profit'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + + if (layEvent === 'edit') { + febs.modal.open('交易员审核', 'modules/documentary/traderDetail/' + data.id, { + btn: ['确认', '取消'], + yes: function (index, layero) { + $('#user-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + + if (layEvent === 'seeFollowerInfo') { + febs.modal.open('跟随者详情', 'modules/documentary/seeFollowerInfo/' + data.id, { + area: $(window).width() <= 750 ? '90%' : '80%', + offset: '30px', + btn2: function () { + layer.closeAll(); + }, + cancel: function(){ + var index=parent.layer.getFrameIndex(window.name); //获取当前窗口的name + parent.layer.close(index);//关闭当前窗口 + window.parent.location.reload();//刷新 + } + }); + $query.click(); + } + if (layEvent === 'modifyProfitRatio') { + febs.modal.open('收益率修改', 'modules/documentary/modifyProfitRatio/' + data.id, { + btn: ['确认', '取消'], + yes: function (index, layero) { + $('#user-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + $query.click(); + } + if (layEvent === 'getOut') { + febs.modal.confirm('确认', '您是否要踢出该交易员?', function () { + confirmUsers(data.id); + }); + } + if (layEvent === 'getOn') { + febs.modal.confirm('确认', '您是否推荐当前交易员?', function () { + confirmUsersGetOn(data.id); + }); + } + if (layEvent === 'getOutFrist') { + febs.modal.confirm('确认', '您是否取消推荐当前交易员?', function () { + confirmUsersGetOutFrist(data.id); + }); + } + if (layEvent === 'getFull') { + febs.modal.confirm('确认', '您是否要设置成【满员】状态?', function () { + cancelUsers(data.id); + }); + } + }); + + function confirmUsers(id) { + febs.get(ctx + 'documentary/traderGetOut/' + id, null, function () { + febs.alert.success('踢出成功'); + $query.click(); + }); + } + function confirmUsersGetOn(id) { + febs.get(ctx + 'documentary/traderGetOn/' + id, null, function () { + febs.alert.success('设置成功'); + $query.click(); + }); + } + function confirmUsersGetOutFrist(id) { + febs.get(ctx + 'documentary/traderGetOutFrist/' + id, null, function () { + febs.alert.success('设置成功'); + $query.click(); + }); + } + function cancelUsers(id) { + febs.get(ctx + 'documentary/traderGetFull/' + id, null, function () { + febs.alert.success('设置成功'); + $query.click(); + }); + } + + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + tableIns.reload({where: getQueryParams(), page: {curr: 1}}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'documentary/traderProfitInfo', + cols: [[ + {field: 'phone', title: '手机号', minWidth: 100,align:'left'}, + {field: 'realName', title: '姓名', minWidth: 100,align:'left'}, + {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'}, + {field: 'profitRatio', title: '利润率', minWidth: 80,align:'center'}, + {field: 'profitRatioTotal', title: '总返利润', minWidth: 80,align:'center'}, + {title: '利润详情', + templet: function (d) { + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeFollowerInfo" shiro:hasPermission="user:update">查看</button>' + }, minWidth: 100,align:'center'}, + {field: 'totalProfitRatio', title: '累计收益率', minWidth: 80,align:'center'}, + {field: 'totalProfit', title: '带单总收益', minWidth: 80,align:'center'}, + {field: 'followerTotalProfit', title: '跟随者总收益', minWidth: 80,align:'center'}, + {field: 'winRate', title: '胜率', minWidth: 80,align:'center'}, + {field: 'totalFollowerCnt', title: '累计跟随人数', minWidth: 80,align:'center'}, + {field: 'totalOrderCnt', title: '交易笔数', minWidth: 80,align:'center'}, + {field: 'accountType', title: '账号类型', + templet: function (d) { + if (d.accountType === 2) { + return '<span style="color:green;">测试账号</span>' + } else if (d.accountType === 1) { + return '<span style="color:red;">正常账号</span>' + }else{ + return '' + } + }, minWidth: 80,align:'center'}, + {field: 'email', title: '邮箱', minWidth: 100,align:'left'}, + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/documentary/traderUpdate.html b/src/main/resources/templates/febs/views/modules/documentary/traderUpdate.html index 5ed47b1..5cd48cd 100644 --- a/src/main/resources/templates/febs/views/modules/documentary/traderUpdate.html +++ b/src/main/resources/templates/febs/views/modules/documentary/traderUpdate.html @@ -17,8 +17,9 @@ <div class="layui-input-inline"> <select name="verifyStatus"> <option value="">请选择</option> - <option value="1">待审核</option> - <option value="2">审核通过</option> + <option value="1">审核通过</option> + <option value="2">审核不通过</option> + <option value="3">待审核</option> </select> </div> </div> @@ -72,7 +73,7 @@ table.on('tool(userTable)', function (obj) { var data = obj.data, layEvent = obj.event; - + if (layEvent === 'edit') { febs.modal.open('交易员审核', 'modules/documentary/traderDetail/' + data.id, { btn: ['确认', '取消'], @@ -84,31 +85,64 @@ } }); } + if (layEvent === 'modifyProfitRatio') { + febs.modal.open('修改', 'modules/documentary/modifyProfitRatio/' + data.id, { + btn: ['确认', '取消'], + yes: function (index, layero) { + $('#user-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } if (layEvent === 'getOut') { febs.modal.confirm('确认', '您是否要踢出该交易员?', function () { - confirmUsers(data.id); + confirmUsers(data.id); + }); + } + if (layEvent === 'getOn') { + febs.modal.confirm('确认', '您是否推荐当前交易员?', function () { + confirmUsersGetOn(data.id); + }); + } + if (layEvent === 'getOutFrist') { + febs.modal.confirm('确认', '您是否取消推荐当前交易员?', function () { + confirmUsersGetOutFrist(data.id); }); } if (layEvent === 'getFull') { febs.modal.confirm('确认', '您是否要设置成【满员】状态?', function () { - cancelUsers(data.id); + cancelUsers(data.id); }); } }); - + function confirmUsers(id) { febs.get(ctx + 'documentary/traderGetOut/' + id, null, function () { - febs.alert.success('踢出成功'); + febs.alert.success('踢出成功'); + $query.click(); + }); + } + function confirmUsersGetOn(id) { + febs.get(ctx + 'documentary/traderGetOn/' + id, null, function () { + febs.alert.success('设置成功'); + $query.click(); + }); + } + function confirmUsersGetOutFrist(id) { + febs.get(ctx + 'documentary/traderGetOutFrist/' + id, null, function () { + febs.alert.success('设置成功'); $query.click(); }); } function cancelUsers(id) { febs.get(ctx + 'documentary/traderGetFull/' + id, null, function () { - febs.alert.success('设置成功'); + febs.alert.success('设置成功'); $query.click(); }); } - + // 查询按钮 $query.on('click', function () { @@ -129,12 +163,15 @@ url: ctx + 'documentary/traderList', cols: [[ {field: 'phone', title: '手机号', minWidth: 100,align:'left'}, - {field: 'email', title: '邮箱', minWidth: 200,align:'left'}, - {field: 'realName', title: '姓名', minWidth: 200,align:'left'}, + {field: 'email', title: '邮箱', minWidth: 100,align:'left'}, + {field: 'realName', title: '姓名', minWidth: 100,align:'left'}, + {field: 'nickname', title: '昵称', minWidth: 100,align:'left'}, {field: 'inviteId', title: '邀请码UID', minWidth: 80,align:'center'}, {field: 'profitRatio', title: '利润率', minWidth: 80,align:'center'}, + {field: 'followNumNow', title: '当前跟随人数', minWidth: 120,align:'center'}, + {field: 'followNum', title: '最大跟随人数', minWidth: 120,align:'center'}, {field: 'accountType', title: '账号类型', - templet: function (d) { + templet: function (d) { if (d.accountType === 2) { return '<span style="color:green;">测试账号</span>' } else if (d.accountType === 1) { @@ -144,29 +181,36 @@ } }, minWidth: 80,align:'center'}, {field: 'verifyStatus', title: '审核状态', - templet: function (d) { - if (d.verifyStatus === 1) { - return '<span style="color:blue;">审核通过</span>' - } else if (d.verifyStatus === 2) { - return '<span style="color:green;">不通过</span>' - } else if (d.verifyStatus === 3) { - return '<span>待审核</span>' - }else{ - return '' - } - }, minWidth: 80,align:'center'}, + templet: function (d) { + if (d.verifyStatus === 1) { + return '<span style="color:blue;">审核通过</span>' + } else if (d.verifyStatus === 2) { + return '<span style="color:green;">不通过</span>' + } else if (d.verifyStatus === 3) { + return '<span>待审核</span>' + }else{ + return '' + } + }, minWidth: 80,align:'center'}, {field: 'createTime', title: '注册时间', minWidth: 180,align:'center'}, - {title: '操作', - templet: function (d) { + {title: '操作', + templet: function (d) { if (d.verifyStatus === 3) { - return '<a lay-event="edit" shiro:hasPermission="user:update">审核</a>' - }else if(d.verifyStatus === 1){ - return '<a lay-event="getOut" shiro:hasPermission="user:update">踢出</a>' - return '<a lay-event="getFull" shiro:hasPermission="user:update">满员</a>' + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="edit" shiro:hasPermission="user:update">审核</button>' + }else if(d.verifyStatus === 1 && d.isSetFrist ===1){ + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="modifyProfitRatio" shiro:hasPermission="user:update">修改</button>' + + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="getOut" shiro:hasPermission="user:update">踢出</button>' + + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="getFull" shiro:hasPermission="user:update">满员</button>' + + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="getOutFrist" shiro:hasPermission="user:update">取消推荐</button>' + }else if(d.verifyStatus === 1 && d.isSetFrist !=1){ + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="modifyProfitRatio" shiro:hasPermission="user:update">修改</button>' + + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="getOut" shiro:hasPermission="user:update">踢出</button>' + + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="getFull" shiro:hasPermission="user:update">满员</button>' + + '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="getOn" shiro:hasPermission="user:update">推荐首页</button>' }else { return '' } - },minWidth: 200,align:'center'} + },minWidth: 300,align:'center'} ]] }); } diff --git a/src/main/resources/templates/febs/views/modules/otc/otcAppealInfo.html b/src/main/resources/templates/febs/views/modules/otc/otcAppealInfo.html new file mode 100644 index 0000000..2e8d25a --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcAppealInfo.html @@ -0,0 +1,140 @@ +<style> + #user-update { + padding: 20px 25px 25px 0; + } + + #user-update .layui-treeSelect .ztree li a, .ztree li span { + margin: 0 0 2px 3px !important; + } + #user-update #data-permission-tree-block { + border: 1px solid #eee; + border-radius: 2px; + padding: 3px 0; + } + #user-add .layui-treeSelect .ztree li span.button.switch { + top: 1px; + left: 3px; + } + +</style> +<div class="layui-fluid" id="user-update"> + <form class="layui-form" action="" lay-filter="user-update-form"> + <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" data-th-value="${member.id}"> + </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="orderNo"data-th-id="${member.orderNo}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">单价:</label> + <div class="layui-input-block"> + <input type="number" name="unitPrice"data-th-id="${member.unitPrice}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">交易数量:</label> + <div class="layui-input-block"> + <input type="number" name="coinAmount"data-th-id="${member.coinAmount}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">交易总额:</label> + <div class="layui-input-block"> + <input type="number" name="totalAmount"data-th-id="${member.totalAmount}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">订单状态:</label> + <div class="layui-input-block"> + <input type="radio" name="status" value="1" title="未付款" readonly> + <input type="radio" name="status" value="2" title="已付款" readonly> + <input type="radio" name="status" value="3" title="已完成" readonly> + <input type="radio" name="status" value="4" title="已取消" readonly> + </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="payTime"data-th-id="${member.payTime}" + autocomplete="off" class="layui-input" readonly> + </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="finishTime"data-th-id="${member.finishTime}" + autocomplete="off" class="layui-input" readonly> + </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="nikename"data-th-id="${member.nikename}" + autocomplete="off" class="layui-input" readonly> + </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="reason"data-th-id="${member.reason}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> +<!-- <div class="layui-form-item">--> +<!-- <label class="layui-form-label febs-form-item-require">申诉图片:</label>--> +<!-- <div style="padding: 10px;">--> +<!-- @foreach($member.content as $content)--> +<!-- <img layer-src={{$content}} src={{$content}}--> +<!-- width="400px" height="224px" style="margin: 3px; border: black 2px" ;/>--> +<!-- @endforeach--> +<!-- </div>--> +<!-- </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, + member = [[${member}]], + $view = $('#user-update'), + validate = layui.validate, + _deptTree; + + form.render(); + + initUserValue(); + + formSelects.render(); + + function initUserValue() { + form.val("user-update-form", { + "orderNo": member.orderNo, + "unitPrice": member.unitPrice, + "coinAmount": member.coinAmount, + "totalAmount": member.totalAmount, + "status": member.status, + "payTime": member.payTime, + "finishTime": member.finishTime, + "nikename": member.nikename, + "reason": member.reason, + "content": member.content + }); + } + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/otc/otcAppealList.html b/src/main/resources/templates/febs/views/modules/otc/otcAppealList.html new file mode 100644 index 0000000..8e2e7e0 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcAppealList.html @@ -0,0 +1,173 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="OTC订单申诉"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="user-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邀请码" name="account" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">状态</label> + <div class="layui-input-inline"> + <select name="status"> + <option value="">请选择</option> + <option value="1">待处理</option> + <option value="2">处理中</option> + <option value="3">已处理</option> + </select> + </div> + </div> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<script id="showScreenhost" type="text/html"> + {{# var srr=d.content.split(","); + for(var j in srr) { srr[j] }} + <div style="margin:0 10px; display:inline-block !important; display:inline; max-width:70px; max-height:50px;"> + <img style=" max-width:70px; max-height:50px;" src="{{srr[j]}}" /> + </div> + {{# } }} +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-user'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'dealIng') { + // febs.modal.confirm('处理', '开始处理申诉?', function () { + // dealIng(data.id); + // }); + febs.modal.open( '详情', 'modules/otc/otcAppealInfo/' + data.id, { + maxmin: true, + }); + } + if (layEvent === 'dealDone') { + febs.modal.confirm('处理结束', '确认已处理结束?', function () { + dealDone(data.id); + }); + } + }); + function dealIng(id) { + febs.get(ctx + 'otc/dealIng/' + id, null, function () { + febs.alert.success('成功'); + $query.click(); + }); + } + function dealDone(id) { + febs.get(ctx + 'otc/dealDone/' + id, null, function () { + febs.alert.success('成功'); + $query.click(); + }); + } + + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'otc/otcAppealList', + cols: [[ + {field: 'phone', title: '手机号', minWidth: 150,align:'left'}, + {field: 'realName', title: '姓名', minWidth: 100,align:'left'}, + {field: 'inviteId', title: '邀请码', minWidth: 80,align:'center'}, + {field: 'reason', title: '申诉原因', minWidth: 80,align:'center'}, + {field: 'content', title: '申诉内容', minWidth: 80,templet: '#showScreenhost',align:'center'}, + {field: 'status', title: '状态', + templet: function (d) { + if (d.status === 1) { + return '<span style="color:red;">待处理</span>' + } else if (d.status === 2) { + return '<span style="color:blue;">处理中</span>' + } else if (d.status === 3) { + return '<span>已处理</span>' + }else{ + return '' + } + }, minWidth: 80,align:'center'}, + {field: 'orderNo', title: '订单编号',minWidth: 100,align:'center'}, + // {field: 'nikename', title: '商户昵称',minWidth: 100,align:'center'}, + {title: '操作',templet: function (d) { + if(d.status === 1){ + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="dealIng" shiro:hasPermission="user:update">查看详情</button>' + }else if(d.status === 2){ + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="dealIng" shiro:hasPermission="user:update">查看详情</button>' + +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="dealDone" shiro:hasPermission="user:update">已处理</button>' + }else{ + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="dealIng" shiro:hasPermission="user:update">查看详情</button>' + } + },minWidth: 200,align:'center'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + status: $searchForm.find("select[name='status']").val(), + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/otc/otcEntrustList.html b/src/main/resources/templates/febs/views/modules/otc/otcEntrustList.html new file mode 100644 index 0000000..32c82e6 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcEntrustList.html @@ -0,0 +1,211 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user" lay-title="委托单"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="user-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邀请码" name="account" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">类型</label> + <div class="layui-input-inline"> + <select name="orderType"> + <option value="">请选择</option> + <option value="B">买入</option> + <option value="S">卖出</option> + </select> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">状态</label> + <div class="layui-input-inline"> + <select name="status"> + <option value="">请选择</option> + <option value="1">上线</option> + <option value="2">下线</option> + <option value="3">取消</option> + </select> + </div> + </div> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-user'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'dealIng') { + febs.modal.confirm('处理', '开始处理申诉?', function () { + dealIng(data.id); + }); + } + if (layEvent === 'dealDone') { + febs.modal.confirm('处理结束', '确认已处理结束?', function () { + dealDone(data.id); + }); + } + if (layEvent === 'editOrder') { + febs.modal.open('详情修改', 'modules/otc/otcEntrustListUpdate/' + data.id, { + btn: ['提交', '取消'], + yes: function (index, layero) { + $('#user-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + function dealIng(id) { + febs.get(ctx + 'otc/dealIng/' + id, null, function () { + febs.alert.success('成功'); + $query.click(); + }); + } + function dealDone(id) { + febs.get(ctx + 'otc/dealDone/' + id, null, function () { + febs.alert.success('成功'); + $query.click(); + }); + } + + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'otc/otcEntrustList', + cols: [[ + {field: 'phone', title: '手机号', minWidth: 150,align:'left'}, + {field: 'realName', title: '姓名', minWidth: 100,align:'left'}, + {field: 'inviteId', title: '邀请码', minWidth: 80,align:'center'}, + {field: 'entrustOrderNo', title: '编号', minWidth: 80,align:'center'}, + {field: 'orderType', title: '类型', + templet: function (d) { + if (d.orderType === 'B') { + return '<span style="color:blue;">买入</span>' + } else if (d.orderType === 'S') { + return '<span style="color:green;">卖出</span>' + } else{ + return '' + } + }, minWidth: 80,align:'center'}, + {field: 'unitPrice', title: '单价',minWidth: 100,align:'center'}, + {field: 'coinAmount', title: '数量',minWidth: 100,align:'center'}, + {field: 'totalAmount', title: '委托总金额',minWidth: 100,align:'center'}, + {field: 'nikename', title: '商户昵称',minWidth: 100,align:'center'}, + {field: 'remainCoinAmount', title: '剩余数量',minWidth: 100,align:'center'}, + {field: 'limitMinAmount', title: '最小限额',minWidth: 100,align:'center'}, + {field: 'limitMaxAmount', title: '最大限额',minWidth: 100,align:'center'}, + {field: 'status', title: '状态', + templet: function (d) { + if (d.status === 1) { + return '<span style="color:blue;">上线</span>' + } else if (d.status === 2) { + return '<span style="color:green;">下线</span>' + }else if (d.status === 3) { + return '<span>取消</span>' + } else{ + return '' + } + }, minWidth: 80,align:'center'}, + + {field: 'isMb', title: '是否市商', + templet: function (d) { + if (d.isMb === 1) { + return '<span style="color:blue;">是</span>' + } else if (d.isMb === 2) { + return '<span style="color:green;">否</span>' + } else{ + return '' + } + }, minWidth: 80,align:'center'}, + {title: '操作',templet: function (d) { + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="editOrder" shiro:hasPermission="user:update">详情</button>' + },minWidth: 200,align:'center'} + // {title: '操作',templet: function (d) { + // if(d.status === 1){ + // return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="dealIng" shiro:hasPermission="user:update">马上处理</button>' + // }else if(d.status === 2){ + // return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="dealDone" shiro:hasPermission="user:update">已处理</button>' + // }else{ + // return '' + // } + // },minWidth: 200,align:'center'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + orderType: $searchForm.find("select[name='orderType']").val(), + status: $searchForm.find("select[name='status']").val(), + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/otc/otcEntrustListUpdate.html b/src/main/resources/templates/febs/views/modules/otc/otcEntrustListUpdate.html new file mode 100644 index 0000000..a3bd9a0 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcEntrustListUpdate.html @@ -0,0 +1,126 @@ +<style> + #user-update { + padding: 20px 25px 25px 0; + } + + #user-update .layui-treeSelect .ztree li a, .ztree li span { + margin: 0 0 2px 3px !important; + } + #user-update #data-permission-tree-block { + border: 1px solid #eee; + border-radius: 2px; + padding: 3px 0; + } + #user-add .layui-treeSelect .ztree li span.button.switch { + top: 1px; + left: 3px; + } + +</style> +<div class="layui-fluid" id="user-update"> + <form class="layui-form" action="" lay-filter="user-update-form"> + <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" data-th-value="${member.id}"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">单价:</label> + <div class="layui-input-block"> + <input type="number" name="unitPrice" data-th-id="${member.unitPrice}" + autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">数量:</label> + <div class="layui-input-block"> + <input type="number" name="coinAmount" data-th-id="${member.coinAmount}" + autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">剩余数量:</label> + <div class="layui-input-block"> + <input type="number" name="remainCoinAmount" data-th-id="${member.remainCoinAmount}" + autocomplete="off" class="layui-input"> + </div> + </div> +<!-- <div class="layui-form-item">--> +<!-- <label class="layui-form-label febs-form-item-require">委托总金额:</label>--> +<!-- <div class="layui-input-block">--> +<!-- <input type="number" name="totalAmount" data-th-id="${member.totalAmount}"--> +<!-- autocomplete="off" class="layui-input">--> +<!-- </div>--> +<!-- </div>--> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">最小限额:</label> + <div class="layui-input-block"> + <input type="number" name="limitMinAmount" data-th-id="${member.limitMinAmount}" + autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">最大限额:</label> + <div class="layui-input-block"> + <input type="number" name="limitMaxAmount" data-th-id="${member.limitMaxAmount}" + autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">状态:</label> + <div class="layui-input-block"> + <input type="radio" name="status" value="1" title="上线" checked=""> + <input type="radio" name="status" value="2" title="下线" > + <input type="radio" name="status" value="3" title="取消" > + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="user-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, + member = [[${member}]], + $view = $('#user-update'), + validate = layui.validate, + _deptTree; + + form.render(); + + initUserValue(); + + formSelects.render(); + + function initUserValue() { + form.val("user-update-form", { + "id": member.id, + "unitPrice": member.unitPrice, + "coinAmount": member.coinAmount, + "remainCoinAmount": member.remainCoinAmount, + // "totalAmount": member.totalAmount, + "limitMinAmount": member.limitMinAmount, + "status": member.status, + "limitMaxAmount": member.limitMaxAmount + }); + } + + form.on('submit(user-update-form-submit)', function (data) { + febs.post(ctx + 'otc/otcEntrustConfirm', data.field, function () { + layer.closeAll(); + febs.alert.success('成功'); + $('#febs-user').find('#query').click(); + }); + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/otc/otcHuiKuan.html b/src/main/resources/templates/febs/views/modules/otc/otcHuiKuan.html new file mode 100644 index 0000000..6268fc5 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcHuiKuan.html @@ -0,0 +1,93 @@ +<style> + #user-update { + padding: 20px 25px 25px 0; + } + + #user-update .layui-treeSelect .ztree li a, .ztree li span { + margin: 0 0 2px 3px !important; + } + #user-update #data-permission-tree-block { + border: 1px solid #eee; + border-radius: 2px; + padding: 3px 0; + } + #user-add .layui-treeSelect .ztree li span.button.switch { + top: 1px; + left: 3px; + } + +</style> +<div class="layui-fluid" id="user-update"> + <form class="layui-form" action="" lay-filter="user-update-form"> + <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" data-th-value="${member.id}"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">待回款:</label> + <div class="layui-input-block"> + <input type="number" name="waitBackMoney"data-th-id="${member.waitBackMoney}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">已回款:</label> + <div class="layui-input-block"> + <input type="number" name="hasBackMoney"data-th-id="${member.hasBackMoney}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">交易数量:</label> + <div class="layui-input-block"> + <input type="number" name="coinAmount"data-th-id="${member.coinAmount}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="user-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, + member = [[${member}]], + $view = $('#user-update'), + validate = layui.validate, + _deptTree; + + form.render(); + + initUserValue(); + + formSelects.render(); + + function initUserValue() { + form.val("user-update-form", { + "id": member.id, + "waitBackMoney": member.waitBackMoney, + "hasBackMoney": member.hasBackMoney, + "coinAmount": member.coinAmount + }); + } + + form.on('submit(user-update-form-submit)', function (data) { + febs.post(ctx + 'otc/otcHuiKuan', data.field, function () { + layer.closeAll(); + febs.alert.success('成功'); + $('#febs-user-shop').find('#reset').click(); + }); + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/otc/otcOrderInfo.html b/src/main/resources/templates/febs/views/modules/otc/otcOrderInfo.html new file mode 100644 index 0000000..e68c468 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcOrderInfo.html @@ -0,0 +1,109 @@ +<style> + #user-update { + padding: 20px 25px 25px 0; + } + + #user-update .layui-treeSelect .ztree li a, .ztree li span { + margin: 0 0 2px 3px !important; + } + #user-update #data-permission-tree-block { + border: 1px solid #eee; + border-radius: 2px; + padding: 3px 0; + } + #user-add .layui-treeSelect .ztree li span.button.switch { + top: 1px; + left: 3px; + } + +</style> +<div class="layui-fluid" id="user-update"> + <form class="layui-form" action="" lay-filter="user-update-form"> + <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" data-th-value="${member.id}"> + </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="orderNo"data-th-id="${member.orderNo}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">单价:</label> + <div class="layui-input-block"> + <input type="number" name="unitPrice"data-th-id="${member.unitPrice}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">交易数量:</label> + <div class="layui-input-block"> + <input type="number" name="coinAmount"data-th-id="${member.coinAmount}" + autocomplete="off" class="layui-input" readonly> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">交易总额:</label> + <div class="layui-input-block"> + <input type="number" name="totalAmount"data-th-id="${member.totalAmount}" + autocomplete="off" class="layui-input" readonly> + </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="payName"data-th-id="${member.payName}" + autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="user-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, + member = [[${member}]], + $view = $('#user-update'), + validate = layui.validate, + _deptTree; + + form.render(); + + initUserValue(); + + formSelects.render(); + + function initUserValue() { + form.val("user-update-form", { + "id": member.id, + "orderNo": member.orderNo, + "unitPrice": member.unitPrice, + "coinAmount": member.coinAmount, + "totalAmount": member.totalAmount, + "payName": member.payName + }); + } + + form.on('submit(user-update-form-submit)', function (data) { + febs.post(ctx + 'otc/updateOrderInfo', data.field, function () { + layer.closeAll(); + febs.alert.success('成功'); + $('#febs-user-order').find('#reset').click(); + }); + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/otc/otcOrderList.html b/src/main/resources/templates/febs/views/modules/otc/otcOrderList.html new file mode 100644 index 0000000..395e639 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcOrderList.html @@ -0,0 +1,175 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user-order" lay-title="订单"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="user-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邀请码" name="account" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">订单状态</label> + <div class="layui-input-inline"> + <select name="status"> + <option value="">请选择</option> + <option value="1">未付款</option> + <option value="2">已付款</option> + <option value="3">已完成</option> + <option value="4">已取消</option> + </select> + </div> + </div> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-user-order'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'dealIng') { + febs.modal.open('付款', 'modules/otc/otcOrderInfo/' + data.id, { + btn: ['提交', '取消'], + yes: function (index, layero) { + $('#user-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + + if (layEvent === 'reduceCoin') { + febs.modal.confirm('放币', '确定直接放币?', function () { + febs.post(ctx + 'otc/reduceCoin/' + data.id, null, function () { + febs.alert.success('放币成功'); + $query.click(); + }); + }); + } + }); + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'otc/otcOrderList', + cols: [[ + {field: 'phone', title: '手机号', minWidth: 100,align:'left'}, + {field: 'realName', title: '姓名', minWidth: 100,align:'left'}, + {field: 'inviteId', title: '邀请码', minWidth: 80,align:'center'}, + {field: 'orderNo', title: '订单编号', minWidth: 150,align:'center'}, + {field: 'unitPrice', title: '单价',minWidth: 80,align:'center'}, + {field: 'coinAmount', title: '数量',minWidth: 80,align:'center'}, + {field: 'totalAmount', title: '委托总金额',minWidth: 100,align:'center'}, + {field: 'orderType', title: '类型', + templet: function (d) { + if (d.orderType === 'B') { + return '<span style="color:green;">买入</span>' + } else if (d.orderType === 'S') { + return '<span style="color:blue;">卖出</span>' + } else{ + return '' + } + }, minWidth: 80,align:'center'}, + {field: 'status', title: '订单状态', + templet: function (d) { + if (d.status === 1) { + return '<span style="color:red;">未付款</span>' + } else if (d.status === 2) { + return '<span style="color:blue;">已付款</span>' + }else if (d.status === 3) { + return '<span style="color:green;">已完成</span>' + } else if (d.status === 4) { + return '<span>已取消</span>' + } else{ + return '' + } + }, minWidth: 80,align:'center'}, + {field: 'payName', title: '付款人姓名',minWidth: 100,align:'center'}, + {field: 'payTime', title: '付款时间',minWidth: 150,align:'center'}, + {field: 'finishTime', title: '完成时间',minWidth: 150,align:'center'}, + {title: '操作',templet: function (d) { + // return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="dealIng" shiro:hasPermission="user:update">付款</button>' + if(d.status === 1){ + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="dealIng" shiro:hasPermission="user:update">付款</button>' + }else if (d.status === 2 && d.orderType === 'S'){ + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="reduceCoin">放币</button>' + } else { + return ''; + } + },minWidth: 100,align:'center'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + status: $searchForm.find("select[name='status']").val(), + }; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/otc/otcSettingList.html b/src/main/resources/templates/febs/views/modules/otc/otcSettingList.html new file mode 100644 index 0000000..205b013 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcSettingList.html @@ -0,0 +1,126 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user-set" lay-title="基础设置"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="user-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> +<!-- <div class="layui-inline">--> +<!-- <div class="layui-input-inline">--> +<!-- <input type="text" placeholder="手机号/邀请码" name="account" autocomplete="off" class="layui-input">--> +<!-- </div>--> +<!-- </div>--> +<!-- <div class="layui-inline">--> +<!-- <label class="layui-form-label layui-form-label-sm">订单状态</label>--> +<!-- <div class="layui-input-inline">--> +<!-- <select name="status">--> +<!-- <option value="">请选择</option>--> +<!-- <option value="1">未付款</option>--> +<!-- <option value="2">已付款</option>--> +<!-- <option value="3">已完成</option>--> +<!-- <option value="4">已取消</option>--> +<!-- </select>--> +<!-- </div>--> +<!-- </div>--> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-user-set'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'otcSettingUpdate') { + febs.modal.open('付款', 'modules/otc/otcSettingUpdate/' + data.id, { + btn: ['提交', '取消'], + yes: function (index, layero) { + $('#user-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'otc/otcSettingList', + cols: [[ + {field: 'orderNum', title: '商家入驻总单数', minWidth: 100,align:'left'}, + {field: 'completionRate', title: '商家入驻完成率', minWidth: 100,align:'left'}, + {field: 'totalAmount', title: '商家入驻总金额', minWidth: 80,align:'center'}, + {field: 'cancellNum', title: '今日累计取消次数', minWidth: 150,align:'center'}, + {title: '操作',templet: function (d) { + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="otcSettingUpdate" shiro:hasPermission="user:update">修改</button>' + },minWidth: 100,align:'center'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return {}; + } + + }) +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/otc/otcSettingUpdate.html b/src/main/resources/templates/febs/views/modules/otc/otcSettingUpdate.html new file mode 100644 index 0000000..5a03b09 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcSettingUpdate.html @@ -0,0 +1,109 @@ +<style> + #user-update { + padding: 20px 25px 25px 0; + } + + #user-update .layui-treeSelect .ztree li a, .ztree li span { + margin: 0 0 2px 3px !important; + } + #user-update #data-permission-tree-block { + border: 1px solid #eee; + border-radius: 2px; + padding: 3px 0; + } + #user-add .layui-treeSelect .ztree li span.button.switch { + top: 1px; + left: 3px; + } + +</style> +<div class="layui-fluid" id="user-update"> + <form class="layui-form" action="" lay-filter="user-update-form"> + <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" data-th-value="${member.id}"> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">商家入驻:</label> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">总单数:</label> + <div class="layui-input-block"> + <input type="number" name="orderNum"data-th-id="${member.orderNum}" + autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">完成率:</label> + <div class="layui-input-block"> + <input type="number" name="completionRate"data-th-id="${member.completionRate}" + autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">总金额:</label> + <div class="layui-input-block"> + <input type="number" name="totalAmount"data-th-id="${member.totalAmount}" + autocomplete="off" class="layui-input"> + </div> + </div> + + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">今日累计:</label> + </div> + <div class="layui-form-item"> + <label class="layui-form-label febs-form-item-require">取消次数:</label> + <div class="layui-input-block"> + <input type="number" name="cancellNum"data-th-id="${member.cancellNum}" + autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-form-item febs-hide"> + <button class="layui-btn" lay-submit="" lay-filter="user-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, + member = [[${member}]], + $view = $('#user-update'), + validate = layui.validate, + _deptTree; + + form.render(); + + initUserValue(); + + formSelects.render(); + + function initUserValue() { + form.val("user-update-form", { + "id": member.id, + "orderNum": member.orderNum, + "completionRate": member.completionRate, + "totalAmount": member.totalAmount, + "cancellNum": member.cancellNum + }); + } + + form.on('submit(user-update-form-submit)', function (data) { + febs.post(ctx + 'otc/updateOtcSetting', data.field, function () { + layer.closeAll(); + febs.alert.success('成功'); + $('#febs-user-set').find('#reset').click(); + }); + return false; + }); + }); +</script> \ No newline at end of file diff --git a/src/main/resources/templates/febs/views/modules/otc/otcShopList.html b/src/main/resources/templates/febs/views/modules/otc/otcShopList.html new file mode 100644 index 0000000..e85cb32 --- /dev/null +++ b/src/main/resources/templates/febs/views/modules/otc/otcShopList.html @@ -0,0 +1,177 @@ +<div class="layui-fluid layui-anim febs-anim" id="febs-user-shop" lay-title="OTC商户"> + <div class="layui-row febs-container"> + <div class="layui-col-md12"> + <div class="layui-card"> + <div class="layui-card-body febs-table-full"> + <form class="layui-form layui-table-form" lay-filter="user-table-form"> + <div class="layui-row"> + <div class="layui-col-md10"> + <div class="layui-form-item"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input type="text" placeholder="手机号/邀请码" name="account" autocomplete="off" class="layui-input"> + </div> + </div> + <div class="layui-inline"> + <label class="layui-form-label layui-form-label-sm">审核状态</label> + <div class="layui-input-inline"> + <select name="status"> + <option value="">请选择</option> + <option value="1">待审核</option> + <option value="2">审核通过</option> + <option value="3">审核拒绝</option> + </select> + </div> + </div> + </div> + </div> + <div class="layui-col-md2 layui-col-sm12 layui-col-xs12 table-action-area"> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain table-action" id="query"> + <i class="layui-icon"></i> + </div> + <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset"> + <i class="layui-icon"></i> + </div> + </div> + </div> + </form> + <table lay-filter="userTable" lay-data="{id: 'userTable'}"></table> + </div> + </div> + </div> + </div> +</div> +<!-- 表格操作栏 start --> +<script type="text/html" id="user-option"> + <span shiro:lacksPermission="user:view,user:update,user:delete"> + <span class="layui-badge-dot febs-bg-orange"></span> 无权限 + </span> + <a lay-event="edit" shiro:hasPermission="user:update"><i + class="layui-icon febs-edit-area febs-blue"></i></a> +</script> +<!-- 表格操作栏 end --> +<script data-th-inline="none" type="text/javascript"> + // 引入组件并初始化 + layui.use([ 'jquery', 'form', 'table', 'febs'], function () { + var $ = layui.jquery, + febs = layui.febs, + form = layui.form, + table = layui.table, + $view = $('#febs-user-shop'), + $query = $view.find('#query'), + $reset = $view.find('#reset'), + $searchForm = $view.find('form'), + sortObject = {field: 'phone', type: null}, + tableIns; + + form.render(); + + // 表格初始化 + initTable(); + + // 初始化表格操作栏各个按钮功能 + table.on('tool(userTable)', function (obj) { + var data = obj.data, + layEvent = obj.event; + if (layEvent === 'agreeShop') { + febs.modal.confirm('通过', '确认通过该商户的审核?', function () { + agreeShop(data.id); + }); + } + if (layEvent === 'disagreeShop') { + febs.modal.confirm('拒绝', '确认拒绝该商户的审核?', function () { + disagreeShop(data.id); + }); + } + if (layEvent === 'huikuan') { + febs.modal.open('回款', 'modules/otc/huikuan/' + data.id, { + btn: ['提交', '取消'], + yes: function (index, layero) { + $('#user-update').find('#submit').trigger('click'); + }, + btn2: function () { + layer.closeAll(); + } + }); + } + }); + function agreeShop(id) { + febs.get(ctx + 'otc/agreeShop/' + id, null, function () { + febs.alert.success('通过成功'); + $query.click(); + }); + } + function disagreeShop(id) { + febs.get(ctx + 'otc/disagreeShop/' + id, null, function () { + febs.alert.success('拒绝成功'); + $query.click(); + }); + } + + + // 查询按钮 + $query.on('click', function () { + var params = $.extend(getQueryParams(), {field: sortObject.field, order: sortObject.type}); + tableIns.reload({where: params, page: {curr: 1}}); + }); + + // 刷新按钮 + $reset.on('click', function () { + $searchForm[0].reset(); + sortObject.type = 'null'; + tableIns.reload({where: getQueryParams(), page: {curr: 1}, initSort: sortObject}); + }); + + function initTable() { + tableIns = febs.table.init({ + elem: $view.find('table'), + id: 'userTable', + url: ctx + 'otc/otcShopList', + cols: [[ + {field: 'phone', title: '手机号', minWidth: 150,align:'left'}, + {field: 'realName', title: '姓名', minWidth: 100,align:'left'}, + {field: 'inviteId', title: '邀请码', minWidth: 80,align:'center'}, + {field: 'nikename', title: '昵称', minWidth: 80,align:'center'}, + {field: 'status', title: '审核状态', + templet: function (d) { + if (d.status === 1) { + return '<span style="color:blue;">待审核</span>' + } else if (d.status === 2) { + return '<span style="color:green;">审核通过</span>' + } else if (d.status === 3) { + return '<span>拒绝</span>' + }else{ + return '' + } + }, minWidth: 80,align:'center'}, + // {field: 'waitBackMoney', title: '待回款',minWidth: 100,align:'center'}, + // {field: 'hasBackMoney', title: '已回款',minWidth: 100,align:'center'}, + {field: 'buyCnt', title: '服务人数',minWidth: 100,align:'center'}, + {field: 'totalOrderCnt', title: '总单数',minWidth: 100,align:'center'}, + {field: 'finishRatio', title: '完成率',minWidth: 100,align:'center'}, + {field: 'avgPayTime', title: '平均付款时间',minWidth: 100,align:'center'}, + {field: 'avgCoinTime', title: '平均放币时间',minWidth: 100,align:'center'}, + {field: 'createTime', title: '注册时间', minWidth: 180,align:'center'}, + {title: '操作',templet: function (d) { + // return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="huikuan" shiro:hasPermission="user:update">回款</button>' + if(d.status === 1){ + return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="agreeShop" shiro:hasPermission="user:update">同意</button>' + +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="disagreeShop" shiro:hasPermission="user:update">拒绝</button>' + }else{ + return '' + } + },minWidth: 200,align:'center'} + ]] + }); + } + + // 获取查询参数 + function getQueryParams() { + return { + account: $searchForm.find('input[name="account"]').val().trim(), + status: $searchForm.find("select[name='status']").val(), + }; + } + + }) +</script> \ No newline at end of file -- Gitblit v1.9.1