xiaoyong931011
2022-08-04 4e88d81927a660254005ff247ea79a42616388b4
20220804  配送限制
9 files added
29 files modified
861 ■■■■■ changed files
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/OrderDeliveryStateEnum.java 25 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java 48 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java 7 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiLoginController.java 12 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java 10 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java 64 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/dto/ApiXcxOpenDto.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IAdminMallGoodsService.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IAdminMallOrderService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java 3 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java 2 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java 29 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java 7 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java 33 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java 29 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java 23 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java 5 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AdminHomeDeliverySettingVo.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AdminMallOrderInfoVo.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/AdminRangeSettingVo.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiMallGoodsDeliverySettingVo.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/ApiMallGoodsDeliveryVo.java 19 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java 4 ●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java 5 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallGoodsMapper.xml 11 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallOrderInfoMapper.xml 11 ●●●●● patch | view | raw | blame | history
src/main/resources/mapper/modules/MallTeamLeaderMapper.xml 1 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/goods/deliveryHomeList.html 108 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/goods/deliveryHomeUpdate.html 85 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/goods/deliverySetting.html 81 ●●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/order/orderDetail.html 78 ●●●● patch | view | raw | blame | history
src/main/resources/templates/febs/views/modules/order/orderList.html 43 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -5,6 +5,13 @@
@Getter
public enum DataDictionaryEnum {
    //配送设置
    HOME_DELIVERY_AMOUNT("DELIVERY_SETTING", "HOME_DELIVERY_AMOUNT"),
    FRIST_COST_LEVEL("HOME_DELIVERY_SETTING", "FRIST_COST_LEVEL"),
    SECOND_COST_LEVEL("HOME_DELIVERY_SETTING", "SECOND_COST_LEVEL"),
    //范围参数
    RANGE_SWITCH("RANGE_SETTING", "RANGE_SWITCH"),
    RANGE_SIZE("RANGE_SETTING", "RANGE_SIZE"),
    SCORE_SIGN_SETTING("SCORE_SETTING", "SCORE_SIGN_SETTING"),
    STATIC_BONUS("BONUS_TYPE", "STATIC_BONUS"),
src/main/java/cc/mrbird/febs/common/enumerates/OrderDeliveryStateEnum.java
New file
@@ -0,0 +1,25 @@
package cc.mrbird.febs.common.enumerates;
import lombok.Getter;
@Getter
public enum OrderDeliveryStateEnum {
    /**
     * 待配送
     */
    DELIVERY_WAIT(1),
    /**
     * 配送中
     */
    DELIVERY_ING(2),
    /**
     * 已送达
     */
    DELIVERY_FINISH(3);
    private final int value;
    OrderDeliveryStateEnum(int value) {
        this.value = value;
    }
}
src/main/java/cc/mrbird/febs/mall/controller/AdminMallGoodsController.java
@@ -5,15 +5,21 @@
import cc.mrbird.febs.common.controller.BaseController;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.utils.OssUtils;
import cc.mrbird.febs.mall.dto.AddMallGoodsDto;
import cc.mrbird.febs.mall.dto.MallGoodsUpdateDto;
import cc.mrbird.febs.mall.dto.RankAwardUpdateDto;
import cc.mrbird.febs.mall.dto.UpMallGoodsDto;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.entity.MallGoodsCategory;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.service.IAdminMallGoodsService;
import cc.mrbird.febs.mall.vo.AdminHomeDeliverySettingVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsCategoryTreeVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsTreeVo;
import cc.mrbird.febs.mall.vo.AdminRangeSettingVo;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
@@ -38,6 +44,7 @@
public class AdminMallGoodsController extends BaseController {
    private final IAdminMallGoodsService adminMallGoodsService;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    /**
     *  图片上传
@@ -162,5 +169,46 @@
        return adminMallGoodsService.getAllGoodsTree();
    }
    /**
     * 商品配送设置 -- 更新
     */
    @PostMapping(value = "/deliverySetUpdate")
    public FebsResponse deliverySetUpdate(AdminRangeSettingVo adminRangeSettingVo) {
        Integer rangeSwitch = adminRangeSettingVo.getRangeSwitch();
        DataDictionaryCustom rangeSwitchDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SWITCH.getType(), DataDictionaryEnum.RANGE_SWITCH.getCode());
        rangeSwitchDic.setValue(rangeSwitch.toString());
        dataDictionaryCustomMapper.updateById(rangeSwitchDic);
        Integer rangeSize = adminRangeSettingVo.getRangeSize();
        DataDictionaryCustom rangeSizeDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SIZE.getType(), DataDictionaryEnum.RANGE_SIZE.getCode());
        rangeSizeDic.setValue(rangeSize.toString());
        dataDictionaryCustomMapper.updateById(rangeSizeDic);
        Double homeDeliveryAmount = adminRangeSettingVo.getHomeDeliveryAmount();
        DataDictionaryCustom homeDeliveryAmountDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.HOME_DELIVERY_AMOUNT.getType(), DataDictionaryEnum.HOME_DELIVERY_AMOUNT.getCode());
        homeDeliveryAmountDic.setValue(homeDeliveryAmount.toString());
        dataDictionaryCustomMapper.updateById(homeDeliveryAmountDic);
        return new FebsResponse().success();
    }
    /**
     * 配送费列表
     */
    @GetMapping("deliveryHomeList")
    public FebsResponse deliveryHomeList(AdminHomeDeliverySettingVo adminHomeDeliverySettingVo, QueryRequest request) {
        Map<String, Object> data = getDataTable(adminMallGoodsService.getDeliveryHomeListInPage(adminHomeDeliverySettingVo, request));
        return new FebsResponse().success().data(data);
    }
    /**
     * 配送费列表-更新
     */
    @PostMapping("deliveryHomeUpdate")
    @ControllerEndpoint(operation = "配送费列表-更新", exceptionMessage = "操作失败")
    public FebsResponse deliveryHomeUpdate(@Valid AdminHomeDeliverySettingVo adminHomeDeliverySettingVo) {
        return adminMallGoodsService.deliveryHomeUpdate(adminHomeDeliverySettingVo);
    }
}
src/main/java/cc/mrbird/febs/mall/controller/AdminMallOrderController.java
@@ -5,6 +5,8 @@
import cc.mrbird.febs.common.entity.DeptTree;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.excl.ExcelSheetPO;
import cc.mrbird.febs.common.utils.excl.ExcelUtil;
@@ -12,6 +14,7 @@
import cc.mrbird.febs.common.utils.excl.ResponseHeadUtil;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
import cc.mrbird.febs.mall.mapper.MallOrderRefundOperationMapper;
import cc.mrbird.febs.mall.service.IAdminMallGoodsService;
import cc.mrbird.febs.mall.service.IAdminMallOrderService;
@@ -280,7 +283,7 @@
        ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, res, os, true);
        return null;
    }
    private final MallOrderInfoMapper mallOrderInfoMapper;
    @GetMapping("exportOrderListOne")
    @ControllerEndpoint(operation = "订单列表", exceptionMessage = "导出失败")
    public FebsResponse exportOrderListOne(MallOrderInfo mallOrderInfo, HttpServletResponse response) throws IOException {
@@ -326,6 +329,8 @@
                temp.add(item.getAddressArea());
                temp.add(item.getProvince()+item.getCity()+item.getTownship()+item.getDetailAddress());
                list.add(temp);
                adminMallOrderService.updateOrderStateAndDeliveryState(item.getId(), OrderStatusEnum.WAIT_FINISH.getValue(), OrderDeliveryStateEnum.DELIVERY_ING.getValue());
            }
        }
        orderSheet.setDataList(list);
