order_status not in 和 !=
时间: 2023-09-17 07:03:09 浏览: 45
"order_status not in"和"!="都是用于比较两个值是否不相等的条件表达式,但它们在使用上有一些区别。
首先,"order_status not in"是用来比较一个值是否不在某个给定的集合内。它的语法形式为"value not in (value1, value2, ...)"。例如,如果我有一个订单状态的列表,包括"待处理"、"处理中"和"已完成",我可以使用"order_status not in ('待处理', '处理中')"来判断该订单状态是否不是"待处理"和"处理中"。
而"!="则是用来比较两个值是否不相等。它的语法形式为"value1 != value2"。例如,如果我想判断订单状态是否不是"已取消",可以使用"order_status != '已取消'"。
需要注意的是,"order_status not in"可以同时判断多个值是否不在集合内,而"!="只能对两个值进行比较。
在实际应用中,选择使用"order_status not in"还是"!="取决于具体的需求。如果需要判断一个值是否不在一个集合中,可以使用"order_status not in";如果只需要判断两个值是否不相等,可以使用"!="。
相关问题
def write(self, vals): audit = self.env['approval.flow'].search([('approval_cannot_run_id', '=', '修改')]) value_list = list(vals.keys()) receive_list = [] value_list_not_in_receive_list = [i for i in value_list if i not in receive_list] value_list = value_list_not_in_receive_list # 应付 dispatch_number = 0 dispatch_id = self.env['roke.dispatch.order.management.price.approve'].search([('order_id.id', '=', self.id)]) dispatch_list = ['value03', 'value04', 'value05', 'value06', 'value07', 'value08'] if dispatch_id: for rec in value_list: for dispatch_list_id in dispatch_list: if rec == dispatch_list_id: if dispatch_id.approval_status != '未提' and dispatch_id.approval_status != '驳回': raise UserError("应付费用已开始审核不允许修改") value_list_not_in_dispatch_list = [i for i in value_list if i not in dispatch_list] value_list = value_list_not_in_dispatch_list dispatch_number = 1 break if dispatch_number: break # 基础 base_number = 0 base_list = ['client', 'department_manager', 'box_number', 'shipping_companies', 'field_station', 'ship_name_voyage', 'port_of_discharge', 'box_type', 'code', 'bill__of_lading_number', 'departure_date', 'lead_sealing', 'booking_time', 'date_of_pick_up', 'encore_date', 'set_port_date', 'estimated_range', 'destination_port_arrival_time'] if value_list: for rec in value_list: for base_list_id in base_list: if rec == base_list_id: if dispatch_id: if dispatch_id.approval_status != '未提' and dispatch_id.approval_status != '驳回': raise UserError("应付费用已开始审核不允许修改") base_number = 1 break if base_number: break return super(Rokedispatchordermanagement, self).write(vals) audit审核完成如果是修改不能修改如果不是可以修改怎么写可以实现
在给定的代码中,如果修改的字段包含“应付费用”字段,则需要检查“roke.dispatch.order.management.price.approve”模型中的“approval_status”字段,如果不是“未提”或“驳回”,则不能进行修改,否则可以进行修改。如果修改的字段不包含“应付费用”字段,则需要检查是否存在“roke.dispatch.order.management.price.approve”模型,如果存在,则需要检查“approval_status”字段是否为“未提”或“驳回”,如果不是,则不能进行修改,否则可以进行修改。如果不存在“roke.dispatch.order.management.price.approve”模型,则可以直接进行修改。因此,可以在代码中加入以下内容来实现这个逻辑:
```
# 判断是否需要进行审核
if '应付费用' in vals:
dispatch_id = self.env['roke.dispatch.order.management.price.approve'].search([('order_id.id', '=', self.id)])
if dispatch_id and (dispatch_id.approval_status != '未提' and dispatch_id.approval_status != '驳回'):
raise UserError("应付费用已开始审核不允许修改")
else:
dispatch_id = self.env['roke.dispatch.order.management.price.approve'].search([('order_id.id', '=', self.id)])
if dispatch_id and (dispatch_id.approval_status != '未提' and dispatch_id.approval_status != '驳回'):
raise UserError("应付费用已开始审核不允许修改")
elif not dispatch_id:
# 可以直接进行修改
return super(Rokedispatchordermanagement, self).write(vals)
```
以上代码可以放在`write`方法中的`value_list = value_list_not_in_dispatch_list`和`return`之间,以实现对修改的限制。
请帮我解释下面这段代码 <select id="listByUser" resultType="com.yj.model.vo.EnrollByUserItemVO"> select cc.*, cc.course_start_time AS courseStartTimeMd, ub.id ubid, info.payment_status as payment_status, info.total_money as totalMoney, ccc.category_name, CASE WHEN cc.course_video is not null and cc.course_video != '' THEN 2 WHEN (SELECT count(1) FROM crs_course_class ccc2 WHERE cc.id = ccc2.course_id AND ccc2.data_flag = 1 AND ccc2.class_video IS NOT NULL and ccc2.class_video != '') > 0 THEN 2 ELSE 1 END AS courseType from user_course_enroll ub INNER JOIN crs_course cc ON ub.course_id = cc.id INNER JOIN crs_course_category ccc ON cc.course_category_id = ccc.id LEFT JOIN order_item item ON item.project_relevancy_id = ub.id LEFT JOIN order_info info ON item.info_id = info.id LEFT JOIN user_browse uu ON uu.user_id = ub.user_id and uu.course_id = ub.course_id and uu.data_flag = 1 where 1 = 1 <if test="(publicId != null and publicId != '' ) or ( userIds != null and userIds.size() != 0)"> and ( <if test="publicId != null and publicId != '' "> ub.public_id = #{publicId} </if> <if test="publicId != null and publicId != '' and userIds != null and userIds.size() != 0"> or ub.user_id IN <foreach collection="userIds" item="item" open="(" separator="," close=")" index="index"> #{item} </foreach> </if> <if test="(publicId == null or publicId == '') and userIds != null and userIds.size() != 0"> ub.user_id IN <foreach collection="userIds" item="item" open="(" separator="," close=")" index="index"> #{item} </foreach> </if> ) </if> <choose> <when test="query.paymentStateList != null and query.paymentStateList.size() != 0"> and ccc.data_flag = 1 </when> <otherwise> and ub.apply_type = 1 and ccc.data_flag = 1 and ub.data_flag = 1 and ub.verify_state = 1 and cc.data_flag = 1 </otherwise> </choose> <if test="query.shelfStatus !=null"> and cc.shelf_status = #{query.shelfStatus} </if> <if test="query.categoryId !=null and query.categoryId != ''"> and ccc.id = #{query.categoryId} </if> <if test="query.learnState !=null"> and uu.learn_state = #{query.learnState} and ccc.prelect_way = 1 </if> <if test="query.paymentStateList != null and query.paymentStateList.size() != 0"> AND ( info.payment_status IN <foreach collection="query.paymentStateList" item="item" open="(" separator="," close=")" index="index"> #{item} </foreach> ) </if> </select>
这是一个 MyBatis 的 SQL 查询语句,通过 id 属性指定查询语句的名称为 "listByUser",通过 resultType 指定查询结果映射到 com.yj.model.vo.EnrollByUserItemVO 类型的实例对象中。
查询语句主要是通过多个表的连接查询,得到用户选课信息的详细数据。其中包括课程信息、课程分类信息、用户选课信息、订单信息等。查询条件根据用户传入的参数动态生成。在条件中使用了 if 和 foreach 标签,根据不同的情况生成不同的查询条件。
除此之外,查询语句中还使用了 choose 标签,根据不同的条件生成不同的查询条件,相当于 Java 中的 switch 语句。
最后,查询语句中还使用了 CASE WHEN 语法,根据不同的条件返回不同的结果。在这个查询语句中,根据课程是否有视频,以及课程下是否有班次有视频,分别标记课程类型为 2 或 1。