Преглед изворни кода

1.添加属性操作html
2.修改部分问题

slambb пре 3 година
родитељ
комит
90d7fcafa7

+ 7 - 5
src/main/java/com/td/Dawa/game/comcharacters/service/ComCharactersServiceImpl.java

@@ -123,17 +123,19 @@ public class ComCharactersServiceImpl extends CommonServiceImpl<ComCharactersVo,
         //comCharacters.setSkills(_skillsDouble.intValue());
         //comCharacters.setSkills(_skillsDouble.intValue());
 
 
         //随机一个力量值,添加到后面的属性上
         //随机一个力量值,添加到后面的属性上
-        Double _random = new Random().nextDouble() * _attr.getRandomAttr();
-        comCharacters.setRandom(_random.intValue());
+        comCharacters.setRandom(_attr.getRandomAttr());
 
 
         //力量
         //力量
-        Double _powerDouble = _random + _attr.getStartPowerLimitLower();
+        Double _random1 = new Random().nextDouble() * _attr.getRandomAttr();
+        Double _powerDouble = _random1 + _attr.getStartPowerLimitLower();
         comCharacters.setPower(_powerDouble.intValue());
         comCharacters.setPower(_powerDouble.intValue());
         //智力(智慧)
         //智力(智慧)
-        Double _intelligenceDouble = _random + _attr.getStartWisdomLimitLower();
+        Double _random2 = new Random().nextDouble() * _attr.getRandomAttr();
+        Double _intelligenceDouble = _random2 + _attr.getStartWisdomLimitLower();
         comCharacters.setIntelligence(_intelligenceDouble.intValue());
         comCharacters.setIntelligence(_intelligenceDouble.intValue());
         //技巧
         //技巧
-        Double _skillsDouble = _random + _attr.getStartSkillLimitLower();
+        Double _random3 = new Random().nextDouble() * _attr.getRandomAttr();
+        Double _skillsDouble = _random3 + _attr.getStartSkillLimitLower();
         comCharacters.setSkills(_skillsDouble.intValue());
         comCharacters.setSkills(_skillsDouble.intValue());
 
 
 
 

+ 2 - 0
src/main/java/com/td/Dawa/game/comcharactersdiscovery/vo/ComCharactersDiscoveryClientVo.java

@@ -58,6 +58,8 @@ public class ComCharactersDiscoveryClientVo implements Serializable {
 
 
     private Date updateTime;//
     private Date updateTime;//
 
 
+    private Integer currentStrength;//当前的体力值
+
     List<ComCharactersClientVo> subCharacters;
     List<ComCharactersClientVo> subCharacters;
 
 
     List<ExcelPropClientVo> subGetDrops;
     List<ExcelPropClientVo> subGetDrops;

+ 50 - 0
src/main/java/com/td/Dawa/game/comusers/controller/ComUsersController.java

@@ -5,8 +5,11 @@ import com.td.Dawa.annotation.Decrypt;
 import com.td.Dawa.annotation.Encrypt;
 import com.td.Dawa.annotation.Encrypt;
 import com.td.Dawa.common.controller.*;
 import com.td.Dawa.common.controller.*;
 import com.td.Dawa.common.pojo.Result;
 import com.td.Dawa.common.pojo.Result;
+import com.td.Dawa.config.exception.AuthorizeException;
 import com.td.Dawa.game.complayerlog.service.ComPlayerLogService;
 import com.td.Dawa.game.complayerlog.service.ComPlayerLogService;
 import com.td.Dawa.game.complayersattri.service.ComPlayersAttriService;
 import com.td.Dawa.game.complayersattri.service.ComPlayersAttriService;
+import com.td.Dawa.game.complayersattri.vo.ComPlayersAttriClientVo;
+import com.td.Dawa.game.complayersattri.vo.ComPlayersAttriVo;
 import com.td.Dawa.game.comsetting.service.ComSettingService;
 import com.td.Dawa.game.comsetting.service.ComSettingService;
 import com.td.Dawa.game.comusers.vo.ComUsersLoginVo;
 import com.td.Dawa.game.comusers.vo.ComUsersLoginVo;
 import com.td.Dawa.game.comusers.vo.ComUsersSimpleVo;
 import com.td.Dawa.game.comusers.vo.ComUsersSimpleVo;
@@ -14,9 +17,12 @@ import com.td.Dawa.config.enums.ResultEnum;
 import com.td.Dawa.game.comusers.pojo.ComUsers;
 import com.td.Dawa.game.comusers.pojo.ComUsers;
 import com.td.Dawa.game.comusers.vo.ComUsersVo;
 import com.td.Dawa.game.comusers.vo.ComUsersVo;
 import com.td.Dawa.game.comusers.service.ComUsersService;
 import com.td.Dawa.game.comusers.service.ComUsersService;
+import com.td.Dawa.game.excelparameter.service.ExcelParameterService;
+import com.td.Dawa.game.excelparameter.vo.ExcelParameterVo;
 import com.td.Dawa.sys.syssetting.vo.SysSettingVo;
 import com.td.Dawa.sys.syssetting.vo.SysSettingVo;
 import com.td.Dawa.util.*;
 import com.td.Dawa.util.*;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import net.bytebuddy.asm.Advice;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.Resource;
@@ -56,6 +62,9 @@ public class ComUsersController extends CommonController<ComUsersVo, ComUsers, S
     @Autowired
     @Autowired
     private ComPlayerLogService comPlayerLogService;
     private ComPlayerLogService comPlayerLogService;
 
 
+    @Autowired
+    private ExcelParameterService excelParameterService;
+
     @Autowired
     @Autowired
     private RedisSettingMap redisSettingMap;
     private RedisSettingMap redisSettingMap;
 
 
@@ -147,10 +156,51 @@ public class ComUsersController extends CommonController<ComUsersVo, ComUsers, S
                 redisLock.unlock(_redisKey, String.valueOf(time));
                 redisLock.unlock(_redisKey, String.valueOf(time));
 
 
             }
             }