src/main/java/cc/mrbird/febs/mall/controller/ApiLoginController.java
@@ -83,4 +83,16 @@
        return memberService.xcxSaveInfo(apiXcxSaveInfoDto);
    }
    /**
     * 小程序是否允许打开
     *    先获取系统设置的范围访问开关
     *      1:开启,获取范围大小,如果范围内没有团长,不允许打开
     *      2:关闭,允许打开
     */
    @ApiOperation(value = "小程序是否允许打开", notes = "小程序是否允许打开")
    @PostMapping(value = "/xcxOpen")
    public FebsResponse xcxOpen(@RequestBody ApiXcxOpenDto apiXcxOpenDto){
        return memberService.xcxOpen(apiXcxOpenDto);
    }
}
src/main/java/cc/mrbird/febs/mall/controller/ApiMallGoodsController.java
@@ -4,6 +4,7 @@
import cc.mrbird.febs.mall.dto.ApiMallGoodsCommentDto;
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.service.IApiMallGoodsService;
import cc.mrbird.febs.mall.vo.ApiMallGoodsDeliveryVo;
import cc.mrbird.febs.mall.vo.MallGoodsCommentVo;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import cc.mrbird.febs.mall.vo.MallGoodsListVo;
@@ -56,4 +57,13 @@
        return new FebsResponse().success().data(mallGoodsService.findMallGoodsCommentByGoodsId(queryDto));
    }
    @ApiOperation(value = "配送设置", notes = "配送设置")
    @ApiResponses({
            @ApiResponse(code = 200, message = "success", response = ApiMallGoodsDeliveryVo.class)
    })
    @GetMapping(value = "/deliverySetting")
    public FebsResponse deliverySetting() {
        return new FebsResponse().success().data(mallGoodsService.findDeliverySetting());
    }
}
src/main/java/cc/mrbird/febs/mall/controller/ViewMallGoodsController.java
@@ -2,20 +2,30 @@
import cc.mrbird.febs.common.controller.BaseController;
import cc.mrbird.febs.common.entity.FebsConstant;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.utils.FebsUtil;
import cc.mrbird.febs.mall.dto.ScoreSettingDto;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.service.IAdminMallGoodsService;
import cc.mrbird.febs.mall.service.IAdminMallMemberService;
import cc.mrbird.febs.mall.vo.AdminMailGoodsDetailVo;
import cc.mrbird.febs.mall.vo.AdminMailGoodsUpdateVo;
import cc.mrbird.febs.mall.vo.MallMemberVo;
import cc.mrbird.febs.mall.vo.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject;
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.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@Controller("goodsView")
@RequestMapping(FebsConstant.VIEW_PREFIX + "modules/goods")
@@ -23,6 +33,7 @@
public class ViewMallGoodsController extends BaseController {
    private final IAdminMallGoodsService mallGoodsService;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    /**
     * 商品列表
@@ -81,4 +92,51 @@
        model.addAttribute("goodsInfo", data);
        return FebsUtil.view("modules/goods/goodsUpdateNew");
    }
    /**
     * 商品配送设置
     * @param model
     * @return
     */
    @GetMapping("/deliverySetting")
    public String deliverySetting(Model model) {
        AdminRangeSettingVo adminRangeSettingVo = new AdminRangeSettingVo();
        DataDictionaryCustom deliverySetting = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.HOME_DELIVERY_AMOUNT.getType(), DataDictionaryEnum.HOME_DELIVERY_AMOUNT.getCode());
        if (ObjectUtil.isNotNull(deliverySetting)) {
            adminRangeSettingVo.setHomeDeliveryAmount(Double.parseDouble(deliverySetting.getValue()));
        }
        DataDictionaryCustom rangeSwitch = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SWITCH.getType(), DataDictionaryEnum.RANGE_SWITCH.getCode());
        if (ObjectUtil.isNotNull(rangeSwitch)) {
            adminRangeSettingVo.setRangeSwitch(Integer.parseInt(rangeSwitch.getValue()));
        }
        DataDictionaryCustom rangeSize = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SIZE.getType(), DataDictionaryEnum.RANGE_SIZE.getCode());
        if (ObjectUtil.isNotNull(rangeSize)) {
            adminRangeSettingVo.setRangeSize(Integer.parseInt(rangeSize.getValue()));
        }
        model.addAttribute("deliverySetting", adminRangeSettingVo);
        return FebsUtil.view("modules/goods/deliverySetting");
    }
    /**
     * 配送费设置
     * @return
     */
    @GetMapping("deliveryHomeList")
    @RequiresPermissions("deliveryHomeList:view")
    public String deliveryHomeList() {
        return FebsUtil.view("modules/goods/deliveryHomeList");
    }
    /**
     * 配送费设置 --- 编辑
     */
    @GetMapping("deliveryHomeUpdate/{id}")
    @RequiresPermissions("deliveryHomeUpdate:update")
    public String deliveryHomeUpdate(@PathVariable long id, Model model) {
        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectById(id);
        AdminHomeDeliverySettingVo adminHomeDeliverySettingVo = JSONUtil.toBean(dataDictionaryCustom.getValue(), AdminHomeDeliverySettingVo.class);
        adminHomeDeliverySettingVo.setId(id);
        model.addAttribute("homeDeliverySetting", adminHomeDeliverySettingVo);
        return FebsUtil.view("modules/goods/deliveryHomeUpdate");
    }
}
src/main/java/cc/mrbird/febs/mall/dto/AddOrderDto.java
@@ -28,6 +28,9 @@
    @ApiModelProperty(value = "订单提交类型", example = "1从购物车提交, 2从商品直接提交")
    private Integer type;
    @ApiModelProperty(value = "是否送货上门  1:是 2:否", example = "1")
    private Integer isHome;
    @ApiModelProperty(value = "备注")
    private String remark;
