Search in sources :

Example 6 with Before

use of com.jfinal.aop.Before in project my_curd by qinyou.

the class sysOplogController method exportToExcel.

/**
 * 导出Excel
 */
@Before(SearchSql.class)
public void exportToExcel() {
    String where = getAttr(Constant.SEARCH_SQL);
    List<SysOplog> sysOplogs = SysOplog.dao.findWhere(where);
    String[] columns = new String[] { "user_name", "op_content", "ip", "create_time" };
    String[] headers = new String[] { "操作人", "日志内容", "IP地址", "操作时间" };
    render(PoiRender.me(sysOplogs).fileName(ToolString.toUtf8String("操作日志.xls")).sheetName("操作日志统计").columns(columns).headers(headers).cellWidth(3500).headerRow(1));
}
Also used : SysOplog(com.hxkj.system.model.SysOplog) ToolString(com.hxkj.common.util.ToolString) Before(com.jfinal.aop.Before)

Example 7 with Before

use of com.jfinal.aop.Before in project my_curd by qinyou.

the class LoginController method action.

/**
 * 登录Action
 */
@Before(Tx.class)
public void action() {
    String username = getPara("username");
    String password = getPara("password");
    if (StrKit.isBlank(username)) {
        setAttr("errMsg", "请填写用户名。");
        render("login.html");
        return;
    }
    if (StrKit.isBlank(password)) {
        setAttr("errMsg", "请填写密码。");
        render("login.html");
        return;
    }
    SysUser sysUser = SysUser.dao.findByUsername(username);
    if (sysUser == null) {
        setAttr("errMsg", username + " 用户不存在。");
        render("login.html");
        return;
    }
    password = HashKit.sha1(password);
    if (!sysUser.getPassword().equals(password)) {
        setAttr("username", username);
        setAttr("errMsg", " 密码错误。");
        render("login.html");
        return;
    }
    if (sysUser.getDisabled().equals("1")) {
        setAttr("errMsg", username + " 用户被禁用,请联系管理员。");
        render("login.html");
        return;
    }
    String remember = getPara("remember");
    // 记住密码 && cookie 不存在
    if ("on".equals(remember) && getCookie(usernameKey) == null) {
        // 1天
        setCookie(usernameKey, username, 60 * 60 * 24 * 1);
        setCookie(passwordKey, password, 60 * 60 * 24 * 1);
    }
    // 登录用户信息
    setSessionAttr(Constant.SYSTEM_USER, sysUser);
    // 为了 druid session 监控用
    setSessionAttr(Constant.SYSTEM_USER_NAME, sysUser.getName());
    // 用户角色
    SysUserRole sysUserRole = SysUserRole.dao.findRolesByUserId(sysUser.getId());
    if (sysUserRole != null) {
        // 角色名称(显示用)
        setSessionAttr(Constant.SYSTEM_USER_ROLES, sysUserRole.get("roleNames"));
        LoginService loginService = Duang.duang(LoginService.class);
        List<SysMenu> userMenus = loginService.getUserMenu(sysUserRole.get("roleIds"));
        setSessionAttr(Constant.OWN_MENU, userMenus);
    }
    addOpLog("登录");
    redirect("/main");
}
Also used : SysUser(com.hxkj.system.model.SysUser) SysMenu(com.hxkj.system.model.SysMenu) SysUserRole(com.hxkj.system.model.SysUserRole) Before(com.jfinal.aop.Before)

Example 8 with Before

use of com.jfinal.aop.Before in project fruit-manage by liuzhaozhao.

the class ExcelController method getBusinessSendGoodsBilling.

/**
 * 订单:生成商家出货单
 * <p>
 * 避免混乱,行和单元格都按照这个规范
 * row对象只创建一次,
 * 每次都sheet.createRow(rowCount++)创建获取下一行并指向row引用
 * cellName = c + endColumn(start by 1)
 * <p>
 * excel格式
 * 信息展示(没有固定宽度,默认为三列为一个单元,不够就加单元)
 * 数据(每一列只占一列)
 * 信息展示(没有固定宽度,默认为三列为一个单元,不够就加)
 * <p>
 * 一般数据会比信息展示需要更多的列,所以大概的按3:1来放置
 * <p>
 * 信息展示默认以三列为一个单元
 */