+            //获取一下用户属性,新增表
+            ComPlayersAttriVo playersAttribute = comPlayersAttriService.findByUserId(comUsersVo.getUserId());
+            if (playersAttribute == null) {
+                // todo player 如果角色不存在的话,直接创建一个。
+                playersAttribute = new ComPlayersAttriVo();
+                playersAttribute.setUserId(comUsersVo.getUserId());
+                playersAttribute.setStrength(0);
+                playersAttribute.setLucky(0);
+                playersAttribute.setResetStrength(DateUtil.getNowDate());
+                playersAttribute.setCreateTime(DateUtil.getNowDate());
+                playersAttribute.setUpdateTime(DateUtil.getNowDate());
+                comPlayersAttriService.save(playersAttribute);
+            } else {
+                //todo 判断是否过了一天,是的话重置体力值
+                if (playersAttribute.getResetStrength() == null) {
+                    playersAttribute.setStrength(0);
+                    playersAttribute.setResetStrength(DateUtil.getNowDate());
+                    comPlayersAttriService.save(playersAttribute);
+                } else {
+                    Long _attributeTime = DateUtil.getOldDateAddDay(playersAttribute.getResetStrength(), 1).getTime() - DateUtil.getNowDate().getTime();
+                    if (_attributeTime <= 0) {
+                        playersAttribute.setStrength(0);
+                        playersAttribute.setResetStrength(DateUtil.getNowDate());
+                        comPlayersAttriService.save(playersAttribute);
+                    }
+                }
+
+            }
+            //todo 暂时是id=1为体力
+            ExcelParameterVo excelParameterVo = excelParameterService.getVo(1);
+            if (excelParameterVo.equals(null)) {
+                //return Result.of(null, false, ResultEnum.SETTING_IS_NULL);
+                throw new AuthorizeException(ResultEnum.SETTING_IS_NULL);
+            }
+            //计算一下体力值
+            ComPlayersAttriClientVo clientVo =  comPlayersAttriService.setStrengthAttriClientVo(playersAttribute,excelParameterVo.getValue().intValue());
+
+            //返回前端的体力值是读取一个配置的体力值,
+            map.put("attribute", clientVo);
+
             //生成token
             //生成token
             final String token = jwtTokenUtil.generateToken(comUsersVo.getUserId());
             final String token = jwtTokenUtil.generateToken(comUsersVo.getUserId());
             map.put("token", token);
             map.put("token", token);
             map.put("userInfo", CopyUtil.copy(comUsersVo, ComUsersSimpleVo.class));
             map.put("userInfo", CopyUtil.copy(comUsersVo, ComUsersSimpleVo.class));
+
             return Result.of(map);
             return Result.of(map);
         } catch (HttpClientErrorException e) {
         } catch (HttpClientErrorException e) {
             log.error(e.toString());
             log.error(e.toString());

+ 52 - 0
src/main/java/com/td/Dawa/sys/sysGame/controller/sysGameUsersController.java

@@ -5,6 +5,7 @@ import com.td.Dawa.annotation.Encrypt;
 import com.td.Dawa.common.controller.CommonController;
 import com.td.Dawa.common.controller.CommonController;
 import com.td.Dawa.common.pojo.PageInfo;
 import com.td.Dawa.common.pojo.PageInfo;
 import com.td.Dawa.common.pojo.Result;
 import com.td.Dawa.common.pojo.Result;
+import com.td.Dawa.config.enums.GameEnum;
 import com.td.Dawa.game.comcntorder.service.ComCntOrderService;
 import com.td.Dawa.game.comcntorder.service.ComCntOrderService;
 import com.td.Dawa.game.comcntorder.vo.ComCntOrderVo;
 import com.td.Dawa.game.comcntorder.vo.ComCntOrderVo;
 import com.td.Dawa.game.complayergoods.service.ComPlayerGoodsService;
 import com.td.Dawa.game.complayergoods.service.ComPlayerGoodsService;
@@ -15,11 +16,14 @@ import com.td.Dawa.game.complayerlog.service.ComPlayerLogService;
 import com.td.Dawa.game.complayerlog.vo.ComPlayerLogVo;
 import com.td.Dawa.game.complayerlog.vo.ComPlayerLogVo;
 import com.td.Dawa.game.complayerprofit.service.ComPlayerProfitService;
 import com.td.Dawa.game.complayerprofit.service.ComPlayerProfitService;
 import com.td.Dawa.game.complayerprofit.vo.ComPlayerProfitVo;
 import com.td.Dawa.game.complayerprofit.vo.ComPlayerProfitVo;
+import com.td.Dawa.game.complayersattri.service.ComPlayersAttriService;
+import com.td.Dawa.game.complayersattri.vo.ComPlayersAttriVo;
 import com.td.Dawa.game.comsnbtran.service.ComSnbTranService;
 import com.td.Dawa.game.comsnbtran.service.ComSnbTranService;
 import com.td.Dawa.game.comsnbtran.vo.ComSnbTranVo;
 import com.td.Dawa.game.comsnbtran.vo.ComSnbTranVo;
 import com.td.Dawa.game.comusers.pojo.ComUsers;
 import com.td.Dawa.game.comusers.pojo.ComUsers;
 import com.td.Dawa.game.comusers.service.ComUsersService;
 import com.td.Dawa.game.comusers.service.ComUsersService;
 import com.td.Dawa.game.comusers.vo.ComUsersVo;
 import com.td.Dawa.game.comusers.vo.ComUsersVo;
+import com.td.Dawa.game.excelworkpro.vo.ExcelWorkProVo;
 import com.td.Dawa.util.JwtTokenUtil;
 import com.td.Dawa.util.JwtTokenUtil;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +40,9 @@ public class sysGameUsersController extends CommonController<ComUsersVo, ComUser
     @Autowired
     @Autowired
     private ComUsersService comUsersService;
     private ComUsersService comUsersService;
 
 
+    @Autowired
+    private ComPlayersAttriService comPlayersAttriService;
+
     @Autowired
     @Autowired
     private ComSnbTranService comSnbTranService;
     private ComSnbTranService comSnbTranService;
 
 
@@ -84,6 +91,51 @@ public class sysGameUsersController extends CommonController<ComUsersVo, ComUser
         return Result.of(pageInfo);
         return Result.of(pageInfo);
     }
     }
 
 
