Pārlūkot izejas kodu

完成医嘱退费。

xiaochan 4 gadi atpakaļ
vecāks
revīzija
80423f3407

+ 10 - 5
src/main/java/thyyxxk/webserver/controller/yibao/YiZhuTuiFeiController.java → src/main/java/thyyxxk/webserver/controller/yibao/ZhuYuanYiZhuController.java

@@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.datamodify.YzActOrder;
-import thyyxxk.webserver.service.yibao.YiZhuTuiFeiServer;
+import thyyxxk.webserver.service.yibao.ZhuYuanYiZhuServer;
 
 /**
  * <p>
@@ -18,12 +18,12 @@ import thyyxxk.webserver.service.yibao.YiZhuTuiFeiServer;
  * @date 2021-09-17 10:26
  */
 @RestController
-@RequestMapping("/yiZhuTuiFei")
-public class YiZhuTuiFeiController {
+@RequestMapping("/zhuYuanYiZhu")
+public class ZhuYuanYiZhuController {
 
-    private final YiZhuTuiFeiServer server;
+    private final ZhuYuanYiZhuServer server;
 
-    public YiZhuTuiFeiController(YiZhuTuiFeiServer server) {
+    public ZhuYuanYiZhuController(ZhuYuanYiZhuServer server) {
         this.server = server;
     }
 
@@ -31,4 +31,9 @@ public class YiZhuTuiFeiController {
     public ResultVo<IPage<YzActOrder>> getOrderList(@RequestBody YzActOrder yzActOrder) {
         return server.getOrderList(yzActOrder);
     }
+
+    @PostMapping("/yiZhuTuiFei")
+    public ResultVo<String> yiZhuTuiFei(@RequestBody YzActOrder param) {
+        return server.yiZhuTuiFei(param);
+    }
 }

+ 0 - 58
src/main/java/thyyxxk/webserver/dao/his/yibao/YiZhuTuiFeiDao.java

@@ -1,58 +0,0 @@
-package thyyxxk.webserver.dao.his.yibao;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
-import thyyxxk.webserver.entity.datamodify.YzActOrder;
-
-import java.math.BigDecimal;
-
-/**
- * <p>
- * 描述: 医嘱退费
- * </p>
- *
- * @author xc
- * @date 2021-09-17 10:25
- */
-@Mapper
-public interface YiZhuTuiFeiDao {
-
-    @Select("<script>" +
-            "select drug_flag, " +
-            "       order_name, " +
-            "       dose, " +
-            "       dose_unit, " +
-            "       frequ_code, " +
-            "       supply_code_name = (SELECT RTRIM(supply_name) from yz_supply_type where yz_supply_type.supply_code = yz_act_order.supply_code), " +
-            "       start_time, " +
-            "       end_time, " +
-            "       physician_name = (select rtrim(name) from a_employee_mi where a_employee_mi.code = yz_act_order.physician), " +
-            "       order_code, " +
-            "       drug_specification, " +
-            "       exec_unit_name = (select rtrim(name) from zd_unit_code where zd_unit_code.code = exec_unit), " +
-            "       group_no, " +
-            "       serial, " +
-            "       discription," +
-            "       act_order_no " +
-            "from yz_act_order where group_no != 00 and frequ_code = 'ONCE' " +
-            "and inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes}" +
-            "<if test=\"orderCode != null and orderCode != '' \">" +
-            "and order_code = #{orderCode} " +
-            "</if>" +
-            "<if test=\"actOrderNo != null\">" +
-            "and act_order_no = #{actOrderNo} " +
-            "</if>" +
-            "<if test=\"startTime != null and startTime != '' \">" +
-            "and order_time &gt;= #{startTime} and order_time &lt;= #{endTime} " +
-            "</if>" +
-            "</script>")
-    IPage<YzActOrder> getYzXinXi(IPage<YzActOrder> page,
-                                 @Param("inpatientNo") String inpatientNo,
-                                 @Param("admissTimes") Integer admissTimes,
-                                 @Param("orderCode") String orderCode,
-                                 @Param("actOrderNo") BigDecimal actOrderNo,
-                                 @Param("startTime") String startTime,
-                                 @Param("endTime") String endTime);
-}

+ 119 - 0
src/main/java/thyyxxk/webserver/dao/his/yibao/ZhuYuanYiZhuDao.java

@@ -0,0 +1,119 @@
+package thyyxxk.webserver.dao.his.yibao;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.*;
+import thyyxxk.webserver.entity.datamodify.YzActOrder;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * <p>
+ * 描述: 医嘱退费
+ * </p>
+ *
+ * @author xc
+ * @date 2021-09-17 10:25
+ */
+@Mapper
+public interface ZhuYuanYiZhuDao {
+
+    @Select("<script>" +
+            "select drug_flag, " +
+            "       order_name, " +
+            "       dose, " +
+            "       dose_unit = b.name, " +
+            "       drug_occ," +
+            "       drug_quan, " +
+            "       rtrim(frequ_code) frequ_code, " +
+            "       supply_code_name = c.supply_name, " +
+            "       start_time, " +
+            "       end_time, " +
+            "       physician_name = d.name, " +
+            "       order_code, " +
+            "       drug_specification, " +
+            "       exec_unit_name = e.name, " +
+            "       group_no = (select rtrim(group_name) from yp_zd_group_name where a.group_no = yp_zd_group_name.group_no), " +
+            "       serial, " +
+            "       discription, " +
+            "       act_order_no," +
+            "       isnull(tf_flag,0) tf_flag " +
+            "from yz_act_order a ,yp_zd_unit b ,yz_supply_type c, a_employee_mi d , zd_unit_code e " +
+            "where group_no != 00 and frequ_code = 'ONCE' and a.dose_unit = b.code and a.supply_code = c.supply_code " +
+            "and a.physician = d.code and a.exec_unit = e.code  and infant_flag = #{infantFlag} " +
+            "and inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} " +
+            "<if test=\"orderCode != null and orderCode != '' \">" +
+            "and order_code = #{orderCode} " +
+            "</if>" +
+            "<if test=\"actOrderNo != null\">" +
+            "and act_order_no = #{actOrderNo} " +
+            "</if>" +
+            "<if test=\"startTime != null and startTime != '' \">" +
+            "and order_time &gt;= #{startTime} and order_time &lt;= #{endTime} " +
+            "</if>" +
+            "<if test=\"tfFlag != null and tfFlag != 3 \">" +
+            "and isnull(tf_flag,0) = #{tfFlag}" +
+            "</if>" +
+            "</script>")
+    IPage<YzActOrder> getYzXinXi(IPage<YzActOrder> page,
+                                 @Param("inpatientNo") String inpatientNo,
+                                 @Param("admissTimes") Integer admissTimes,
+                                 @Param("orderCode") String orderCode,
+                                 @Param("actOrderNo") BigDecimal actOrderNo,
+                                 @Param("startTime") String startTime,
+                                 @Param("endTime") String endTime,
+                                 @Param("infantFlag") int infantFlag,
+                                 @Param("tfFlag") int tfFlag);
+
+    @Select("<script>" +
+            "select order_code, order_name, frequ_code, discription, infant_flag,   " +
+            "       order_time, start_time, confirm_time,status_time,enter_time, end_time,performance_time,print_order_change,refer_physician,consult_physician," +
+            "       drug_specification, drug_quan,drug_flag,act_order_no,   " +
+            "       mini_unit, drug_weight_unit,self_buy, dose, dose_unit, drug_occ, drug_volume,   " +
+            "       drug_vol_unit, pay_self, serial, group_no, doctor_flag,isnull(tf_flag,0) tf_flag,  " +
+            "       inpatient_no, admiss_times, exec_unit, dept_code, ward_code, reg_flag, yb_self_flag   " +
+            "        from yz_act_order where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and act_order_no in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "   #{item.actOrderNo} " +
+            "</foreach>" +
+            "</script>")
+    List<YzActOrder> yuanYiZhu(@Param("inpatientNo") String inpatientNo,
+                               @Param("admissTimes") Integer admissTimes,
+                               @Param("list") List<YzActOrder> tuiFeiList);
+
+    @Insert("<script>" +
+            "INSERT INTO  " +
+            "    yz_act_order  " +
+            "( order_code, order_name, frequ_code, discription, infant_flag,  " +
+            "  order_time, start_time, confirm_time,status_time,enter_time,  " +
+            "  drug_specification, drug_quan,drug_flag,  " +
+            "  act_order_no,  " +
+            "  mini_unit, drug_weight_unit,self_buy, dose, dose_unit, drug_occ, drug_volume,  " +
+            "  drug_vol_unit, pay_self, serial, group_no, doctor_flag,  " +
+            "  inpatient_no, admiss_times, exec_unit, dept_code, ward_code, reg_flag, yb_self_flag,  " +
+            "  supply_code,  " +
+            "  status_flag,  " +
+            "  enter_oper,physician,signer,tf_flag,end_time,performance_time,print_order_change,refer_physician,consult_physician) values " +
+            "<foreach collection='list' item='item' separator=','>" +
+            "(#{item.orderCode},#{item.orderName},#{item.frequCode},#{item.discription},#{item.infantFlag},   " +
+            "#{item.orderTime},#{item.startTime},#{item.confirmTime},#{item.statusTime},#{item.enterTime},   " +
+            "#{item.drugSpecification}, cast(#{item.drugQuan,jdbcType=DECIMAL} as decimal(14,5)),#{item.drugFlag},   " +
+            "#{item.newActOrderNo},#{item.miniUnit},#{item.drugWeightUnit},#{item.selfBuy},cast(#{item.dose,jdbcType=DECIMAL} as decimal(14,5)),#{item.doseUnit},   " +
+            "cast(#{item.drugOcc,jdbcType=DECIMAL} as decimal(14,5)),cast(#{item.drugVolume,jdbcType=DECIMAL} as decimal(14,5)) ,#{item.drugVolUnit},#{item.paySelf},#{item.serial},#{item.groupNo},#{item.doctorFlag},   " +
+            "#{item.inpatientNo},#{item.admissTimes},#{item.execUnit},#{item.deptCode},#{item.wardCode},#{item.regFlag},#{item.ybSelfFlag},   " +
+            "'068','2',#{code},#{code},#{code},2,#{item.endTime},#{item.performanceTime},#{item.printOrderChange},#{item.referPhysician},#{item.consultPhysician})" +
+            "</foreach>" +
+            "</script>")
+    void yiZhuTuiFei(@Param("list") List<YzActOrder> list,
+                     @Param("code") String code);
+
+    @Update("<script>" +
+            "update yz_act_order set tf_flag = 1 where inpatient_no = #{inpatientNo} and admiss_times = #{admissTimes} and act_order_no in " +
+            "<foreach collection='list' item='item' index='index' open='(' close=')' separator=','>" +
+            "#{item.actOrderNo}" +
+            "</foreach>" +
+            "</script>")
+    void genXinTuiFeiFlag(@Param("inpatientNo") String inpatientNo,
+                          @Param("admissTimes") Integer admissTimes,
+                          @Param("list") List<YzActOrder> list);
+}

+ 9 - 14
src/main/java/thyyxxk/webserver/entity/datamodify/YzActOrder.java

@@ -1,8 +1,5 @@
 package thyyxxk.webserver.entity.datamodify;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -11,6 +8,7 @@ import lombok.experimental.Accessors;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -28,7 +26,6 @@ public class YzActOrder implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "act_order_no", type = IdType.ID_WORKER)
     private BigDecimal actOrderNo;
 
     private String inpatientNo;
@@ -36,7 +33,6 @@ public class YzActOrder implements Serializable {
     /**
      * 病人的姓名
      */
-    @TableField(exist = false)
     private String patientName;
 
 
@@ -58,7 +54,6 @@ public class YzActOrder implements Serializable {
 
     private String modifier;
 
-    @TableField(exist = false)
     private String modifierName;
 
     private String infantFlag;
@@ -67,14 +62,12 @@ public class YzActOrder implements Serializable {
 
     private String supplyCode;
 
-    @TableField(exist = false)
     private String supplyCodeName;
 
     private Date performanceTime;
 
     private String physician;
 
-    @TableField(exist = false)
     private String physicianName;
 
     private Date confirmTime;
@@ -85,7 +78,7 @@ public class YzActOrder implements Serializable {
 
     private Date statusTime;
 
-    private Float drugQuan;
+    private BigDecimal drugQuan;
 
     private String instruction;
 
@@ -173,7 +166,9 @@ public class YzActOrder implements Serializable {
 
     private String execId2;
 
-    private Float actOrderNo2;
+    private BigDecimal actOrderNo2;
+
+    private float newActOrderNo;
 
     private Integer printPage;
 
@@ -207,13 +202,13 @@ public class YzActOrder implements Serializable {
 
     private String consultPhysician;
 
-    @TableField(exist = false)
+    private List<YzActOrder> tuiFeiList;
+
+    private Integer tfFlag;
+
     private long currentPage;
-    @TableField(exist = false)
     private long pageSize;
-    @TableField(exist = false)
     private String queryStartTime;
-    @TableField(exist = false)
     private String queryEndTime;
 
     public String getDrugFlagName() {

+ 1 - 1
src/main/java/thyyxxk/webserver/service/yibao/XiangMuLuRuService.java

@@ -111,7 +111,7 @@ public class XiangMuLuRuService {
      */
     @Transactional(rollbackFor = Exception.class)
     public ResultVo<String> xiangMuTuiFei(ZyDetailCharge param) {
-        if (param.getList().isEmpty()) {
+        if (param.getList() == null || param.getList().isEmpty()) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请先选择需要退费的数据,一次性退费不得超过100条");
         } else if (param.getList().size() > 100) {
             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "项目退费一次性大于100条数据");

+ 0 - 54
src/main/java/thyyxxk/webserver/service/yibao/YiZhuTuiFeiServer.java

@@ -1,54 +0,0 @@
-package thyyxxk.webserver.service.yibao;
-
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import thyyxxk.webserver.config.exception.ExceptionEnum;
-import thyyxxk.webserver.dao.his.yibao.YiZhuTuiFeiDao;
-import thyyxxk.webserver.entity.ResultVo;
-import thyyxxk.webserver.entity.datamodify.YzActOrder;
-import thyyxxk.webserver.utils.ResultVoUtil;
-import thyyxxk.webserver.utils.StringUtil;
-
-/**
- * <p>
- * 描述: 医嘱退费
- * </p>
- *
- * @author xc
- * @date 2021-09-17 10:25
- */
-@Service
-@Slf4j
-public class YiZhuTuiFeiServer {
-
-    private final YiZhuTuiFeiDao dao;
-
-    public YiZhuTuiFeiServer(YiZhuTuiFeiDao dao) {
-        this.dao = dao;
-    }
-
-    /**
-     * 获取患者的医嘱
-     *
-     * @param param 住院号
-     * @return 返回
-     */
-    public ResultVo<IPage<YzActOrder>> getOrderList(YzActOrder param) {
-        if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null) {
-            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "住院号或住院次数为空。");
-        }
-        IPage<YzActOrder> page = new Page<>(param.getCurrentPage(), param.getPageSize());
-        log.info("查询患者的医嘱==>住院号:{},住院次数:{},医嘱编码:{},医嘱号:{},开始时间:{},结束时间:{}", param.getInpatientNo(), param.getAdmissTimes(),
-                param.getOrderCode(), param.getActOrderNo(), param.getQueryStartTime(), param.getQueryEndTime());
-        dao.getYzXinXi(page, param.getInpatientNo(), param.getAdmissTimes(), param.getOrderCode(),
-                param.getActOrderNo(), param.getQueryStartTime(), param.getQueryEndTime());
-        if (page.getRecords().isEmpty()) {
-            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
-        }
-        return ResultVoUtil.success(page);
-
-    }
-}

+ 93 - 0
src/main/java/thyyxxk/webserver/service/yibao/ZhuYuanYiZhuServer.java

@@ -0,0 +1,93 @@
+package thyyxxk.webserver.service.yibao;
+
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import thyyxxk.webserver.config.exception.ExceptionEnum;
+import thyyxxk.webserver.dao.his.yibao.ZhuYuanYiZhuDao;
+import thyyxxk.webserver.entity.ResultVo;
+import thyyxxk.webserver.entity.datamodify.YzActOrder;
+import thyyxxk.webserver.utils.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 描述: 医嘱退费
+ * </p>
+ *
+ * @author xc
+ * @date 2021-09-17 10:25
+ */
+@Service
+@Slf4j
+public class ZhuYuanYiZhuServer {
+
+    private final ZhuYuanYiZhuDao dao;
+
+    private final ActOrderNoUtil actOrderNoUtil;
+
+    public ZhuYuanYiZhuServer(ZhuYuanYiZhuDao dao, ActOrderNoUtil actOrderNoUtil) {
+        this.dao = dao;
+        this.actOrderNoUtil = actOrderNoUtil;
+    }
+
+    /**
+     * 获取患者的医嘱
+     *
+     * @param param 住院号
+     * @return 返回
+     */
+    public ResultVo<IPage<YzActOrder>> getOrderList(YzActOrder param) {
+        int infantFlag = 0;
+        if (param.getInpatientNo().contains("$")) {
+            param.setInpatientNo(param.getInpatientNo().split("\\$")[0]);
+            infantFlag = 1;
+        }
+        if (StringUtil.isBlank(param.getInpatientNo()) || param.getAdmissTimes() == null) {
+            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST, "住院号或住院次数为空。");
+        }
+        IPage<YzActOrder> page = new Page<>(param.getCurrentPage(), param.getPageSize());
+        log.info("查询患者的医嘱==>住院号:{},住院次数:{},医嘱编码:{},医嘱号:{},开始时间:{},结束时间:{},婴儿:{},费用类型:{}", param.getInpatientNo(), param.getAdmissTimes(),
+                param.getOrderCode(), param.getActOrderNo(), param.getQueryStartTime(), param.getQueryEndTime(), infantFlag, param.getTfFlag());
+        dao.getYzXinXi(page, param.getInpatientNo(), param.getAdmissTimes(), param.getOrderCode(),
+                param.getActOrderNo(), param.getQueryStartTime(), param.getQueryEndTime(), infantFlag, param.getTfFlag());
+        if (page.getRecords().isEmpty()) {
+            return ResultVoUtil.fail(ExceptionEnum.NO_DATA_EXIST);
+        }
+        return ResultVoUtil.success(page);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public ResultVo<String> yiZhuTuiFei(YzActOrder param) {
+        if (ListUtil.isBlank(param.getTuiFeiList())) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "请先选择退费数据");
+        }
+        if (param.getTuiFeiList().size() >= 100) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "一次性退费超过100条");
+        }
+        List<YzActOrder> yuanYiZhuShuJu = dao.yuanYiZhu(param.getInpatientNo(), param.getAdmissTimes(), param.getTuiFeiList());
+        if (ListUtil.isBlank(yuanYiZhuShuJu)) {
+            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未查询到对应的住院号。");
+        }
+        for (YzActOrder yzActOrder : yuanYiZhuShuJu) {
+            // 同时满足 tf_flag 不等于 0 以及 价格 不为负数 才能退费
+            if (yzActOrder.getTfFlag() != 0) {
+                return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("医嘱号为:【%s】已退费无法重复退费。", yzActOrder.getActOrderNo()));
+            } else if (yzActOrder.getDrugQuan().signum() == -1) {
+                return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, String.format("医嘱号为:【%s】费用为负数无法退费。", yzActOrder.getActOrderNo()));
+            }
+            yzActOrder.setDrugQuan(yzActOrder.getDrugQuan().negate());
+            yzActOrder.setNewActOrderNo(actOrderNoUtil.getActOrderNo());
+        }
+        dao.yiZhuTuiFei(yuanYiZhuShuJu, TokenUtil.getTokenUserId());
+        dao.genXinTuiFeiFlag(param.getInpatientNo(), param.getAdmissTimes(), param.getTuiFeiList());
+        log.info("医嘱退费:{}", JSON.toJSONStringWithDateFormat(yuanYiZhuShuJu, DateUtil.DEFAULT_PATTERN));
+        return ResultVoUtil.success(ExceptionEnum.SUCCESS, "操作成功。");
+    }
+
+}

+ 29 - 0
src/main/java/thyyxxk/webserver/utils/ActOrderNoUtil.java

@@ -0,0 +1,29 @@
+package thyyxxk.webserver.utils;
+
+import org.springframework.stereotype.Service;
+import thyyxxk.webserver.dao.his.casefrontsheet.HuiZhenShenQingDao;
+
+/**
+ * <p>
+ * 描述: 生成医嘱号
+ * </p>
+ *
+ * @author xc
+ * @date 2021-09-18 09:07
+ */
+@Service
+public class ActOrderNoUtil {
+
+    private final HuiZhenShenQingDao dao;
+
+    public ActOrderNoUtil(HuiZhenShenQingDao dao) {
+        this.dao = dao;
+    }
+
+    public float getActOrderNo() {
+        dao.lockTable();
+        float actOrderNo = dao.getActOrderNo() + 1;
+        dao.updateActOrderNo(actOrderNo);
+        return actOrderNo;
+    }
+}

+ 23 - 0
src/main/java/thyyxxk/webserver/utils/ListUtil.java

@@ -0,0 +1,23 @@
+package thyyxxk.webserver.utils;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 描述: 判断list
+ * </p>
+ *
+ * @author xc
+ * @date 2021-09-18 09:10
+ */
+public class ListUtil {
+
+    public static boolean isBlank(List<?> list) {
+        return list == null || list.isEmpty();
+    }
+
+    public static boolean notBlank(List<?> list) {
+        return list != null && !list.isEmpty();
+    }
+
+}

+ 11 - 11
src/main/java/thyyxxk/webserver/utils/PingYinUtils.java

@@ -59,21 +59,21 @@ public class PingYinUtils {
         format.setVCharType(HanyuPinyinVCharType.WITH_V);
 
         char[] input = inputString.trim().toCharArray();
-        String output = "";
+        StringBuilder output = new StringBuilder();
 
         try {
-            for (int i = 0; i < input.length; i++) {
-                if (Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {
-                    String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);
-                    output += temp[0];
+            for (char c : input) {
+                if (Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
+                    String[] temp = PinyinHelper.toHanyuPinyinStringArray(c, format);
+                    output.append(temp[0]);
                 } else {
-                    output += Character.toString(input[i]);
+                    output.append(Character.toString(c));
                 }
             }
         } catch (BadHanyuPinyinOutputFormatCombination e) {
             e.printStackTrace();
         }
-        return output;
+        return output.toString();
     }
 
     /**
@@ -117,15 +117,15 @@ public class PingYinUtils {
         HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
         defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
         defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
-        for (int i = 0; i < arr.length; i++) {
-            if (arr[i] > 128) {
+        for (char c : arr) {
+            if (c > 128) {
                 try {
-                    pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
+                    pybf.append(PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat)[0]);
                 } catch (BadHanyuPinyinOutputFormatCombination e) {
                     e.printStackTrace();
                 }
             } else {
-                pybf.append(arr[i]);
+                pybf.append(c);
             }
         }
         return pybf.toString();