src/main/java/cc/mrbird/febs/mall/dto/ApiXcxOpenDto.java
New file
@@ -0,0 +1,19 @@
package cc.mrbird.febs.mall.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value = "ApiXcxOpenDto", description = "小程序登录")
public class ApiXcxOpenDto {
    @ApiModelProperty(value = "经度")
    private Double longitude;
    @ApiModelProperty(value = "纬度")
    private Double latitude;
}
src/main/java/cc/mrbird/febs/mall/entity/MallOrderInfo.java
@@ -121,4 +121,12 @@
     * 微信订单编号
     */
    private String wxOrderNo;
    /**
     * 配送状态 1:待配送 2:配送中 3:已送达
     */
    private Integer deliveryState;
    /**
     * 是否送货上门  1:是 2:否
     */
    private Integer isHome;
}
src/main/java/cc/mrbird/febs/mall/mapper/MallGoodsMapper.java
@@ -1,6 +1,7 @@
package cc.mrbird.febs.mall.mapper;
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.entity.MallGoodsComment;
import cc.mrbird.febs.mall.vo.*;
@@ -43,4 +44,6 @@
    List<MallGoods> selectOrderGoodsList(@Param("memberId") Long memberId, @Param("date") Date date);
    IPage<MallGoodsCommentVo> selectMallGoodsCommentListQueryInPage(Page<MallGoodsCommentVo> page,  @Param("record")MallGoodsComment mallGoodsComment);
    IPage<DataDictionaryCustom> getDeliveryHomeListInPage(Page<DataDictionaryCustom> page, @Param("record")AdminHomeDeliverySettingVo adminHomeDeliverySettingVo);
}
src/main/java/cc/mrbird/febs/mall/mapper/MallOrderInfoMapper.java
@@ -61,4 +61,6 @@
    List<MallOrderInfo> selectOrderInfoWithNormalGoods(@Param("date") Date date);
    BigDecimal selectSumAmountByPayMethodAndStatue(@Param("payMethod")String name, @Param("statue")int value);
    void updateOrderStateAndDeliveryState(@Param("orderId")Long orderId, @Param("orderState")int orderState, @Param("deliveryState")int deliveryState);
}
src/main/java/cc/mrbird/febs/mall/service/IAdminMallGoodsService.java
@@ -7,10 +7,7 @@
import cc.mrbird.febs.mall.dto.UpMallGoodsDto;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.entity.MallGoodsCategory;
import cc.mrbird.febs.mall.vo.AdminMailGoodsDetailVo;
import cc.mrbird.febs.mall.vo.AdminMailGoodsUpdateVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsTreeVo;
import cc.mrbird.febs.mall.vo.AdminMallGoodsVo;
import cc.mrbird.febs.mall.vo.*;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -41,4 +38,8 @@
    FebsResponse goodsHot(Long id);
    FebsResponse goodsNotHot(Long id);
    IPage<AdminHomeDeliverySettingVo> getDeliveryHomeListInPage(AdminHomeDeliverySettingVo adminHomeDeliverySettingVo, QueryRequest request);
    FebsResponse deliveryHomeUpdate(AdminHomeDeliverySettingVo adminHomeDeliverySettingVo);
}
src/main/java/cc/mrbird/febs/mall/service/IAdminMallOrderService.java
@@ -66,4 +66,6 @@
    FebsResponse showStateSwitchOn(Long id);
    FebsResponse showStateSwitchOff(Long id);
    void updateOrderStateAndDeliveryState(Long id, int value, int value1);
}
src/main/java/cc/mrbird/febs/mall/service/IApiMallGoodsService.java
@@ -3,6 +3,7 @@
import cc.mrbird.febs.mall.dto.ApiMallGoodsCommentDto;
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.vo.ApiMallGoodsDeliveryVo;
import cc.mrbird.febs.mall.vo.MallGoodsCommentVo;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import cc.mrbird.febs.mall.vo.MallGoodsListVo;
@@ -17,4 +18,6 @@
    MallGoodsDetailsVo findMallGoodsDetailsById(@Param("id") Long id);
    IPage<MallGoodsCommentVo> findMallGoodsCommentByGoodsId(ApiMallGoodsCommentDto queryDto);
    ApiMallGoodsDeliveryVo findDeliverySetting();
}
src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java
@@ -71,4 +71,6 @@
    FebsResponse xcxSaveInfo(ApiXcxSaveInfoDto apiXcxSaveInfoDto);
    FebsResponse xcxPhoneLogin(ApiXcxPhoneLoginDto apiXcxPhoneLoginDto);
    FebsResponse xcxOpen(ApiXcxOpenDto apiXcxOpenDto);
}
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallGoodsService.java
@@ -12,6 +12,7 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -495,5 +496,33 @@
        return new FebsResponse().success();
    }
    @Override
    public IPage<AdminHomeDeliverySettingVo> getDeliveryHomeListInPage(AdminHomeDeliverySettingVo adminHomeDeliverySetting, QueryRequest request) {
        Page<DataDictionaryCustom> page = new Page<>(request.getPageNum(), request.getPageSize());
        IPage<DataDictionaryCustom> dataDictionaryCustomIPage = this.baseMapper.getDeliveryHomeListInPage(page, adminHomeDeliverySetting);
        List<DataDictionaryCustom> records = dataDictionaryCustomIPage.getRecords();
        List<AdminHomeDeliverySettingVo> adminHomeDeliverySettingVos = new ArrayList<>();
        if(CollUtil.isNotEmpty(records)){
            for(DataDictionaryCustom dataDictionaryCustom : records){
                AdminHomeDeliverySettingVo adminHomeDeliverySettingVo = JSONUtil.toBean(dataDictionaryCustom.getValue(), AdminHomeDeliverySettingVo.class);
                adminHomeDeliverySettingVo.setId(dataDictionaryCustom.getId());
                adminHomeDeliverySettingVos.add(adminHomeDeliverySettingVo);
            }
        }
        IPage<AdminHomeDeliverySettingVo> adminHomeDeliverySettingVoIPage = new Page<>();
        adminHomeDeliverySettingVoIPage.setRecords(adminHomeDeliverySettingVos);
        adminHomeDeliverySettingVoIPage.setTotal(dataDictionaryCustomIPage.getTotal());
        return adminHomeDeliverySettingVoIPage;
    }
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    @Override
    public FebsResponse deliveryHomeUpdate(AdminHomeDeliverySettingVo adminHomeDeliverySettingVo) {
        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectById(adminHomeDeliverySettingVo.getId());
        adminHomeDeliverySettingVo.setId(null);
        dataDictionaryCustom.setValue(JSONUtil.toJsonStr(adminHomeDeliverySettingVo));
        dataDictionaryCustomMapper.updateById(dataDictionaryCustom);
        return new FebsResponse().success();
    }
}
src/main/java/cc/mrbird/febs/mall/service/impl/AdminMallOrderService.java
@@ -4,6 +4,7 @@
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.enumerates.FlowTypeEnum;
import cc.mrbird.febs.common.enumerates.MoneyFlowTypeEnum;
import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum;
import cc.mrbird.febs.mall.dto.*;
import cc.mrbird.febs.mall.entity.*;
import cc.mrbird.febs.mall.mapper.*;
@@ -103,6 +104,7 @@
        mallExpressInfoMapper.insert(mallExpressInfo);
        mallOrderInfo.setStatus(3);
        mallOrderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_ING.getValue());
        mallOrderInfoMapper.updateById(mallOrderInfo);
        return new FebsResponse().success();
    }