+
+    //属性表
+    @GetMapping("userAttribute")
+    public ModelAndView userAttribute() {
+        return new ModelAndView("sys/aComUser/userAttri");
+    }
+
+    @PostMapping("findAllUserAttribute")
+    @Decrypt
+    @Encrypt
+    public Result<PageInfo<ComPlayersAttriVo>> findAllUserAttribute(ComUsersVo comUsersVo){
+
+        if(comUsersVo.getAddress() != null){
+            //查询用户id
+            ComUsersVo _comUsersVo = comUsersService.findByAddress(comUsersVo.getAddress());
+            if(!_comUsersVo.equals(null)){
+                //如果存在用户数据,继续查询背包
+                ComPlayersAttriVo vo = new ComPlayersAttriVo();
+                vo.setUserId(_comUsersVo.getUserId());
+                vo.setPage(comUsersVo.getPage());
+                vo.setRows(comUsersVo.getRows());
+                vo.setSidx(comUsersVo.getSidx());
+                vo.setSord(comUsersVo.getSord());
+                return comPlayersAttriService.page(vo);
+            }
+        }
+        //没数据随便返回一个空的
+        ArrayList<ComPlayersAttriVo> vo = new ArrayList<>();
+        PageInfo<ComPlayersAttriVo> pageInfo = new PageInfo<>();
+        pageInfo.setPage(1);//页码
+        pageInfo.setPageSize(1);//页面大小
+        pageInfo.setRows(vo);//分页结果
+        pageInfo.setRecords(vo.size());//总记录数
+        pageInfo.setTotal(1);//总页数
+        return Result.of(pageInfo);
+    }
+
+    @PostMapping("saveUserAttribute")
+    @Decrypt
+    @Encrypt
+    public Result saveUserAttribute(ComPlayersAttriVo vo) {
+        Result result = comPlayersAttriService.save(vo);
+        return result;
+    }
+
     @PostMapping("findSNBTranByUserId")
     @PostMapping("findSNBTranByUserId")
     @Decrypt
     @Decrypt
     @Encrypt
     @Encrypt

+ 3 - 3
src/main/resources/static/sys/aComConfig/js/excelCharacterAttri.js

@@ -40,7 +40,7 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
         , title: '种子列表'
         , title: '种子列表'
         , cols: [[
         , cols: [[
             {field: 'id', title: 'ID', hide: true}
             {field: 'id', title: 'ID', hide: true}
-            , {field: 'roleType', title: '掉落编号'}
+            , {field: 'roleType', title: '角色种类'}
             , {field: 'startPowerLimitLower', title: '初始力量下限'}
             , {field: 'startPowerLimitLower', title: '初始力量下限'}
             , {field: 'startPowerLimitUpper', title: '初始力量上限' , hide: true }
             , {field: 'startPowerLimitUpper', title: '初始力量上限' , hide: true }
             , {field: 'startWisdomLimitLower', title: '初始智慧下限'}
             , {field: 'startWisdomLimitLower', title: '初始智慧下限'}
@@ -51,10 +51,10 @@ layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], func
             , {field: 'professional', title: '职业'}
             , {field: 'professional', title: '职业'}
             , {field: 'action', title: '携带动作'}
             , {field: 'action', title: '携带动作'}
             , {field: "interactive", title: '互动事件'}
             , {field: "interactive", title: '互动事件'}
-            , {field: 'note', title: '备注', hide: true}
+            , {field: 'note', title: '备注'}
             , {field: 'createTime', title: '创建时间', hide: true}
             , {field: 'createTime', title: '创建时间', hide: true}
             , {field: 'updateTime', title: '更新时间', hide: true}
             , {field: 'updateTime', title: '更新时间', hide: true}
-            , {fixed: 'right', title: '操作', width:100, toolbar: '#configTableBarDemo'}
+            , {fixed: 'right', title: '操作', width:140, toolbar: '#configTableBarDemo'}
         ]]
         ]]
         , defaultToolbar: ['', 'exports', 'print']
         , defaultToolbar: ['', 'exports', 'print']
         , page: true
         , page: true