@Before(Tx.class)
public void getBusinessSendGoodsBilling() {
    try {
        int rowCount;
        // 创建Excel
        XSSFWorkbook wb = new XSSFWorkbook();
        Calendar calendar = Calendar.getInstance();
        if (calendar.get(Calendar.HOUR_OF_DAY) < 12) {
            // 超過11:59:59算明天的訂單
            calendar.add(Calendar.DAY_OF_MONTH, -1);
        }
        String startDateStr = DateTimeKit.formatDateToStyle("yyyy-MM-dd", calendar.getTime()) + " 12:00:00";
        calendar.add(Calendar.DAY_OF_MONTH, 1);
        String endDateStr = DateTimeKit.formatDateToStyle("yyyy-MM-dd", calendar.getTime()) + " 12:00:00";
        String sql = "SELECT " + "o.order_id, " + "bu.`name` AS business_user_name, " + "linfo.buy_phone, " + "linfo.buy_address, " + "linfo.buy_user_name, " + "linfo.delivery_type, " + "au.`name` AS sales_name, " + "au.phone AS sales_phone " + "FROM " + "b_order AS o " + "INNER JOIN b_business_user AS bu ON o.u_id = bu.id " + "INNER JOIN b_business_info AS info ON bu.id = info.u_id " + "INNER JOIN a_user AS au ON bu.a_user_sales_id = au.id " + "INNER JOIN b_logistics_info AS linfo ON linfo.order_id = o.order_id " + "WHERE " + "o.order_status in (15,20,25,30) " + "AND o.create_time BETWEEN ? " + "AND ? ";
        List<Order> orders = Order.dao.find(sql, startDateStr, endDateStr);
        Date now = new Date();
        if (orders.size() < 1) {
            renderText("没有订单出货,请稍后操作");
            return;
        }
        for (Order order : orders) {
            rowCount = 0;
            String orderId = order.get("order_id");
            String businessUserName = order.get("business_user_name");
            String buyPhone = order.get("buy_phone");
            String buyAddress = order.get("buy_address");
            String buyUserName = order.get("buy_user_name");
            Integer deliveryType = order.get("delivery_type");
            String salesName = order.get("sales_name");
            String salesPhone = order.get("sales_phone");
            // 创建表
            XSSFSheet sheet = wb.createSheet(businessUserName + "_商家出货单");
            // 去除网格线
            sheet.setDisplayGridlines(false);
            sheet.setDefaultRowHeight((short) (512));
            // 标题样式
            XSSFCellStyle styleTitle = ExcelStyle.getStyleTitle(wb, 2);
            // 文本样式
            XSSFCellStyle styleText = ExcelStyle.getStyleText(wb, 3);
            int textHeight = 30;
            // 表样式
            XSSFCellStyle styleTable = ExcelStyle.getStyleTableByOne(wb, 3);
            int tableHeight = 22;
            // 规范: 设置为1-3合并 ?-6合并 ?-9合并的单元格名称.
            XSSFCell c3;
            XSSFCell c6;
            XSSFCell c9;
            // 1 line
            XSSFRow row = sheet.createRow(rowCount++);
            row.setHeightInPoints(textHeight);
            _mergedRegionNowRow(sheet, row, 1, 9);
            c9 = row.createCell(0);
            c9.setCellStyle(styleTitle);
            c9.setCellValue(DateFormatUtils.format(now, "yyyy-MM-dd") + "广州嘻果出货单" + now.getTime());
            // 2 line
            row = sheet.createRow(rowCount++);
            row.setHeightInPoints(textHeight);
            _mergedRegionNowRow(sheet, row, 1, 3);
            _mergedRegionNowRow(sheet, row, 4, 6);
            _mergedRegionNowRow(sheet, row, 7, 9);
            c3 = row.createCell(0);
            c6 = row.createCell(3);
            c9 = row.createCell(6);
            c3.setCellStyle(styleText);
            c6.setCellStyle(styleText);
            c9.setCellStyle(styleText);
            c3.setCellValue("商家名称:" + businessUserName);
            c6.setCellValue("联系人:" + buyUserName);
            c9.setCellValue("送货电话:" + buyPhone);
            // 3 line
            row = sheet.createRow(rowCount++);
            row.setHeightInPoints(textHeight);
            _mergedRegionNowRow(sheet, row, 1, 9);
            c9 = row.createCell(0);
            c9.setCellStyle(styleText);
            c9.setCellValue("商家地址:" + buyAddress);
            // 4 line
            row = sheet.createRow(rowCount++);
            row.setHeightInPoints(textHeight);
            _mergedRegionNowRow(sheet, row, 1, 3);
            _mergedRegionNowRow(sheet, row, 4, 6);
            _mergedRegionNowRow(sheet, row, 7, 9);
            c3 = row.createCell(0);
            c6 = row.createCell(3);
            c9 = row.createCell(6);
            c3.setCellStyle(styleText);
            c6.setCellStyle(styleText);
            c9.setCellStyle(styleText);
            c3.setCellValue("发车类型:" + ShipmentConstant.SHIPMENT_TYPE.get(deliveryType));
            c6.setCellValue("负责销售:" + salesName);
            c9.setCellValue("联系电话:" + salesPhone);
            // 5 line
            row = sheet.createRow(rowCount++);
            row.setHeightInPoints(textHeight);
            _mergedRegionNowRow(sheet, row, 1, 9);
            c9 = row.createCell(0);
            c9.setCellStyle(styleText);
            c9.setCellValue("配货点:广州江南市场");
            XSSFCell c1;
            XSSFCell c2;
            XSSFCell c4;
            XSSFCell c5;
            // data
            row = sheet.createRow(rowCount++);
            row.setHeightInPoints(textHeight);
            c1 = row.createCell(0);
            c2 = row.createCell(1);
            c3 = row.createCell(2);
            c4 = row.createCell(3);
            c5 = row.createCell(4);
            c6 = row.createCell(5);
            c1.setCellStyle(styleTable);
            c2.setCellStyle(styleTable);
            c3.setCellStyle(styleTable);
            c4.setCellStyle(styleTable);
            c5.setCellStyle(styleTable);
            c6.setCellStyle(styleTable);
            c1.setCellValue("商品名称");
            c2.setCellValue("规格名称");
            c3.setCellValue("重量(斤)");
            c4.setCellValue("下单数量");
            c5.setCellValue("实发数量");
            c6.setCellValue("商品备注");
            sql = "SELECT " + "od.product_name, " + "od.product_standard_name, " + "ps.weight_price, " + "od.num, " + "od.actual_send_goods_num, " + "od.buy_remark " + "FROM " + "b_order AS o " + "INNER JOIN b_order_detail AS od ON o.order_id = od.order_id " + "INNER JOIN b_product_standard AS ps ON od.product_standard_id = ps.id " + "WHERE o.order_id = ? ";
            List<OrderDetail> orderDetails = OrderDetail.dao.find(sql, orderId);
            for (OrderDetail orderDetail : orderDetails) {
                row = sheet.createRow(rowCount++);
                row.setHeightInPoints(tableHeight);
                c1 = row.createCell(0);
                c2 = row.createCell(1);
                c3 = row.createCell(2);
                c4 = row.createCell(3);
                c5 = row.createCell(4);
                c6 = row.createCell(5);
                c1.setCellStyle(styleTable);
                c2.setCellStyle(styleTable);
                c3.setCellStyle(styleTable);
                c4.setCellStyle(styleTable);
                c5.setCellStyle(styleTable);
                c6.setCellStyle(styleTable);
                c1.setCellValue(orderDetail.get("product_name").toString());
                c2.setCellValue(orderDetail.get("product_standard_name").toString());
                c3.setCellValue(orderDetail.get("weight_price").toString());
                c4.setCellValue(orderDetail.get("num").toString());
                c5.setCellValue(orderDetail.get("actual_send_goods_num").toString());
                c6.setCellValue(orderDetail.get("buy_remark") != null ? orderDetail.get("buy_remark").toString() : null);
                c3.setCellType(CellType.NUMERIC);
                c4.setCellType(CellType.NUMERIC);
                c5.setCellType(CellType.NUMERIC);
            }
            // 添加三行空行
            // sheet.createRow(rowCount++).setRowStyle(styleTable);
            // sheet.createRow(rowCount++).setRowStyle(styleTable);
            // sheet.createRow(rowCount++).setRowStyle(styleTable);
            // bottom 1 line
            row = sheet.createRow(rowCount++);
            row.setHeightInPoints(textHeight);
            _mergedRegionNowRow(sheet, row, 1, 9);
            c9 = row.createCell(0);
            c9.setCellStyle(styleText);
            c9.setCellValue("温馨提示:运费和装车费、三轮车费、包装费、短途费/中转费,均按实际产生费用收取");
            // bottom 2 line
            row = sheet.createRow(rowCount++);
            row.setHeightInPoints(textHeight);
            _mergedRegionNowRow(sheet, row, 1, 3);
            _mergedRegionNowRow(sheet, row, 4, 6);
            _mergedRegionNowRow(sheet, row, 7, 9);
            c3 = row.createCell(0);
            c6 = row.createCell(3);
            c9 = row.createCell(6);
            c3.setCellStyle(styleText);
            c6.setCellStyle(styleText);
            c9.setCellStyle(styleText);
            c3.setCellValue("点单:");
            c6.setCellValue("核单:");
            c9.setCellValue("打泡:");
        }
        HttpServletResponse response = getResponse();
        OutputStream output = response.getOutputStream();
        response.reset();
        response.setHeader("Content-disposition", "attachment; filename=" + DateFormatUtils.format(now, "yyyy年MM月dd日") + "商家出货单.xls");
        response.setContentType("application/excel");
        wb.write(output);
        output.close();
    } catch (Exception e) {
        renderErrorText("导出失败,出现未知异常,请联系技术,时间为:" + DateFormatUtils.format(new Date(), "yyyy-MM-dd hh:ss:mm"));
        e.printStackTrace();
    }
}
Also used : Calendar(java.util.Calendar) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) HttpServletResponse(javax.servlet.http.HttpServletResponse) Date(java.util.Date) IOException(java.io.IOException) ExcelRdException(com.fruit.manage.util.excelRd.ExcelRdException) Before(com.jfinal.aop.Before)