@@ -398,6 +400,11 @@
    }
    @Override
    public void updateOrderStateAndDeliveryState(Long id, int value, int value1) {
        mallOrderInfoMapper.updateOrderStateAndDeliveryState(id,value,value1);
    }
    @Override
    public void deliverGoodsByOrderNo(DeliverGoodsDto deliverGoodsDto) {
        MallOrderInfo mallOrderInfo = mallOrderInfoMapper.selectByOrderNo(deliverGoodsDto.getOrderNo());
        if (mallOrderInfo == null) {
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallGoodsServiceImpl.java
@@ -1,29 +1,35 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
import cc.mrbird.febs.common.exception.FebsException;
import cc.mrbird.febs.common.utils.AppContants;
import cc.mrbird.febs.mall.conversion.MallGoodsConversion;
import cc.mrbird.febs.mall.conversion.MallMemberConversion;
import cc.mrbird.febs.mall.dto.ApiMallGoodsCommentDto;
import cc.mrbird.febs.mall.dto.MallGoodsQueryDto;
import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
import cc.mrbird.febs.mall.entity.MallGoods;
import cc.mrbird.febs.mall.entity.MallGoodsComment;
import cc.mrbird.febs.mall.mapper.DataDictionaryCustomMapper;
import cc.mrbird.febs.mall.mapper.MallGoodsCommentMapper;
import cc.mrbird.febs.mall.mapper.MallGoodsImagesMapper;
import cc.mrbird.febs.mall.mapper.MallGoodsMapper;
import cc.mrbird.febs.mall.service.IApiMallGoodsService;
import cc.mrbird.febs.mall.vo.MallGoodsCommentVo;
import cc.mrbird.febs.mall.vo.MallGoodsDetailsVo;
import cc.mrbird.febs.mall.vo.MallGoodsListVo;
import cc.mrbird.febs.mall.vo.*;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -38,6 +44,7 @@
    private final MallGoodsImagesMapper goodsImagesMapper;
    private final MallGoodsCommentMapper mallGoodsCommentMapper;
    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
    @Override
@@ -76,4 +83,24 @@
        mallGoodsComment.setGoodsId(queryDto.getGoodsId());
        return this.baseMapper.selectMallGoodsCommentListQueryInPage(page,mallGoodsComment);
    }
    @Override
    public ApiMallGoodsDeliveryVo findDeliverySetting() {
        ApiMallGoodsDeliveryVo apiMallGoodsDeliveryVo = new ApiMallGoodsDeliveryVo();
        DataDictionaryCustom deliverySetting = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.HOME_DELIVERY_AMOUNT.getType(), DataDictionaryEnum.HOME_DELIVERY_AMOUNT.getCode());
        if(ObjectUtil.isNotNull(deliverySetting)){
            apiMallGoodsDeliveryVo.setHomeDeliveryServiceAmount(Double.parseDouble(deliverySetting.getValue()));
        }
        List<DataDictionaryCustom> homeDeliverySettings = dataDictionaryCustomMapper.selectDicByType(DataDictionaryEnum.FRIST_COST_LEVEL.getType());
        if(CollUtil.isNotEmpty(homeDeliverySettings)){
            List<ApiMallGoodsDeliverySettingVo> apiMallGoodsDeliverySettingVos = new ArrayList<>();
            for(DataDictionaryCustom dic : homeDeliverySettings){
                String apiMallGoodsDeliverySettingVoJson = dic.getValue();
                ApiMallGoodsDeliverySettingVo apiMallGoodsDeliverySettingVo = JSONUtil.toBean(apiMallGoodsDeliverySettingVoJson, ApiMallGoodsDeliverySettingVo.class);
                apiMallGoodsDeliverySettingVos.add(apiMallGoodsDeliverySettingVo);
            }
            apiMallGoodsDeliveryVo.setApiMallGoodsDeliverySettingVos(apiMallGoodsDeliverySettingVos);
        }
        return apiMallGoodsDeliveryVo;
    }
}
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java
@@ -701,6 +701,35 @@
        return new FebsResponse().fail().message("验证码错误");
    }
    @Override
    public FebsResponse xcxOpen(ApiXcxOpenDto apiXcxOpenDto) {
        DataDictionaryCustom rangeSwitch = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SWITCH.getType(), DataDictionaryEnum.RANGE_SWITCH.getCode());
        if(StrUtil.isNotBlank(rangeSwitch.getValue()) && "1".equals(rangeSwitch.getValue())){
            if(ObjectUtil.isNull(apiXcxOpenDto.getLongitude()) || ObjectUtil.isNull(apiXcxOpenDto.getLatitude())){
                return new FebsResponse().fail().message("请授权位置信息");
            }
            Double longitude = apiXcxOpenDto.getLongitude();
            Double latitude = apiXcxOpenDto.getLatitude();
            DataDictionaryCustom rangeSize = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.RANGE_SIZE.getType(), DataDictionaryEnum.RANGE_SIZE.getCode());
            if(ObjectUtil.isEmpty(rangeSize)){
                return new FebsResponse().fail().message("系统繁忙");
            }
            if(StrUtil.isBlank(rangeSize.getValue())){
                return new FebsResponse().fail().message("系统繁忙");
            }
            //方位大小,换成单位:米
            Integer value = Integer.parseInt(rangeSize.getValue()) * 1000;
            //根据经纬度获取周围团长的距离
            MallTeamLeader mallTeamLeader = mallTeamLeaderMapper.selectLeaderByLonAndLat(longitude, latitude);
            Double distance = mallTeamLeader.getDistance();
            if(value <= distance){
                return new FebsResponse().fail().message("系统繁忙");
            }
        }
        return new FebsResponse().success();
    }
    private  String getXcxLoginUrl(String code) {
        String wechatLoginUrl =xcxProperties.getWecharLoginUrl();
        return String.format(wechatLoginUrl, xcxProperties.getXcxAppid(), xcxProperties.getXcxSecret(), code);
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallOrderInfoServiceImpl.java
@@ -71,10 +71,6 @@
        if(StrUtil.isEmpty(takeUniqueCode)){
            throw new FebsException("请选择自提点");
        }
        MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
        if (address == null) {
            throw new FebsException("地址不存在");
        }
        String orderNo = MallUtils.getOrderNum();
        MallOrderInfo orderInfo = new MallOrderInfo();
@@ -82,11 +78,6 @@
        orderInfo.setOrderTime(new Date());
        orderInfo.setMemberId(member.getId());
        orderInfo.setStatus(OrderStatusEnum.WAIT_PAY.getValue());
        orderInfo.setName(address.getName());
        orderInfo.setAddress(address.getArea() + address.getAddress());
        orderInfo.setPhone(address.getPhone());
        orderInfo.setLatitude(address.getLatitude());
        orderInfo.setLongitude(address.getLongitude());
        orderInfo.setRemark(addOrderDto.getRemark());
        orderInfo.setOrderType(addOrderDto.getOrderType());
@@ -180,6 +171,20 @@
        orderInfo.setAmount(total);
        orderInfo.setCarriage(carriage);
        MallAddressInfo address = mallAddressInfoMapper.selectAddressInfoByMemberIdAndId(member.getId(), addOrderDto.getAddressId());
        orderInfo.setName(address.getName());
        orderInfo.setPhone(address.getPhone());
        orderInfo.setIsHome(addOrderDto.getIsHome());
        //订单金额大于50,且选择送货上门,订单需要选择地址信息
        if(total.compareTo(new BigDecimal(50)) > 0 && 1 == addOrderDto.getIsHome()){
            if (StrUtil.isBlank(address.getLatitude())||StrUtil.isBlank(address.getLongitude())) {
                throw new FebsException("请添加地址");
            }
            orderInfo.setAddress(address.getArea() + address.getAddress());
            orderInfo.setLatitude(address.getLatitude());
            orderInfo.setLongitude(address.getLongitude());
        }
        this.baseMapper.updateById(orderInfo);
        agentProducer.sendOrderCancelDelayMsg(orderInfo.getId(), 15 * 60 * 1000L);
src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallTeamLeaderServiceImpl.java
@@ -1,6 +1,7 @@
package cc.mrbird.febs.mall.service.impl;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.common.utils.LoginUserUtil;
import cc.mrbird.febs.common.utils.ShareCodeUtil;
@@ -121,14 +122,14 @@
            return new FebsResponse().fail().message("订单不存在");
        }
        Integer status = mallOrderInfo.getStatus();
        if(OrderStatusEnum.WAIT_SHIPPING.getValue() != status){
        if(OrderStatusEnum.WAIT_FINISH.getValue() != status){
            return new FebsResponse().fail().message("订单不是待确认到货状态");
        }
        Integer deliveryType = mallOrderInfo.getDeliveryType();
        if(1 != deliveryType){
            return new FebsResponse().fail().message("订单的配送方式不是自提");
        }
        mallOrderInfo.setStatus(OrderStatusEnum.WAIT_FINISH.getValue());
        mallOrderInfo.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_FINISH.getValue());
        mallOrderInfoMapper.updateById(mallOrderInfo);
        return new FebsResponse().success().message("确认成功");
    }