+ 540 - 0
src/main/resources/static/sys/aComUser/js/userAttri.js

@@ -0,0 +1,540 @@
+let tableIns;
+let tableCNT;
+let tableSNB;
+let tablePlayerLog;
+let tree;
+layui.use(['element', 'form', 'table', 'layer', 'laydate', 'tree', 'util'], function () {
+    let table = layui.table;
+    let form = layui.form;//select、单选、复选等依赖form
+    form.verify({
+        positiveNumberRequiredTrue: [/^(([0-9]+[\.]?[0-9]+)|[1-9])$/, '只能填写正数'],//必填,且只能输入正数
+        positiveWholeNumberRequiredTrue: [/^[+]{0,1}(\d+)$/, '只能填写正整数'],//必填,且只能输入正整数
+    });
+
+    let element = layui.element; //导航的hover效果、二级菜单等功能,需要依赖element模块
+    let laydate = layui.laydate;
+    tree = layui.tree;
+    let height = document.documentElement.clientHeight * 0.5; //随便设置下,和操作表单大概一样
+    //用户列表
+    tableIns = table.render({
+        elem: '#userTable'
+        , url: ctx + "/sys/sysComUsers/findAllUserAttribute"
+        , method: 'POST'
+        //请求前参数处理
+        // , request: {
+        //     pageName: 'page' //页码的参数名称,默认:page
+        //     , limitName: 'rows' //每页数据量的参数名,默认:limit
+        // }
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            var data = res.data;
+            // console.log("返回的地址数据:", data);
+            //这里应该是反回一个用户,后台做成了页面数据。但是只带一条数据
+            if (data.rows.length > 0) {
+                if (!data.rows[0]) {
+                    layer.msg("没有查询到用户数据", {icon: 2, time: 2000}, function () {
+                    });
+                    return;
+                }
+                // 加上时间排序
+                let _findData = {userId: data.rows[0].userId, sidx: "desc", sord: "createTime"};
+                if (!tableSNB) {
+                    initSNBTable(table, _findData);
+                } else {
+                    //如果已经初始化,刷新当前用户信息
+                    snbReload(_findData);
+                }
+                if (!tableCNT) {
+                    initCNTTable(table, _findData);
+                } else {
+                    //如果已经初始化,刷新当前用户信息
+                    cntReload(_findData);
+                }
+
+                if (!tablePlayerLog) {
+                    initPlayerLog(table, _findData);
+                } else {
+                    playerLogReload(_findData);
+                }
+            }
+
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#userTableToolbarDemo'
+        , title: '属性列表'
+        , cols: [[
+            {field: 'id', title: 'ID',hide:true}
+            , {field: 'userId', title: '用户id'}
+            , {field: 'strength', title: '已使用的体力'}
+            , {field: 'resetStrength', title: '重置时间'}
+            , {field: 'createTime', title: '创建时间'}
+            , {field: 'updateTime', title: '更新时间', hide: true}
+
+            , {fixed: 'right', title: '操作', toolbar: '#userTableBarDemo'}
+        ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: false
+        , height: height
+        , cellMinWidth: 80
+    });
+
+    //头工具栏事件
+    table.on('toolbar(test)', function (obj) {
+        switch (obj.event) {
+            case 'addData':
+                layer.msg("点击增加按钮!");
+                break;
+            case 'query':
+                //根据用户地址查询
+                findByUserAddress(form);
+                break;
+            case 'snbReload':
+                snbReload();
+                break;
+            case 'cntReload':
+                cntReload();
+                break;
+            case 'playerLogReload':
+                playerLogReload();
+                break;
+        }
+    });
+
+    //监听行工具事件
+    table.on('tool(test)', function (obj) {
+        let data = obj.data;
+        //编辑
+        if (obj.event === 'edit') {
+            // console.log("edit");
+            //回显操作表单
+            $("#comUserForm").form(data);
+            form.render();
+        }
+    });
+
+
+    //日期选择器
+    laydate.render({
+        elem: '#expiredTimeDate',
+        format: "yyyy-MM-dd HH:mm:ss"
+    });
+
+    //监听提交
+    form.on('submit(comUserFilter)', function (data) {
+        // layer.alert(JSON.stringify(data.field), {
+        //     title: '最终的提交信息'
+        // })
+        comUserFormSave();
+    });
+});
+
+
+function findByUserAddress(form) {
+    //重置数据
+    $("#comUserForm")[0].reset();
+    form.render();
+    // "TUNkoeP5LxSKh45rwspcWu3DaKRVERfEiu" 测试
+    let queryByAddress = $("#queryByAddress").val();
+    if (queryByAddress.length <= 0) {
+        layer.msg("输入用户钱包地址查询", {icon: 2, time: 1000}, function () {
+        });
+        return;
+    }
+    tableIns.reload({
+        // page: {
+        //     curr: 1 //重新从第 1 页开始
+        //     , limit: 10
+        // },
+        method: 'POST'
+        , url: ctx + "/sys/sysComUsers/findAllUserAttribute"
+        , where: {address: queryByAddress}
+        , done: function (res, curr, count) {
+            // console.log(res, curr, count);
+            $("input[name='queryByAddress']").val(queryByAddress);
+            //this.where={};
+            //不清空,有问题:搜索条件会保留
+            //清空,  有问题:分页的时候没有搜索条件了,分页会受到影响
+        }
+    });
+}
+
+/**
+ * 提交保存
+ */
+function comUserFormSave() {
+    let comUserForm = $("#comUserForm").serializeObject();
+    // console.log(comUserForm);
+    if (!comUserForm.userId) {
+        layer.msg("选择编辑的用户", {icon: 2, time: 1000}, function () {
+        });
+        return;
+    }
+    $.post(ctx + "/sys/sysComUsers/saveUserAttribute", comUserForm, function (data) {
+        if (!data.flag) {
+            layer.msg(data.msg, {icon: 2, time: 2000}, function () {
+            });
+            return;
+        }
+        tableIns.reload();
+    });
+}
+
+function initSNBTable(table, data) {
+    // console.log("initSNBTable");
+    //用户SNB明细,这里直接处理了
+    tableSNB = table.render({
+        elem: '#comSnbTranTable'
+        , url: ctx + "/sys/sysComUsers/findSNBTranByUserId"
+        , method: 'POST'
+        //请求前参数处理
+        , request: {
+            pageName: 'page' //页码的参数名称,默认:page
+            , limitName: 'rows' //每页数据量的参数名,默认:limit
+        }
+        , where: data
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            var data = res.data;
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#comSnbTranTableToolbarDemo'
+        , title: 'SNB列表'
+        , cols: [[
+            {field: 'id', title: 'ID', hide: true}
+            , {field: 'userId', title: 'userId'}
+            , {field: 'tranId', title: '操作对象的id'}
+            , {field: 'tranName', title: '交易操作', width: 100}
+            , {
+                field: 'tranType', title: '交易类型', width: 120, templet: function (d) {
+                    if (d.tranType == 0) {  // 自定义内容
+                        return '<span style="color: green">出售果实</span>';
+                    } else if (d.tranType == 1) {
+                        return '<span style="color: red">转CNT冻结</span>';
+                    } else if (d.tranType == 2) {
+                        return '<span style="color: green">转CNT解冻</span>';
+                    } else if (d.tranType == 3) {
+                        return '<span style="color: red">购买种子</span>';
+                    } else if (d.tranType == 4) {
+                        return '<span style="color: red">偷取果实</span>';
+                    } else if (d.tranType == 5) {
+                        return '<span style="color: red">购买装备</span>';
+                    } else if (d.tranType == 6) {
+                        return '<span style="color: red">购买装备</span>';
+                    } else if (d.tranType == 7) {
+                        return '<span style="color: red">购买狗粮</span>';
+                    } else if (d.tranType == 8) {
+                        return '<span style="color: red">释放SNB</span>';
+                    } else if (d.tranType == 9) {
+                        return '<span style="color: red">幸运值</span>';
+                    } else if (d.tranType == 10) {
+                        return '<span style="color: red">喂养动物</span>';
+                    } else {
+                        return '<span style="color: red">待添加:</span>' + d.tranType;
+                    }
+                }
+            }
+            , {
+                field: 'tranAmount', title: '交易数量', templet: function (d) {
+                    return (d.tranAmount + d.tranAmountPart).toFixed(5);
+                }
+            }
+            , {field: 'tranPrice', title: '交易价格'}
+            , {field: 'tranDescribe', title: '交易描述'}
+            , {
+                field: 'isAdd', title: '状态', width: 80, templet: function (d) {
+                    if (d.isAdd == 0) {  // 自定义内容
+                        return '<span style="color: red">减少</span>';
+                    } else {
+                        return '<span style="color: green">增加</span>';
+                    }
+                }
+            }
+            , {
+                field: 'beforeSnb', title: '交易之前的snb', templet: function (d) {
+                    return (d.beforeSnb + d.beforeSnbPart).toFixed(5);
+                }
+            }
+            , {
+                field: 'tranSnb', title: '交易的snb', templet: function (d) {
+                    return (d.tranSnb + d.tranSnbPart).toFixed(5);
+                }
+            }
+            , {
+                field: 'afterSnb', title: '交易完成后的snb', templet: function (d) {
+                    return (d.afterSnb + d.afterSnbPart).toFixed(5);
+                }
+            }
+            , {field: 'createTime', title: '创建时间'}
+            , {field: 'updateTime', title: '更新时间', hide: true}
+        ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: true
+        , height: 500
+        , cellMinWidth: 80
+    });
+}
+
+
+function snbReload(data) {
+    // console.log("snbReload where:", this.where, data);
+    tableSNB.reload({
+        page: {
+            curr: 1 //重新从第 1 页开始
+            , limit: 10
+        }
+        , method: 'POST'
+        , url: ctx + "/sys/sysComUsers/findSNBTranByUserId"
+        , where: data
+        , done: function (res, curr, count) {
+            // console.log(res, curr, count);
+            //this.where={};
+            //不清空,有问题:搜索条件会保留
+            //清空,  有问题:分页的时候没有搜索条件了,分页会受到影响
+        }
+    });
+}
+
+
+function initCNTTable(table, data) {
+    //用户CNT明细,这里直接处理了
+    // console.log("initCNTTable");
+    tableCNT = table.render({
+        elem: '#comCntOrderTable'
+        , url: ctx + "/sys/sysComUsers/findCNTTranByUserId"
+        , method: 'POST'
+        //请求前参数处理
+        , request: {
+            pageName: 'page' //页码的参数名称,默认:page
+            , limitName: 'rows' //每页数据量的参数名,默认:limit
+        }
+        , where: data
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            var data = res.data;
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#comCntOrderTableToolbarDemo'
+        , title: 'CNT列表'
+        , cols: [[
+            {field: 'id', title: 'ID', hide: true}
+            , {field: 'userId', title: 'userId', width: 260}
+            , {field: 'address', title: '钱包地址', hide: true}
+            , {
+                field: 'payType', title: '交易的类型', width: 100, templet: function (d) {
+                    if (d.payType == 1) {  // 自定义内容
+                        return '<span style="color: green">土地租赁</span>';
+                    } else if (d.payType == 4) {
+                        return '<span style="color: green">购买种子</span>';
+                    } else if (d.payType == 2) {
+                        return '<span style="color: green">自然防护包</span>';
+                    } else if (d.payType == 3) {
+                        return '<span style="color: green">野兽防护包</span>';
+                    } else {
+                        return '<span style="color: green">待添加:</span>' + d.payType;
+                    }
+                }
+            }
+            , {field: 'payAmount', title: '交易数量(CNT)', width: 150}
+            , {
+                field: 'itemType', title: '项目类型', width: 500, templet: function (d) {
+                    //todo 土地操作修改 比如倍数+id = 1or12 2or12 3or12
+                    // String[] itemArray = item_type.split("or");
+                    // Integer playCycle = Integer.parseInt(itemArray[0]); //土地周期,比如3个月,1年,5年等
+                    // Integer configLandId = Integer.parseInt(itemArray[1]); //itemType
+                    let _itemType = d.itemType;
+                    if (d.payType == 1) {  // 自定义内容
+                        let _itemArray = _itemType.split("or")
+                        let _configLandId = parseInt(_itemArray[1]); //itemType
+                        let _landCycle = "3个月";
+                        let _playCycle = parseInt(_itemArray[0]); //土地周期,比如3个月,1年,5年等
+                        if (_playCycle == 2) {
+                            _landCycle = "1年";
+                        } else if (_playCycle == 3) {
+                            _landCycle = "5年";
+                        }
+                        return '租赁土地' + '<span style="color: red">' + _configLandId + '</span>' + '号,周期:'
+                            + '<span style="color: red">' + _landCycle + '</span>';
+                    } else if (d.payType == 4) {
+                        return '购买种子:id=' + '<span style="color: red">' + _itemType + '</span>';
+                    } else if (d.payType == 2) {
+                        return '<span style="color: green">自然防护包:' + _itemType + '</span>';
+                    } else if (d.payType == 3) {
+                        return '<span style="color: green">野兽防护包:' + _itemType + '</span>';
+                    }
+                }
+            }
+            , {field: 'txHash', title: 'txHash'}
+            , {field: 'cntDescribe', title: '交易描述', hide: true}
+            , {field: 'createTime', title: '创建时间'}
+            , {field: 'updateTime', title: '更新时间', hide: true}
+        ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: true
+        , height: 500
+        , cellMinWidth: 80
+    });
+}
+
+function cntReload(data) {
+    // console.log("cntReload where:", this.where, data);
+    tableCNT.reload({
+        page: {
+            curr: 1 //重新从第 1 页开始
+            , limit: 10
+        }
+        , method: 'POST'
+        , url: ctx + "/sys/sysComUsers/findCNTTranByUserId"
+        , where: data
+        , done: function (res, curr, count) {
+            // console.log(res, curr, count);
+            // this.where={};
+            //不清空,有问题:搜索条件会保留
+            //清空,  有问题:分页的时候没有搜索条件了,分页会受到影响
+        }
+    });
+}
+
+
+/**
+ * 用户操作日志
+ * @param table
+ * @param data
+ */
+function initPlayerLog(table, data) {
+    //用户操作playerLog
+    // console.log("playerLog");
+    tablePlayerLog = table.render({
+        elem: '#comPlayerLogTable'
+        , url: ctx + "/sys/sysComUsers/findPlayerLogPage"
+        , method: 'POST'
+        //请求前参数处理
+        , request: {
+            pageName: 'page' //页码的参数名称,默认:page
+            , limitName: 'rows' //每页数据量的参数名,默认:limit
+        }
+        , where: data
+        , response: {
+            statusName: 'flag' //规定数据状态的字段名称,默认:code
+            , statusCode: true //规定成功的状态码,默认:0
+            , msgName: 'msg' //规定状态信息的字段名称,默认:msg
+            , countName: 'records' //规定数据总数的字段名称,默认:count
+            , dataName: 'rows' //规定数据列表的字段名称,默认:data
+        }
+        //响应后数据处理
+        , parseData: function (res) { //res 即为原始返回的数据
+            let data = res.data;
+            // console.log("playerLog",res);
+            return {
+                "flag": res.flag, //解析接口状态
+                "msg": res.msg, //解析提示文本
+                "records": data.records, //解析数据长度
+                "rows": data.rows //解析数据列表
+            };
+        }
+        , toolbar: '#comPlayerLogTableToolbarDemo'
+        , title: '用户仓库操作列表'
+        , cols: [[
+            {field: 'id', title: 'ID', hide: true}
+            , {field: 'userId', title: 'userId', width: 260}
+            , {field: 'tId', title: '目标id', width: 100}
+            , {
+                field: 'tType', title: '交易的类型', width: 100, templet: function (d) {
+                    if (d.tType == 0) {  // 自定义内容
+                        return '<span style="color: green">收获果实</span>';
+                    } else if (d.tType == 1) {
+                        return '<span style="color: red">种植种子</span>';
+                    } else if (d.tType == 2) {
+                        return '<span style="color: red">赠送</span>';
+                    } else if (d.tType == 3) {
+                        return '<span style="color: green">被赠送</span>';
+                    } else if (d.tType == 4) {
+                        return '<span style="color: green">钻石兑换种子</span>';
+                    } else if (d.tType == 5) {
+                        return '<span style="color: red">出售果实</span>';
+                    } else if (d.tType == 6) {
+                        return '<span style="color: green">偷取果实</span>';
+                    } else if(d.tType == 7){
+                        return '<span style="color: red">断电扣除果实</span>';
+                    } else {
+                        return '<span style="color: green">待添加:</span>' + d.tType;
+                    }
+                }
+            }
+            , {field: 'tName', title: '物品名字', width: 120}
+            , {
+                field: 'tAmount', title: '交易数量', width: 150, templet: function (d) {
+                    return (d.tAmount + d.tPart).toFixed(5);
+                }
+            }
+            , {
+                field: 'beforeAmount', title: '交易前数量', templet: function (d) {
+                    return (d.beforeAmount + d.beforePart).toFixed(5);
+                }
+            }
+            , {
+                field: 'afterAmount', title: '交易后数量', templet: function (d) {
+                    return (d.afterAmount + d.afterPart).toFixed(5);
+                }
+            }
+            , {field: 'tLoss', title: '系统扣除部分'}
+            , {field: 'lMultiple', title: 'land倍数', width: 80}
+            , {field: 'createTime', title: '创建时间'}
+            , {field: 'updateTime', title: '更新时间', hide: true}
+        ]]
+        , defaultToolbar: ['', 'exports', 'print']
+        , page: true
+        , height: 500
+        , cellMinWidth: 80
+    });
+}
+
+
+function playerLogReload(data) {
+    tablePlayerLog.reload({
+        page: {
+            curr: 1 //重新从第 1 页开始
+            , limit: 10
+        }
+        , method: 'POST'
+        , url: ctx + "/sys/sysComUsers/findPlayerLogPage"
+        , where: data
+        , done: function (res, curr, count) {
+        }
+    });
+}

+ 21 - 21
src/main/resources/view/sys/aComConfig/excelCharacterAttri.html

@@ -57,13 +57,13 @@
                                    class="layui-input" lay-verify="positiveWholeNumberRequiredTrue">
                                    class="layui-input" lay-verify="positiveWholeNumberRequiredTrue">
                         </div>
                         </div>
                     </div>
                     </div>
-                    <div class="layui-form-item" >
-                        <label class="layui-form-label">初始力量上限</label>
-                        <div class="layui-input-block">
-                            <input type="text" name="startPowerLimitUpper" autocomplete="off" placeholder="startPowerLimitUpper"
-                                   class="layui-input" lay-verify="positiveWholeNumberRequiredTrue" >
-                        </div>
-                    </div>
+<!--                    <div class="layui-form-item" >-->
+<!--                        <label class="layui-form-label">初始力量上限</label>-->
+<!--                        <div class="layui-input-block">-->
+<!--                            <input type="text" name="startPowerLimitUpper" autocomplete="off" placeholder="startPowerLimitUpper"-->
+<!--                                   class="layui-input" lay-verify="positiveWholeNumberRequiredTrue" >-->
+<!--                        </div>-->
+<!--                    </div>-->
                     <div class="layui-form-item">
                     <div class="layui-form-item">
                         <label class="layui-form-label">初始智慧下限</label>
                         <label class="layui-form-label">初始智慧下限</label>
                         <div class="layui-input-block">
                         <div class="layui-input-block">
@@ -72,13 +72,13 @@
                         </div>
                         </div>
                     </div>
                     </div>
 
 
-                    <div class="layui-form-item" id="animalId">
-                        <label class="layui-form-label">初始智慧上限</label>
-                        <div class="layui-input-block">
-                            <input type="text" name="startWisdomLimitUpper" autocomplete="off" placeholder="startWisdomLimitUpper"
-                                   class="layui-input">
-                        </div>
-                    </div>
+<!--                    <div class="layui-form-item" id="animalId">-->
+<!--                        <label class="layui-form-label">初始智慧上限</label>-->
+<!--                        <div class="layui-input-block">-->
+<!--                            <input type="text" name="startWisdomLimitUpper" autocomplete="off" placeholder="startWisdomLimitUpper"-->
+<!--                                   class="layui-input">-->
+<!--                        </div>-->
+<!--                    </div>-->
                     <div class="layui-form-item">
                     <div class="layui-form-item">
                         <label class="layui-form-label">初始技巧下限</label>
                         <label class="layui-form-label">初始技巧下限</label>
                         <div class="layui-input-block">
                         <div class="layui-input-block">
@@ -86,13 +86,13 @@
                                    class="layui-input" lay-verify="positiveWholeNumberRequiredTrue">
                                    class="layui-input" lay-verify="positiveWholeNumberRequiredTrue">
                         </div>
                         </div>
                     </div>
                     </div>
-                    <div class="layui-form-item">
-                        <label class="layui-form-label">初始技巧上限</label>
-                        <div class="layui-input-block">
-                            <input type="text" name="startSkillLimitUpper" autocomplete="off" placeholder="startSkillLimitUpper"
-                                   class="layui-input" lay-verify="positiveWholeNumberRequiredTrue">
-                        </div>
-                    </div>
+<!--                    <div class="layui-form-item">-->
+<!--                        <label class="layui-form-label">初始技巧上限</label>-->
+<!--                        <div class="layui-input-block">-->
+<!--                            <input type="text" name="startSkillLimitUpper" autocomplete="off" placeholder="startSkillLimitUpper"-->
+<!--                                   class="layui-input" lay-verify="positiveWholeNumberRequiredTrue">-->
+<!--                        </div>-->
+<!--                    </div>-->
                     <div class="layui-form-item">
                     <div class="layui-form-item">
                         <label class="layui-form-label">属性随机值</label>
                         <label class="layui-form-label">属性随机值</label>
                         <div class="layui-input-block">
                         <div class="layui-input-block">

+ 84 - 0
src/main/resources/view/sys/aComUser/userAttri.html

@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--解决idea thymeleaf 表达式模板报红波浪线-->
+<!--suppress ALL -->
+<html xmlns:th="http://www.thymeleaf.org">
+<head>
+    <!-- 引入公用部分 -->
+    <script th:replace="common/head::static"></script>
+    <!-- 游戏数据用户相关样式 -->
+    <link th:href="@{/sys/aComUser/css/user.css}" rel="stylesheet" type="text/css"/>
+</head>
+<body>
+<div class="layui-row layui-col-space15">
+    <!-- 树 -->
+    <div class="layui-col-md6">
+        <div class="layui-card">
+            <div class="layui-card-header">用户属性列表</div>
+            <div class="layui-card-body">
+                <!-- 表格主体 -->
+                <table class="layui-hide" id="userTable" lay-filter="test"></table>
+                <!-- 模板 -->
+                <script type="text/html" id="userTableToolbarDemo">
+                    <div class="layui-form-item">
+                        <div class="layui-inline">
+                            <label class="layui-form-label">钱包地址</label>
+                            <div class="layui-input-inline" style="width: 300px;">
+                                <input type="text" id="queryByAddress" name="queryByAddress" autocomplete="off"
+                                       placeholder="输入钱包地址" class="layui-input layui-btn-sm">
+                            </div>
+                        </div>
+                        <div class="layui-inline">
+                            <button class="layui-btn layui-btn-sm" style="padding: 0 10px;" lay-event="query">查询<i
+                                    class="layui-icon layui-icon-search"></i></button>
+                        </div>
+                    </div>
+                </script>
+                <script type="text/html" id="userTableBarDemo">
+                    <a class="layui-btn layui-btn-xs" lay-event="edit">编辑<i class="layui-icon layui-icon-edit"></i></a>
+                </script>
+            </div>
+        </div>
+
+    </div>
+    <!-- 操作表单 -->
+    <div class="layui-col-md6">
+        <div class="layui-card">
+            <div class="layui-card-header">操作表单</div>
+            <div class="layui-card-body">
+                <form id="comUserForm" class="layui-form layui-form-pane">
+                    <div class="layui-form-item">
+                        <label class="layui-form-label">已使用的体力</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="strength" autocomplete="off" placeholder="strength"
+                                   class="layui-input"  lay-verify="positiveWholeNumberRequiredTrue">
+                        </div>
+                    </div>
+
+                    <div class="layui-form-item">
+                        <div class="layui-inline">
+                            <label class="layui-form-label">最近修改时间</label>
+                            <div class="layui-input-block">
+                                <input type="text" name="updateTime" autocomplete="off" class="layui-input"
+                                       readonly="readonly">
+                            </div>
+                        </div>
+                    </div>
+                    <!-- 隐藏域 -->
+                    <input type="text" name="userId" hidden="hidden"/>
+                    <input type="text" name="id" hidden="hidden"/>
+                    <div class="layui-form-item">
+                        <div class="layui-input-block">
+                            <a class="layui-btn" type="submit" lay-submit lay-filter="comUserFilter" >保存</a>
+                        </div>
+                    </div>
+                </form>
+
+            </div>
+        </div>
+    </div>
+
+</div>
+</body>
+<!-- js -->
+<script th:src="@{/sys/aComUser/js/userAttri.js}"></script>
+</html>