Example 9 with Before

use of com.jfinal.aop.Before in project fruit-manage by liuzhaozhao.

the class ExcelController method getBusinessCollectionBilling.

/**
 * 订单:生成商家收款单
 * <p>
 * 避免混乱,行和单元格都按照这个规范
 * row对象只创建一次,
 * 每次都sheet.createRow(rowCount++)创建获取下一行并指向row引用
 * cellName = c + endColumn(start by 1)
 * <p>
 * excel格式
 * 信息展示(没有固定宽度,默认为三列为一个单元,不够就加单元)
 * 数据(每一列只占一列)
 * 信息展示(没有固定宽度,默认为三列为一个单元,不够就加)
 * <p>
 * 一般数据会比信息展示需要更多的列,所以大概的按3:1来放置
 * <p>
 * 信息展示默认以三列为一个单元
 */
@Before(Tx.class)
public void getBusinessCollectionBilling() {
    int rowCount;
    // 创建Excel
    XSSFWorkbook wb = new XSSFWorkbook();
    Calendar calendar = Calendar.getInstance();
    if (calendar.get(Calendar.HOUR_OF_DAY) < 12) {
        // 超過11:59:59算明天的訂單
        calendar.add(Calendar.DAY_OF_MONTH, -1);
    }
    String startDateStr = DateTimeKit.formatDateToStyle("yyyy-MM-dd", calendar.getTime()) + " 12:00:00";
    calendar.add(Calendar.DAY_OF_MONTH, 1);
    String endDateStr = DateTimeKit.formatDateToStyle("yyyy-MM-dd", calendar.getTime()) + " 12:00:00";
    String sql = "SELECT " + "o.order_id, " + "bu.`name` AS business_user_name, " + "linfo.buy_phone, " + "linfo.buy_address, " + "linfo.buy_user_name, " + "linfo.delivery_type, " + "au.`name` AS sales_name, " + "au.phone AS sales_phone " + "FROM " + "b_order AS o " + "INNER JOIN b_business_user AS bu ON o.u_id = bu.id " + "INNER JOIN b_business_info AS info ON bu.id = info.u_id " + "INNER JOIN a_user AS au ON bu.a_user_sales_id = au.id " + "INNER JOIN b_logistics_info AS linfo ON linfo.order_id = o.order_id " + "WHERE " + "o.order_status in (15,20,25,30) " + "AND o.create_time BETWEEN ? " + "AND ? ";
    System.out.println(sql);
    System.out.println(startDateStr);
    System.out.println(endDateStr);
    List<Order> orders = Order.dao.find(sql, startDateStr, endDateStr);
    Date now = new Date();
    if (orders.size() < 1) {
        renderText("没有订单出货,请稍后操作");
        return;
    }
    for (Order order : orders) {
        rowCount = 0;
        String orderId = order.get("order_id");
        String businessUserName = order.get("business_user_name");
        String buyPhone = order.get("buy_phone");
        String buyAddress = order.get("buy_address");
        String buyUserName = order.get("buy_user_name");
        Integer deliveryType = order.get("delivery_type");
        String salesName = order.get("sales_name");
        String salesPhone = order.get("sales_phone");
        // 创建表
        XSSFSheet sheet = wb.createSheet(businessUserName + "_商家出货单");
        // 去除网格线
        sheet.setDisplayGridlines(false);
        sheet.setDefaultRowHeight((short) (512));
        // 标题样式
        XSSFCellStyle styleTitle = ExcelStyle.getStyleTitle(wb, 2);
        // 文本样式
        XSSFCellStyle styleText = ExcelStyle.getStyleText(wb, 3);
        int textHeight = 30;
        // 表样式
        XSSFCellStyle styleTable = ExcelStyle.getStyleTableByOne(wb, 3);
        int tableHeight = 22;
        // 规范: 设置为1-3合并 ?-6合并 ?-9合并的单元格名称.
        XSSFCell c3;
        XSSFCell c6;
        XSSFCell c9;
        // 1 line
        XSSFRow row = sheet.createRow(rowCount++);
        row.setHeightInPoints(textHeight);
        _mergedRegionNowRow(sheet, row, 1, 9);
        c9 = row.createCell(0);
        c9.setCellStyle(styleTitle);
        c9.setCellValue(DateFormatUtils.format(now, "yyyy-MM-dd") + "广州嘻果出货单" + now.getTime());
        // 2 line
        row = sheet.createRow(rowCount++);
        row.setHeightInPoints(textHeight);
        row.setHeightInPoints(textHeight);
        _mergedRegionNowRow(sheet, row, 1, 3);
        _mergedRegionNowRow(sheet, row, 4, 6);
        _mergedRegionNowRow(sheet, row, 7, 9);
        c3 = row.createCell(0);
        c6 = row.createCell(3);
        c9 = row.createCell(6);
        c3.setCellStyle(styleText);
        c6.setCellStyle(styleText);
        c9.setCellStyle(styleText);
        c3.setCellValue("商家名称:" + businessUserName);
        c6.setCellValue("联系人:" + buyUserName);
        c9.setCellValue("送货电话:" + buyPhone);
        // 3 line
        row = sheet.createRow(rowCount++);
        row.setHeightInPoints(textHeight);
        _mergedRegionNowRow(sheet, row, 1, 9);
        c9 = row.createCell(0);
        c9.setCellStyle(styleText);
        c9.setCellValue("商家地址:" + buyAddress);
        // 4 line
        row = sheet.createRow(rowCount++);
        row.setHeightInPoints(textHeight);
        _mergedRegionNowRow(sheet, row, 1, 3);
        _mergedRegionNowRow(sheet, row, 4, 6);
        _mergedRegionNowRow(sheet, row, 7, 9);
        c3 = row.createCell(0);
        c6 = row.createCell(3);
        c9 = row.createCell(6);
        c3.setCellStyle(styleText);
        c6.setCellStyle(styleText);
        c9.setCellStyle(styleText);
        c3.setCellValue("发车类型:" + ShipmentConstant.SHIPMENT_TYPE.get(deliveryType));
        c6.setCellValue("负责销售:" + salesName);
        c9.setCellValue("联系电话:" + salesPhone);
        // 5 line
        row = sheet.createRow(rowCount++);
        row.setHeightInPoints(textHeight);
        _mergedRegionNowRow(sheet, row, 1, 9);
        c9 = row.createCell(0);
        c9.setCellStyle(styleText);
        c9.setCellValue("配货点:广州江南市场");
        XSSFCell c1;
        XSSFCell c2;
        XSSFCell c4;
        XSSFCell c5;
        XSSFCell c7;
        XSSFCell c8;
        // data
        row = sheet.createRow(rowCount++);
        row.setHeightInPoints(tableHeight);
        c1 = row.createCell(0);
        c2 = row.createCell(1);
        c3 = row.createCell(2);
        c4 = row.createCell(3);
        c5 = row.createCell(4);
        c6 = row.createCell(5);
        c7 = row.createCell(6);
        c8 = row.createCell(7);
        c1.setCellStyle(styleTable);
        c2.setCellStyle(styleTable);
        c3.setCellStyle(styleTable);
        c4.setCellStyle(styleTable);
        c5.setCellStyle(styleTable);
        c6.setCellStyle(styleTable);
        c7.setCellStyle(styleTable);
        c8.setCellStyle(styleTable);
        c1.setCellValue("商品名称");
        c2.setCellValue("规格名称");
        c3.setCellValue("重量(斤)");
        c4.setCellValue("下单数量");
        c5.setCellValue("实发数量");
        c6.setCellValue("单价");
        c7.setCellValue("总额");
        c8.setCellValue("商品备注");
        sql = "SELECT " + "od.product_name, " + "od.product_standard_name, " + "ps.weight_price, " + "od.num, " + "od.actual_send_goods_num, " + "od.sell_price, " + "o.pay_reality_need_money, " + "od.buy_remark " + "FROM " + "b_order AS o " + "INNER JOIN b_order_detail AS od ON o.order_id = od.order_id " + "INNER JOIN b_product_standard AS ps ON od.product_standard_id = ps.id " + "WHERE o.order_id = ? ";
        List<OrderDetail> orderDetails = OrderDetail.dao.find(sql, orderId);
        for (OrderDetail orderDetail : orderDetails) {
            row = sheet.createRow(rowCount++);
            row.setHeightInPoints(textHeight);
            c1 = row.createCell(0);
            c2 = row.createCell(1);
            c3 = row.createCell(2);
            c4 = row.createCell(3);
            c5 = row.createCell(4);
            c6 = row.createCell(5);
            c7 = row.createCell(6);
            c8 = row.createCell(7);
            c1.setCellStyle(styleTable);
            c2.setCellStyle(styleTable);
            c3.setCellStyle(styleTable);
            c4.setCellStyle(styleTable);
            c5.setCellStyle(styleTable);
            c6.setCellStyle(styleTable);
            c7.setCellStyle(styleTable);
            c8.setCellStyle(styleTable);
            c1.setCellValue(orderDetail.get("product_name").toString());
            c2.setCellValue(orderDetail.get("product_standard_name").toString());
            c3.setCellValue(orderDetail.get("weight_price").toString());
            c4.setCellValue(orderDetail.get("num").toString());
            c5.setCellValue(orderDetail.get("actual_send_goods_num").toString());
            c6.setCellValue(orderDetail.get("sell_price").toString());
            c7.setCellValue(orderDetail.get("pay_reality_need_money") != null ? orderDetail.get("pay_reality_need_money").toString() : null);
            c8.setCellValue(orderDetail.get("buy_remark") != null ? orderDetail.get("buy_remark").toString() : null);
        }
    }
    try {
        HttpServletResponse response = getResponse();
        OutputStream output = response.getOutputStream();
        response.reset();
        response.setHeader("Content-disposition", "attachment; filename=" + DateFormatUtils.format(now, "yyyy年MM月dd日") + "商家出货单.xls");
        response.setContentType("application/excel");
        wb.write(output);
        output.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
Also used : Calendar(java.util.Calendar) OutputStream(java.io.OutputStream) FileOutputStream(java.io.FileOutputStream) HttpServletResponse(javax.servlet.http.HttpServletResponse) Date(java.util.Date) IOException(java.io.IOException) ExcelRdException(com.fruit.manage.util.excelRd.ExcelRdException) Before(com.jfinal.aop.Before)

Example 10 with Before

use of com.jfinal.aop.Before in project fruit-manage by liuzhaozhao.

the class OrderController method save.

/**
 * 保存添加的新订单
 */
@Before(Tx.class)
public void save() {
    Integer uid = getSessionAttr(Constant.SESSION_UID);
    Order order = getModel(Order.class, "", true);
    String products = getPara("products");
    Integer business_user_id = getParaToInt("business_user_id");
    List<OrderDetail> orderDetails = JSON.parseArray(products, OrderDetail.class);
    BigDecimal payNeedMoney = new BigDecimal(0);
    BigDecimal payRealityNeedMoney = new BigDecimal(0);
    Date now = new Date();
    if (order.getOrderId() != null) {
        for (OrderDetail orderDetail : orderDetails) {
            Integer num = orderDetail.getNum();
            BigDecimal sellPrice = orderDetail.getSellPrice();
            BigDecimal totalPay = sellPrice.multiply(new BigDecimal(num));
            Integer actualSendGoodsNum = orderDetail.getActualSendGoodsNum();
            // 有实际发货的数量,在配货的时候减库存
            if (actualSendGoodsNum != null && actualSendGoodsNum != 0) {
                // 根据商品规格编号获取商品规格信息
                ProductStandard productStandard = ProductStandard.dao.findById(orderDetail.getProductStandardId());
                // 判断仓库数量是否小于实发数数量
                if (productStandard != null && productStandard.getStock() >= actualSendGoodsNum) {
                    // 执行出库操作:库存量-发货量
                    productStandard.setStock(productStandard.getStock() - actualSendGoodsNum);
                    productStandard.update();
                } else {
                    throw new RuntimeException("");
                }
                // 实际需要支付金额 = (所有子订单=销售价*实际发货数量)
                payRealityNeedMoney = payRealityNeedMoney.add(sellPrice.multiply(new BigDecimal(actualSendGoodsNum)));
            }
            orderDetail.setTotalPay(totalPay);
            payNeedMoney = payNeedMoney.add(totalPay);
            if (orderDetail.getId() != null) {
                orderDetail.update(UserTypeConstant.A_USER, uid);
            } else {
                orderDetail.setUId(business_user_id);
                orderDetail.setOrderId(order.getOrderId());
                orderDetail.setCreateTime(now);
                orderDetail.setUpdateTime(now);
                orderDetail.save(UserTypeConstant.A_USER, uid);
            }
        }
        order.setPayNeedMoney(payNeedMoney);
        // 设置实际支付需要的金额
        order.setPayRealityNeedMoney(payRealityNeedMoney);
        order.setUpdateTime(now);
        order.update();
    } else {
        // 添加,并校验是否存在相同订单周期的订单
        String orderId = IdUtil.createOrderId(business_user_id);
        Order nowOrder = Order.dao.getOrder(orderId);
        // 区分该订单周期的订单是否已经被创建
        if (nowOrder == null) {
            order.setOrderId(orderId);
            for (OrderDetail orderDetail : orderDetails) {
                Integer num = orderDetail.getNum();
                BigDecimal sellPrice = orderDetail.getSellPrice();
                BigDecimal totalPay = sellPrice.multiply(new BigDecimal(num));
                payNeedMoney = payNeedMoney.add(totalPay);
                orderDetail.setTotalPay(totalPay);
                orderDetail.setCreateTime(now);
                orderDetail.setUId(business_user_id);
                orderDetail.setOrderId(order.getOrderId());
                orderDetail.setUpdateTime(now);
                orderDetail.save(UserTypeConstant.A_USER, uid);
            }
            order.setPayNeedMoney(payNeedMoney);
            order.setPayTotalMoney(new BigDecimal(0));
            order.setUId(business_user_id);
            order.setUpdateTime(now);
            order.setCreateTime(now);
            order.save();
        } else {
            // 如果有相同订单周期的订单,就叠加商品.这次添加视为补充商品.因为想修改商品应该去编辑才对,而不是添加.
            // 具有完整字段的对象,用于作为更新模板和核对是否叠加
            List<OrderDetail> nowOrderDetails = OrderDetail.dao.getOrderDetails(orderId);
            // 导入的订单
            OrderDetailFor: for (OrderDetail orderDetail : orderDetails) {
                BigDecimal sellPrice = orderDetail.getSellPrice();
                BigDecimal num = new BigDecimal(orderDetail.getNum());
                // 过滤与数据库中的订单匹配的商品
                for (OrderDetail nowOrderDetail : nowOrderDetails) {
                    if (nowOrderDetail.getProductStandardId().equals(orderDetail.getProductStandardId())) {
                        int nowNum = nowOrderDetail.getNum() + orderDetail.getNum();
                        BigDecimal totalPrice = sellPrice.multiply(num);
                        payNeedMoney = payNeedMoney.add(totalPrice);
                        nowOrderDetail.setNum(nowNum);
                        nowOrderDetail.setTotalPay(totalPrice);
                        nowOrderDetail.setUpdateTime(now);
                        nowOrderDetail.update(UserTypeConstant.A_USER, uid, orderId, nowOrderDetail.getProductId(), nowOrderDetail.getProductStandardId(), nowOrderDetail.getNum(), nowNum);
                        continue OrderDetailFor;
                    }
                }
                // 不和数据库中的订单匹配的新增商品
                BigDecimal totalPrice = sellPrice.multiply(num);
                payNeedMoney = payNeedMoney.add(totalPrice);
                orderDetail.setTotalPay(totalPrice);
                orderDetail.setOrderId(orderId);
                orderDetail.setUId(business_user_id);
                orderDetail.setUpdateTime(now);
                orderDetail.setCreateTime(now);
                orderDetail.save(UserTypeConstant.A_USER, uid);
            }
            nowOrder.setPayNeedMoney(payNeedMoney);
            nowOrder.setUpdateTime(now);
            nowOrder.update();
        }
    }
    // 成功
    renderNull();
}
Also used : BigDecimal(java.math.BigDecimal) Before(com.jfinal.aop.Before)

Aggregations

Before (com.jfinal.aop.Before)53 Date (java.util.Date)11 ActiveRecordException (com.jfinal.plugin.activerecord.ActiveRecordException)5 Record (com.jfinal.plugin.activerecord.Record)5 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)4 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)4 ToolString (com.hxkj.common.util.ToolString)4 ExportParams (cn.afterturn.easypoi.excel.entity.ExportParams)3 ExcelRdException (com.fruit.manage.util.excelRd.ExcelRdException)3 ActFormTpl (com.github.qinyou.process.model.ActFormTpl)3 SysOplog (com.hxkj.system.model.SysOplog)3 SysUser (com.hxkj.system.model.SysUser)3 IOException (java.io.IOException)3 InputStream (java.io.InputStream)3 HashMap (java.util.HashMap)3 BpmnModel (org.activiti.bpmn.model.BpmnModel)3 RepositoryService (org.activiti.engine.RepositoryService)3 HistoricProcessInstance (org.activiti.engine.history.HistoricProcessInstance)3 Model (org.activiti.engine.repository.Model)3 DateTime (org.joda.time.DateTime)3