src/main/java/cc/mrbird/febs/mall/vo/AdminHomeDeliverySettingVo.java
New file
@@ -0,0 +1,19 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "AdminHomeDeliverySettingVo", description = "信息返回类")
public class AdminHomeDeliverySettingVo {
    private Long id;
    @ApiModelProperty(value = "订单金额超过:amount")
    private Double amount;
    @ApiModelProperty(value = "配送费:cost")
    private Double cost;
}
src/main/java/cc/mrbird/febs/mall/vo/AdminMallOrderInfoVo.java
@@ -73,4 +73,10 @@
    private Integer carriage;
    //配送方式 1:自提 2:快递
    private Integer deliveryType;
    private String wxOrderNo;
    //配送状态 1:待配送 2:配送中 3:已送达
    private Integer deliveryState;
    //是否送货上门  1:是 2:否
    private Integer isHome;
}
src/main/java/cc/mrbird/febs/mall/vo/AdminRangeSettingVo.java
New file
@@ -0,0 +1,17 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
@Data
@ApiModel(value = "AdminRangeSettingVo", description = "信息返回类")
public class AdminRangeSettingVo {
    //范围访问开关1:开启2:关闭
    private Integer rangeSwitch;
    //范围大小(单位:千米)
    private Integer rangeSize;
    //超过金额可以提供送货上门服务
    private Double homeDeliveryAmount;
}
src/main/java/cc/mrbird/febs/mall/vo/ApiMallGoodsDeliverySettingVo.java
New file
@@ -0,0 +1,17 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "ApiMallGoodsDeliverySettingVo", description = "配送设置")
public class ApiMallGoodsDeliverySettingVo {
    @ApiModelProperty(value = "订单金额超过:amount")
    private Double amount;
    @ApiModelProperty(value = "配送费:cost")
    private Double cost;
}
src/main/java/cc/mrbird/febs/mall/vo/ApiMallGoodsDeliveryVo.java
New file
@@ -0,0 +1,19 @@
package cc.mrbird.febs.mall.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(value = "MallGoodsDeliveryVo", description = "配送设置")
public class ApiMallGoodsDeliveryVo {
    @ApiModelProperty(value = "超过金额可以提供送货上门服务")
    private Double homeDeliveryServiceAmount;
    @ApiModelProperty(value = "订单金额超过:amount,配送费:cost")
    private List<ApiMallGoodsDeliverySettingVo> apiMallGoodsDeliverySettingVos;
}
src/main/java/cc/mrbird/febs/mall/vo/OrderDetailVo.java
@@ -107,5 +107,9 @@
    private String addressArea;
    @ApiModelProperty(value = "自提点详细地址")
    private String detailAddress;
    @ApiModelProperty(value = "配送状态 1:待配送 2:配送中 3:已送达")
    private Integer deliveryState;
    @ApiModelProperty(value = "是否送货上门  1:是 2:否")
    private Integer isHome;
}
src/main/java/cc/mrbird/febs/mall/vo/OrderListVo.java
@@ -45,4 +45,10 @@
    @ApiModelProperty(value = "提货码")
    private String takeCode;
    @ApiModelProperty(value = "配送状态 1:待配送 2:配送中 3:已送达")
    private Integer deliveryState;
    @ApiModelProperty(value = "是否送货上门  1:是 2:否")
    private Integer isHome;
}
src/main/java/cc/mrbird/febs/pay/controller/XcxPayController.java
@@ -1,6 +1,7 @@
package cc.mrbird.febs.pay.controller;
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.enumerates.OrderDeliveryStateEnum;
import cc.mrbird.febs.common.enumerates.OrderStatusEnum;
import cc.mrbird.febs.mall.entity.MallOrderInfo;
import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
@@ -22,6 +23,7 @@
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
@Slf4j
@RestController
@@ -88,6 +90,9 @@
                        if (order != null && OrderStatusEnum.WAIT_PAY.getValue() == order.getStatus()) {
                            log.debug("检查支付金额payMoney={},order.getPayMoney()={}", payMoney, order.getAmount());
                            order.setStatus(OrderStatusEnum.WAIT_SHIPPING.getValue());
                            order.setPayResult("1");
                            order.setPayTime(new Date());
                            order.setDeliveryState(OrderDeliveryStateEnum.DELIVERY_WAIT.getValue());
                            mallOrderInfoMapper.updateById(order);
                            threadResult.success().message("支付成功");
                        } else {
src/main/resources/mapper/modules/MallGoodsMapper.xml
@@ -234,4 +234,15 @@
        order by a.created_time desc
    </select>
    <select id="getDeliveryHomeListInPage" resultType="cc.mrbird.febs.mall.entity.DataDictionaryCustom">
        SELECT
            a.*
        FROM
            data_dictionary_custom a
        where a.type = 'HOME_DELIVERY_SETTING'
        GROUP BY a.id
        ORDER BY
            a.CREATED_TIME asc
    </select>
</mapper>
src/main/resources/mapper/modules/MallOrderInfoMapper.xml
@@ -59,7 +59,7 @@
    </select>
    <select id="selectOrderListInPage" resultType="cc.mrbird.febs.mall.vo.AdminMallOrderInfoVo">
        select *,
        select a.*,
               b.name memberName,
               b.bind_phone memberBindPhone,
               b.phone memberPhone
@@ -123,6 +123,8 @@
        <result column="remark" property="remark" />
        <result column="take_code" property="takeCode" />
        <result column="take_unique_code" property="takeUniqueCode" />
        <result column="delivery_state" property="deliveryState" />
        <result column="is_home" property="isHome" />
        <result column="del_flag" property="delFlag" />
        <result column="leader_name" property="leaderName" />
        <result column="leader_phone" property="leaderPhone" />
@@ -333,4 +335,11 @@
        select IFNULL(sum(IFNULL(amount,0)),0) from mall_order_info
        where pay_method = #{payMethod} and status = #{statue}
    </select>
    <update id="updateOrderStateAndDeliveryState">
        update mall_order_info
        set status = #{orderState},
            delivery_state = #{deliveryState}
        where id = #{orderId}
    </update>
</mapper>
src/main/resources/mapper/modules/MallTeamLeaderMapper.xml
@@ -70,6 +70,7 @@
        <result column="latitude" property="latitude" />
        <result column="order_type" property="orderType" />
        <result column="comment_state" property="commentState" />
        <result column="delivery_state" property="deliveryState" />
        <result column="carriage" property="carriage" />
        <result column="remark" property="remark" />
        <result column="del_flag" property="delFlag" />
src/main/resources/templates/febs/views/modules/goods/deliveryHomeList.html
New file
@@ -0,0 +1,108 @@
<div class="layui-fluid layui-anim febs-anim" id="febs-delivery-home-level" 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>
                            </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">&#xe848;</i>
                                </div>
                                <div class="layui-btn layui-btn-sm layui-btn-primary febs-button-green-plain table-action" id="reset">
                                    <i class="layui-icon">&#xe79b;</i>
                                </div>
                            </div>
                        </div>
                    </form>
                    <table lay-filter="deliveryHomeLevelTable" lay-data="{id: 'deliveryHomeLevelTable'}"></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">&#xe7a5;</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-delivery-home-level'),
            $query = $view.find('#query'),
            $reset = $view.find('#reset'),
            $searchForm = $view.find('form'),
            sortObject = {field: '', type: null},
            tableIns;
        form.render();
        // 表格初始化
        initTable();
        // 初始化表格操作栏各个按钮功能
        table.on('tool(deliveryHomeLevelTable)', function (obj) {
            var data = obj.data,
                layEvent = obj.event;
            if (layEvent === 'deliveryHomeUpdate') {
                febs.modal.open('编辑', 'modules/goods/deliveryHomeUpdate/' + data.id, {
                    btn: ['确认', '取消'],
                    yes: function (index, layero) {
                        $('#delivery-home-edit').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: 'deliveryHomeLevelTable',
                url: ctx + 'admin/goods/deliveryHomeList',
                cols: [[
                    {field: 'amount', title: '订单金额超过(元),收取配送费', minWidth: 100,align:'left'},
                    {field: 'cost', title: '配送费', minWidth: 100,align:'left'},
                    {title: '操作',
                        templet: function (d) {
                                return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="deliveryHomeUpdate" shiro:hasPermission="user:update">编辑</button>'
                        },minWidth: 300,align:'center'}
                ]]
            });
        }
        // 获取查询参数
        function getQueryParams() {
            return {};
        }
    })
</script>
src/main/resources/templates/febs/views/modules/goods/deliveryHomeUpdate.html
New file
@@ -0,0 +1,85 @@
<style>
    #delivery-home-edit {
        padding: 20px 25px 25px 0;
    }
    #delivery-home-edit .layui-treeSelect .ztree li a, .ztree li span {
        margin: 0 0 2px 3px !important;
    }
    #delivery-home-edit #data-permission-tree-block {
        border: 1px solid #eee;
        border-radius: 2px;
        padding: 3px 0;
    }
    #delivery-home-edit .layui-treeSelect .ztree li span.button.switch {
        top: 1px;
        left: 3px;
    }
    #delivery-home-edit img{
        max-width:200px
    }
</style>
<div class="layui-fluid" id="delivery-home-edit">
    <form class="layui-form" action="" lay-filter="delivery-home-edit-form">
        <div class="layui-form-item febs-hide">
            <label class="layui-form-label">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="number" name="amount" class="layui-input">
                <div class="layui-form-mid layui-word-aux">填入整数</div>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label febs-form-item-require">配送费:</label>
            <div class="layui-input-block">
                <input type="number" name="cost" class="layui-input">
                <div class="layui-form-mid layui-word-aux">填入整数</div>
            </div>
        </div>
        <div class="layui-form-item febs-hide">
            <button class="layui-btn" lay-submit="" lay-filter="delivery-home-edit-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,
            homeDeliverySetting = [[${homeDeliverySetting}]],
            $view = $('#delivery-home-edit'),
            validate = layui.validate,
            _deptTree;
        form.render();
        initUserValue();
        function initUserValue() {
            form.val("delivery-home-edit-form", {
                "id": homeDeliverySetting.id,
                "amount": homeDeliverySetting.amount,
                "cost": homeDeliverySetting.cost
            });
        }
        form.on('submit(delivery-home-edit-submit)', function (data) {
            febs.post(ctx + 'admin/goods/deliveryHomeUpdate', data.field, function () {
                layer.closeAll();
                febs.alert.success('操作成功');
                $('#febs-delivery-home-level').find('#reset').click();
            });
            return false;
        });
    });
</script>
src/main/resources/templates/febs/views/modules/goods/deliverySetting.html
New file
@@ -0,0 +1,81 @@
<div class="layui-fluid layui-anim febs-anim" id="delivery-setting" lay-title="商品配送设置">
    <div class="layui-row layui-col-space8 febs-container">
        <form class="layui-form" action="" lay-filter="delivery-setting-form">
            <div class="layui-card">
                <div class="layui-card-body">
                    <div class="layui-form-item">
                        <label class="layui-form-label">范围访问开关:</label>
                        <div class="layui-input-block">
                            <input type="radio" name="rangeSwitch" value="1" title="开启">
                            <input type="radio" name="rangeSwitch" value="2" title="关闭">
                        </div>
                        <div class="layui-form-mid layui-word-aux">范围访问开关,开启之后,如果范围大小内没有自提点,则无法打开程序</div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">范围大小:</label>
                        <div class="layui-input-block" style="width: 50%">
                            <input type="text" name="rangeSize" data-th-id="${deliverySetting.rangeSize}"
                                   lay-verify="number" autocomplete="off" class="layui-input" >
                            <div class="layui-form-mid layui-word-aux">(填入整数)当前位置的范围,单位:千米,</div>
                        </div>
                    </div>
                    <div class="layui-form-item">
                        <label class="layui-form-label">订单金额超过:</label>
                        <div class="layui-input-inline" style="width: 120px">
                            <input type="text" name="homeDeliveryAmount" data-th-id="${deliverySetting.homeDeliveryAmount}"
                                   lay-verify="number" autocomplete="off" class="layui-input" >
                            <div class="layui-form-mid layui-word-aux">(填入整数)</div>
                        </div>
                        <div class="layui-form-mid">元,可以提供送货上门服务</div>
                    </div>
                </div>
                <div class="layui-card-footer">
                    <button class="layui-btn layui-btn-normal" lay-submit="" lay-filter="delivery-setting-form-submit" id="submit">保存</button>
                </div>
            </div>
        </form>
    </div>
</div>
<style>
    .layui-form-label {
        width: 120px;
    }
    .layui-form-item .layui-input-block {
        margin-left: 150px;
    }
    .layui-table-form .layui-form-item {
        margin-bottom: 20px !important;
    }
</style>
<script data-th-inline="javascript" type="text/javascript">
    layui.use(['dropdown', 'jquery', 'validate', 'febs', 'form', 'eleTree'], function () {
        var $ = layui.jquery,
            febs = layui.febs,
            form = layui.form,
            validate = layui.validate,
            deliverySetting = [[${deliverySetting}]],
            $view = $('#delivery-setting');
        form.verify(validate);
        form.render();
        initUserValue();
        function initUserValue() {
            form.val("delivery-setting-form", {
                "rangeSwitch": deliverySetting.rangeSwitch,
                "rangeSize": deliverySetting.rangeSize,
                "homeDeliveryAmount": deliverySetting.homeDeliveryAmount
            });
        }
        form.on('submit(delivery-setting-form-submit)', function (data) {
            console.log(data);
            febs.post(ctx + 'admin/goods/deliverySetUpdate', data.field, function (res) {
                febs.alert.success('设置成功');
            });
            return false;
        });
    });
</script>
src/main/resources/templates/febs/views/modules/order/orderDetail.html
@@ -39,26 +39,26 @@
                </div>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">地址:</label>
            <div class="layui-input-block">
                <input type="text" name="address"
                       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="payOrderNo"
                       autocomplete="off" class="layui-input" readonly>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">支付凭证:</label>
            <div class="layui-input-block">
                <img alt="支付凭证" data-th-src="${orderDetail.payImage}"  style="width: 200px">
            </div>
        </div>
<!--        <div class="layui-form-item">-->
<!--            <label class="layui-form-label">地址:</label>-->
<!--            <div class="layui-input-block">-->
<!--                <input type="text" name="address"-->
<!--                       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="payOrderNo"-->
<!--                       autocomplete="off" class="layui-input" readonly>-->
<!--            </div>-->
<!--        </div>-->
<!--        <div class="layui-form-item">-->
<!--            <label class="layui-form-label">支付凭证:</label>-->
<!--            <div class="layui-input-block">-->
<!--                <img alt="支付凭证" data-th-src="${orderDetail.payImage}"  style="width: 200px">-->
<!--            </div>-->
<!--        </div>-->
        <div class="layui-row layui-col-space10 layui-form-item">
            <div class="layui-col-lg6">
@@ -74,20 +74,20 @@
                <textarea id="lay_edit" lay-verify="orderItems" name = "orderItems" class="layui-textarea" readonly></textarea>
            </div>
        </div>
        <div class="layui-form-item">
            <label class="layui-form-label">物流单号:</label>
            <div class="layui-input-block">
                <input type="text" name="expressNo"
                       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="expressCom"
                       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="expressNo"-->
<!--                       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="expressCom"-->
<!--                       autocomplete="off" class="layui-input" readonly >-->
<!--            </div>-->
<!--        </div>-->
    </form>
</div>
@@ -116,11 +116,11 @@
                "phone": orderDetail.phone,
                "amount": orderDetail.amount,
                "orderItems": orderDetail.orderItems,
                "expressNo": orderDetail.expressNo,
                "expressCom": orderDetail.expressCom,
                "payImage": orderDetail.payImage,
                "payOrderNo": orderDetail.payOrderNo,
                "address": orderDetail.address
                // "expressNo": orderDetail.expressNo,
                // "expressCom": orderDetail.expressCom,
                // "payImage": orderDetail.payImage,
                // "payOrderNo": orderDetail.payOrderNo,
                // "address": orderDetail.address
            });
        }
src/main/resources/templates/febs/views/modules/order/orderList.html
@@ -99,9 +99,9 @@
</script>
<script type="text/html" id="tableToolBar">
    <div class="layui-btn-container">
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="exportDeliverOne">导出未发货订单(自提)</button>
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="exportDeliverTwo">导出未发货订单(快递)</button>
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" id="importDeliver" lay-event="importDeliver">导入发货</button>
        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="exportDeliverOne">导出待发货订单,系统自动发货</button>
<!--        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" lay-event="exportDeliverTwo">导出未发货订单(快递)</button>-->
<!--        <button class="layui-btn layui-btn-sm layui-btn-primary febs-button-blue-plain" id="importDeliver" lay-event="importDeliver">导入发货</button>-->
    </div>
</script>
<!-- 表格操作栏 end -->
@@ -169,6 +169,17 @@
        table.on('tool(orderTable)', function (obj) {
            var data = obj.data,
                layEvent = obj.event;
            // if (layEvent === 'deliverGoods') {
            //     febs.modal.open('发货', 'modules/order/deliverGoods/' + data.id, {
            //         btn: ['确认', '取消'],
            //         yes: function (index, layero) {
            //             $('#deliver-update').find('#submit').trigger('click');
            //         },
            //         btn2: function () {
            //             layer.closeAll();
            //         }
            //     });
            // }
            if (layEvent === 'deliverGoods') {
                febs.modal.open('发货', 'modules/order/deliverGoods/' + data.id, {
                    btn: ['确认', '取消'],
@@ -241,10 +252,10 @@
                cols: [[
                        {field: 'orderNo', title: '订单编号', minWidth: 200,align:'left'},
                        {field: 'memberName', title: '购买人', minWidth: 120,align:'left'},
                        {field: 'memberPhone', title: '账号', minWidth: 120,align:'left'},
                        {field: 'memberBindPhone', title: '联系方式', minWidth: 120,align:'left'},
                        {field: 'memberPhone', title: '联系方式', minWidth: 120,align:'left'},
                        // {field: 'memberBindPhone', title: '联系方式', minWidth: 120,align:'left'},
                        {field: 'amount', title: '订单金额', minWidth: 120,align:'left'},
                        {field: 'carriage', title: '运费', minWidth: 120,align:'left'},
                        // {field: 'carriage', title: '运费', minWidth: 120,align:'left'},
                        {field: 'orderTime', title: '下单时间', minWidth: 200,align:'left'},
                        {field: 'deliveryType', title: '配送方式',
                            templet: function (d) {
@@ -276,18 +287,24 @@
                                    return ''
                                }
                            }, minWidth: 80,align:'center'},
                    {field: 'deliveryState', title: '配送状态',
                        templet: function (d) {
                            if (d.deliveryState === 1) {
                                return '<span style="color:dodgerblue;">待配送</span>'
                            } else if (d.deliveryState === 2) {
                                return '<span style="color:forestgreen;">配送中</span>'
                            } else if (d.deliveryState === 3) {
                                return '<span style="color:forestgreen;">已送达</span>'
                            }else{
                                return ''
                            }
                        }, minWidth: 120,align:'center'},
                        {field: 'payMethod', title: '支付方式', minWidth: 120,align:'left'},
                        {field: 'payTime', title: '支付时间', minWidth: 200,align:'left'},
                        {field: 'payOrderNo', title: '支付订单号', minWidth: 200,align:'left'},
                        {field: 'wxOrderNo', title: '支付订单号', minWidth: 200,align:'left'},
                        {title: '操作',
                            templet: function (d) {
                                    if (d.status === 2 && d.deliveryType === 2) {
                                        return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="deliverGoods" shiro:hasPermission="user:update">发货</button>'
                                            +'<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>'
                                    }else{
                                        return '<button class="layui-btn layui-btn-normal layui-btn-xs" lay-event="seeOrder" shiro:hasPermission="user:update">详情</button>'
                                    }
                                // }
                            },minWidth: 200,align:'center', fixed:'right'}
                ]]
            });